【发布时间】:2015-05-25 12:34:53
【问题描述】:
如果我在 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 在 @987654327 中定义@或__global__函数
所以,问题在于如何使用__device__ 或__global__ 连接到设备lambda。
【问题讨论】:
-
你有没有尝试过?
-
我试图在 lambda 定义之前添加
__device__,然后编译器会抱怨error : expected an expression。有什么想法吗? -
我猜想 if 这可以工作(我不知道是否是这种情况或注意),您需要定义全局范围内的lamba并用
__device__ __host__装饰它,也许像__device__ __host__ auto cudalambda = [](int a, int b)->int { return a + b;};这样的东西然后在推力关闭中使用它,但这只是一个疯狂的猜测 -
我试过了。我的帖子中有相同的错误消息。
-
好的,所以答案可能是你做不到。改为写一个仿函数