Cuda将指针复制到任意值

时间:2018-04-08 08:03:42

标签: pointers cuda memcpy

说我有这样的课程

class TheBox{
public:
   int value1;
   int value2;

   int **p;
   int size;
   int result;

   int test(){
     result = 0;
     for (int i = 0; i < size; i++){
        result += *p[i];
     }
     return result;
   }
};

我像这样使用它

int main(){

TheBox b;
b.value1 = 5;
b.value2 = 7;
b.size = 10;
b.p = (int**)malloc(sizeof(int*)*b.size);

b.p[0] = &b.value1;
b.p[1] = &b.value1;
b.p[2] = &b.value2;
b.p[3] = &b.value1;
b.p[4] = &b.value1;
b.p[5] = &b.value2;
b.p[6] = &b.value2;
b.p[7] = &b.value1;
b.p[8] = &b.value1;
b.p[9] = &b.value1;

cout << b.host() << endl; //should output 56
b.value2 = 8;
cout << b.host() << endl; //should output 59

}

我的问题是我如何为对象做出cudaMemCpy&#34; b&#34;?

尝试复制数组时出现问题&#34; p&#34;我必须事先知道它是否包含value1或value2。

有没有办法正确地为对象做cudaMemcpy&#34; b&#34;没有这个信息?

1 个答案:

答案 0 :(得分:2)

  

有没有办法正确地为对象做出cudaMemcpy&#34; b&#34;无   这个信息?

总之,没有。并且显而易见的是{#1}}&#34;正确地做什么?cudaMemcpy&#34;在这种情况下,甚至意味着指针数组的内容包含主机地址,因此,只有在GPU内存中已经建立了类的实例后才能正确设置。

执行此操作的唯一可行方法是构造内存中的实例,GPU可直接访问该实例。您可以使用统一内存(请参阅here获取示例),或者在主机内存中构建设备结构的副本并将其复制到设备(有关一种方法,请参阅here)。< / p>