2010-06-22 6 views
0

장치에 보내려는 문자 포인터의 배열이 있습니다. 누군가 어떻게 말해 줄 수 있니?장치에 char ** 데이터 형식 보내기

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

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

어떻게 위의 두 함수에 매개 변수를 전달하지 : 여기

는 지금까지 시도 무엇인가? 마지막으로 커널을 어떻게 호출해야합니까? (그냥 b 또는 * b를 전달합니까?)

답변

0

할당하려면 array[0] = "string literal" 별 필요가 없습니다.

길이를 가져 오려면 strlen()을 사용하십시오. 시즈오프는 무의미합니다.

이 문자열 행렬에 복사하거나 out 매개 변수로 전달하지 마십시오. 메모리를 할당해야합니다.

+0

ok..thanks ...하지만 내 주요한 두 가지 질문은 어떻게 cudaMemcpy와 cudaMalloc을 호출하는 것입니까? 그리고 커널을 어떻게 호출합니까? – ananth

2

문자 포인터를 장치로 보내면 장치에 CPU 메모리 주소 배열이 생깁니다. 이는 원하는 것이 아닐 수 있습니다.

당신이 거기에 전체 데이터 구조를 보내 각 문자열에 대한 sizeof(char) * string_length 바이트를 할당하고 char* s의 CPU 배열에 결과 장치를 포인터를 저장하려면

. 그런 다음 일단 완료되면 장치 포인터 배열을 장치에 보내고 sizeof(char*) * number_of_strings 바이트를 할당합니다.

커널을 호출 할 때 장치 포인터의 장치 측 배열을 지정하십시오.