我有一个字符指针数组,我想发送给设备。有人可以告诉我怎么做?
这是我到目前为止所尝试的内容:
char **a;
char **b;
*a[0]="Foo1";
*a[1]=="Foo2";
cudaMalloc(void**)?,sizeof(?);
cudamemcpy(b,a,sizeof(?),cudaMemcpyHostToDevice);
如何将参数传递给上述两个函数? 最后应该如何调用内核? (我只是通过b或* b或其他什么东西吗?)
答案 0 :(得分:2)
如果您将字符指针发送到设备,您将在设备上拥有一系列CPU内存地址,这可能不是您想要的。
如果要在那里发送整个数据结构,请为每个字符串分配sizeof(char) * string_length
个字节,然后将生成的设备指针存储在char*
s的CPU数组中。然后,一旦完成,将设备指针数组发送到设备,为其分配sizeof(char*) * number_of_strings
个字节。
当你调用内核时,给它设备指针的设备端数组。
答案 1 :(得分:0)
分配,使用array[0] = "string literal"
不需要明星。
要获得长度,请使用strlen()。西泽夫是无关紧要的。
永远不要复制到此字符串矩阵中,或将其作为out参数传递。 你必须为此分配内存。