簡単な文字割り当てを行う以下のコードを見てください
__global__ void seehowpointerwork(char* gpuHello, char* finalPoint){
char* temp;
bool found = false;
for(int i = 0 ; i < 11; i++){
if(gpuHello[i] == ' '){
temp = &gpuHello[i+1];
found = true;
break;
}
}
bool sth = found;
finalPoint = temp;
}
int main()
{
// Testing one concept;
string hello = "Hello World";
char* gpuHello;
cudaMalloc((void**)&gpuHello, 11 * sizeof(char));
cudaMemcpy(gpuHello, hello.c_str(), 11 * sizeof(char), cudaMemcpyHostToDevice);
char* didItFind;
char* whatIsIt = (char*)malloc(5 * sizeof(char));
seehowpointerwork<<<1,1>>>(gpuHello, didItFind);
cudaMemcpy(whatIsIt,didItFind, 5 * sizeof(char), cudaMemcpyDeviceToHost);
cout<<"The pointer points to : " << whatIsIt;
return 0;
}
私が印刷するときwhatIsIt
、なぜそれが答えとして「世界」を印刷せず、ランダムな文字列を印刷するだけなのか、私は本当に理解していません。
指摘されたヌル文字を考慮した後、バージョンを更新します
__global__ void seehowpointerwork(char* gpuHello, char* finalPoint){
char* temp;
bool found = false;
for(int i = 0 ; i < 11; i++){
if(gpuHello[i] == ' '){
temp = gpuHello;
found = true;
break;
}
}
bool sth = found;
finalPoint = temp;
}
int main()
{
// Testing one concept;
string hello = "Hello World";
char* gpuHello;
cudaMalloc((void**)&gpuHello, 12 * sizeof(char));
cudaMemcpy(gpuHello, hello.c_str(), 12 * sizeof(char), cudaMemcpyHostToDevice);
char* didItFind;
char* whatIsIt = (char*)malloc(6 * sizeof(char));
seehowpointerwork<<<1,1>>>(gpuHello, didItFind);
cudaMemcpy(whatIsIt,didItFind, 6 * sizeof(char), cudaMemcpyDeviceToHost);
cout<<"The pointer points to : " << whatIsIt;
return 0;
}