了解cudaMemcpyFromSymbol()的符号参数

Rog*_*ahl 5 cuda

下面,我已经包含了一个自包含的示例,用于cudaMemcpyFromSymbol()从内核中检索结果.该示例将symbol参数(调用中的第二个参数)作为常规变量传递.但是,据我了解CUDA文档,将参数作为字符串传递,即:

cudaMemcpyFromSymbol(&out, "out_d", sizeof(out_d), 0, cudaMemcpyDeviceToHost);
Run Code Online (Sandbox Code Playgroud)

(带符号名称的引号),也应该有效.这对我不起作用.

符号名称何时起作用以及符号名称何时起作用?

#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;
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*lla 8

在CUDA 4.2中不推荐将符号名称作为字符串参数传递,并且在cuda 5.0中删除了语法.原因与启用单独的设备代码链接器功能有关,该功能出现在CUDA 5中.对于cuda 5工具包,此更改记录在发行说明中."•不再支持使用字符串来表示某些API函数可能出现的设备符号.相反,该符号应该直接使用."