如果我在使用
thrust::host
上使用thrust::transform
,那么lambda的使用就没问题。thrust::transform(thrust::host, a, a+arraySize,b,d,[](int a, int b)->int
{
return a + b;
});
然而,如果我将thrust::host
更改为thrust::device
,代码将无法通过编译器。以下是在VS2013上的错误信息:
lambda的闭包类型(“lambda [](int, int)->int”)不能用于
__global__
函数模板实例化的模板参数类型,除非lambda定义在__device__
或__global__
函数内部。
因此,问题是如何在设备lambda与__device__
或__global__
之间建立连接。
__device__
,然后编译器会报错error: expected an expression
。有什么想法吗? - spiritsaway__device__ __host__
装饰它,可能像这样:__device__ __host__ auto cudalambda = [](int a, int b)->int { return a + b;};
然后在Thrust闭包中使用它。但这只是一个猜测。 - talonmies