Отправка char ** типов данных на устройство - PullRequest
0 голосов
/ 22 июня 2010

У меня есть массив символьных указателей, которые я хочу отправить на устройство.Может кто-нибудь сказать мне, как?

Вот что я пробовал до сих пор:

char **a;
char **b;
*a[0]="Foo1";
*a[1]=="Foo2";

cudaMalloc(void**)?,sizeof(?);
cudamemcpy(b,a,sizeof(?),cudaMemcpyHostToDevice);

Как передать параметры в две вышеупомянутые функции?И, наконец, как должно называться ядро?(Я просто передаю b или * b или что-то?)

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

Если вы отправите символьные указатели на устройство, у вас будет массив адресов памяти ЦП на устройстве, что, вероятно, не то, что вам нужно.

Если вы хотите отправить всю структуру данных туда, выделите sizeof(char) * string_length байтов для каждой строки, а затем сохраните полученные указатели device в массиве ЦП char* s.Затем, когда все будет готово, отправьте массив указателей устройства на устройство, выделив для него sizeof(char*) * number_of_strings байт.

Когда вы вызываете ядро, передайте ему массив указателей устройства на стороне устройства.

0 голосов
/ 22 июня 2010

для назначения, используйте array[0] = "string literal" Звезды не нужны.

Чтобы получить длину, используйте strlen (). siezeof не имеет значения.

Никогда не копируйте в эту строковую матрицу и не передавайте ее как параметр out. Вы должны выделить память для этого.

...