Pointers 指向任意值的Cuda复制指针

Pointers 指向任意值的Cuda复制指针,pointers,cuda,memcpy,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(){ T

假设我有这样的课

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

}
class对话框{
公众:
int值1;
int值2;
int**p;
整数大小;
int结果;
int测试(){
结果=0;
对于(int i=0;i
我是这样用的

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

}
intmain(){
盒子b;
b、 值1=5;
b、 数值2=7;
b、 尺寸=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;
库特
是否有一种方法可以正确地对对象“b”执行
cudaMemcpy
,而无需 这个信息

一句话,不。鉴于指针数组的内容包含主机地址,因此,只有在GPU内存中已经建立了类的实例之后才能正确设置,因此“正确地执行
cudaMemcpy
”在本文中的含义甚至都不明显

唯一可行的方法是在内存中构造一个GPU可以直接访问的实例。您可以使用统一内存(例如,请参阅)或通过在主机内存中构建设备结构的副本并将其复制到设备(例如,请参阅)来实现这一点

是否有一种方法可以正确地对对象“b”执行
cudaMemcpy
,而无需 这个信息

一句话,不。鉴于指针数组的内容包含主机地址,因此,只有在GPU内存中已经建立了类的实例之后才能正确设置,因此“正确地执行
cudaMemcpy
”在本文中的含义甚至都不明显

唯一可行的方法是在内存中构造一个GPU可以直接访问的实例。您可以使用统一内存(例如,请参阅)或通过在主机内存中构建设备结构的副本并将其复制到设备(例如,请参阅)来实现这一点