0

我正在实现一个数学算法,需要保持大约 15 个不同的浮点向量。我想将所有这些设备向量包装到一个结构中

typedef struct {
  thrust::device_vector<float> ...
} data;

并将这个结构传递给不同的函数。有可能有这样的包装吗?当我尝试初始化一个这样的结构时

data* mydata = (data*) malloc(sizeof(struct data)); 

我收到此错误

错误:typedef "data" 不能用在详细的类型说明符中

另外,当内存中没有任何内容驻留在主机内存中时,我怀疑分配一块大小数据的内存

4

1 回答 1

2

正如评论中提到的,标题中描述的原始错误与推力无关,而是由于使用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可能有效,我只是不知道,也没有探索过。

于 2013-02-20T19:09:28.567 回答