我正在实现一个数学算法,需要保留~15个不同的浮点向量。我想将所有这些设备向量包装到结构
中typedef struct {
thrust::device_vector<float> ...
} data;
并将此结构传递给不同的函数。有可能有这样的包装?当我尝试初始化一个这样的结构
data* mydata = (data*) malloc(sizeof(struct data));
我收到此错误
错误:typedef“data”不能用于精心设计的类型说明符
此外,我怀疑当其内容没有驻留在主机内存中时,将大小 data 的内存块进行mallocing
答案 0 :(得分:2)
正如评论中所提到的,标题中描述的原始错误与推力无关,但由于使用了struct data
,data
已经是类型定义的。
在回应评论中提出的其他问题时,我只是试图说明我没有充分考虑在结构中使用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
的原始方法可能有用,我只是不知道并且没有探索它。