理解cudaMemcpyFromSymbol()的符号参数

理解cudaMemcpyFromSymbol()的符号参数,cuda,Cuda,下面,我包含了一个自包含的示例,它使用cudaMemcpyFromSymbol()从内核检索结果。该示例将符号参数(调用中的第二个参数)作为正则变量传递。但是,据我所知,CUDA文档将参数作为字符串传递,即: cudaMemcpyFromSymbol(&out, "out_d", sizeof(out_d), 0, cudaMemcpyDeviceToHost); (在符号名称周围加引号)也应该有效。这对我不起作用 符号名称何时起作用?符号名称作为字符串何时起作用 #include "

下面,我包含了一个自包含的示例,它使用
cudaMemcpyFromSymbol()
从内核检索结果。该示例将符号参数(调用中的第二个参数)作为正则变量传递。但是,据我所知,CUDA文档将参数作为字符串传递,即:

cudaMemcpyFromSymbol(&out, "out_d", sizeof(out_d), 0, cudaMemcpyDeviceToHost);
(在符号名称周围加引号)也应该有效。这对我不起作用

符号名称何时起作用?符号名称作为字符串何时起作用

#include "cuda_runtime.h"
#include <stdio.h>

__device__ int out_d;

__global__ void test() {
  out_d = 123;
}

int main() {
  test<<<1,1>>>();
  int out;
  cudaMemcpyFromSymbol(&out, out_d, sizeof(out_d), 0, cudaMemcpyDeviceToHost);
  printf("%d\n", out);
  return 0;
}
#包括“cuda_runtime.h”
#包括
__设备输入输出;
__全局无效测试(){
out_d=123;
}
int main(){
test();
指出;
cudaMemcpyFromSymbol(&out,out\u d,sizeof(out\u d),0,cudaMemcpyDeviceToHost);
printf(“%d\n”,out);
返回0;
}

在CUDA 4.2中不推荐将符号名作为字符串参数传递,而在CUDA 5.0中取消了语法。原因与启用独立的设备代码链接器功能有关,该功能出现在CUDA 5中。对于cuda 5工具包,此更改记录在中。•不再支持使用字符串来表示设备符号,这在某些API函数中是可能的。相反,应直接使用该符号