我有一个CUDA搜索功能,可以计算一个变量.我怎么能把它还给我.
__global__
void G_SearchByNameID(node* Node, long nodeCount, long start,char* dest, long answer){
answer = 2;
}
cudaMemcpy(h_answer, d_answer, sizeof(long), cudaMemcpyDeviceToHost);
cudaFree(d_answer);
Run Code Online (Sandbox Code Playgroud)
对于这两行我得到这个错误:错误:类型"long"的参数与类型"const void*"的参数不兼容
wic*_*ich 28
我一直在__device__为此目的使用变量,这样你就不必费心了cudaMalloc而且cudaFree你不必将指针作为内核参数传递,这样就可以在你的内核中保存一个寄存器来启动.
__device__ long d_answer;
__global__ void G_SearchByNameID() {
d_answer = 2;
}
int main() {
SearchByNameID<<<1,1>>>();
typeof(d_answer) answer;
cudaMemcpyFromSymbol(&answer, "d_answer", sizeof(answer), 0, cudaMemcpyDeviceToHost);
printf("answer: %d\n", answer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
fab*_*ioM 17
要获得单个结果,您必须对其进行Memcpy,即:
#include <assert.h>
__global__ void g_singleAnswer(long* answer){ *answer = 2; }
int main(){
long h_answer;
long* d_answer;
cudaMalloc(&d_answer, sizeof(long));
g_singleAnswer<<<1,1>>>(d_answer);
cudaMemcpy(&h_answer, d_answer, sizeof(long), cudaMemcpyDeviceToHost);
cudaFree(d_answer);
assert(h_answer == 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想错误来了,因为你传递一个long值,而不是指向long值的指针.
| 归档时间: |
|
| 查看次数: |
22703 次 |
| 最近记录: |