Относительно использования __device__ для переменных - PullRequest
1 голос
/ 03 января 2012

Я использую глобальную переменную, скажем, d_myVar, которая будет выделяться памяти устройства с помощью cudaMalloc в основной функции.Мне непонятно, должен ли я использовать __ device __ перед ним при выполнении глобального объявления?Я спрашиваю об этом, так как, если бы это была локальная переменная в хосте и была передана ядру, мы бы не писали перед ним __ device __Дайте мне знать, если я ошибаюсь.

1 Ответ

7 голосов
/ 03 января 2012

Глобальные переменные __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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...