感谢@Eric Shiyin Kang 回复我的问题,但不是前缀“主机”或“设备”导致我的问题,经过一些尝试和错误,我发现错误是“成员数据始终为常数”举个例子:
struct OP {
int N;
__host__ __device__
OP(const int n): N(n){};
__host__ __device__
UI operator()(const UI a) {
int b = a * N;
N++;
return b;
}
}
thrust::transform(A.begin(), A.end(), B.begin(), OP(2) );
在这种情况下,如果 A 是 {0, 1, 2, 3, ... },那么 B 是 {0, 2, 4, 6, 8},但实际的 B 应该是 {0, 3(1*( 2+1)), 8(2*(3+1)), 15(3*(4+1)),....}
我不知道是什么原因导致这种情况,推力设计的原因?谁能告诉我?