正如评论中提到的,标题中描述的原始错误与推力无关,而是由于使用struct data
, whendata
已经被 typedef 了。
在回答评论中提出的其他问题时,我只是想说我没有充分考虑thrust::device_vector<>
在结构中使用的后果。当我说也许考虑thrust::device_ptr<>
改用时,我想到了这样的东西,这似乎对我有用:
#include <stdio.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/device_ptr.h>
#include <thrust/sequence.h>
#include <thrust/transform.h>
#include <thrust/functional.h>
#define N 10
typedef struct {
thrust::device_ptr<float> dp1;
thrust::device_ptr<float> dp2;
int i;
} data;
int main(){
thrust::negate<int> op;
data *mydata = (data *)malloc(sizeof(data));
thrust::host_vector<float> h1(N);
thrust::sequence(h1.begin(), h1.end());
thrust::device_vector<float> d1=h1;
mydata->dp1=d1.data();
mydata->dp1[0]=mydata->dp1[N-1];
thrust::transform(mydata->dp1, mydata->dp1 + N, mydata->dp1, op); // in-place transformation
thrust::copy(d1.begin(), d1.end(), h1.begin());
for (int i=0; i<N; i++)
printf("h1[%d] = %f\n", i, h1[i]);
return 0;
}
话虽如此,在结构内部使用的原始方法device_vector
可能有效,我只是不知道,也没有探索过。