【问题标题】:Regarding use of __device__ for variables关于将 __device__ 用于变量
【发布时间】:2012-01-04 03:10:52
【问题描述】:

我正在使用一个全局变量 d_myVar,它将在主函数中使用 cudaMalloc 分配设备内存。我不清楚,在做全局声明时我应该在它前面使用__设备__吗?我问这个,因为如果它是主机中的局部变量并传递给内核,我们不会在它前面写 __device __。如果我错了,请告诉我。

【问题讨论】:

  • 看起来不像那个特定问题的重复。
  • 我想,我的问题有点不同。我只有一个 .cu 文件,我想要全局变量。我没有cpp文件。我想了解,何时定义一个全局变量,将设备内存分配为__设备__。我们可以没有它吗?

标签: memory cuda


【解决方案1】:

全局范围的__device__ 变量没有分配cudaMalloc。只需在全局范围内使用__device__ 注释变量即可:

 #include <stdio.h>

 __device__ int d_myVar;

 __global__ void foo()
 {
   printf("d_myVar is %d\n", d_myVar);
 }

 int main()
 {
   int h_myVar = 13;
   cudaMemcpyToSymbol(d_myVar, &h_myVar, sizeof(int), 0, cudaMemcpyHostToDevice);
   foo<<<1,1>>>();
   cudaThreadSynchronize();
   return 0;
 }

结果:

$ nvcc -arch=sm_20 test.cu -run
d_myVar is 13

【讨论】:

  • 太棒了!既然没有分配,我也不需要释放它,对吧?另外,我可以有这样的数组(在编译时知道大小)吗?但是编程指南的 3.2.2 显示了如何分配这样的数组(1. cudaMalloc 和 2. cudMemcpyToSymbol)。你能评论一下吗。感谢您提供有用的信息。
  • @user1118148 没错,你不需要释放它。不确定您是否可以拥有 __device__-annotated 数组。试试看会发生什么。
猜你喜欢
  • 2016-01-18
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2014-11-08
相关资源
最近更新 更多