2013-02-16 2 views

ответ

6

Чтобы объявить переменную, которая будет находиться в глобальной памяти CUDA, вам нужно поставить перед этим ключевое слово __device__, например.

__device__ bool myGlobalBoolVar; 

В качестве альтернативы, вы можете выделить память в глобальном пространстве памяти с cudaMalloc, например

bool* myGlobalBoolVarPtr; 
cudaMalloc(&myGlobalBoolVarPtr, sizeof(bool)); 

то вы можете передать указатель в качестве параметра в ядро. Обратите внимание, что параметр указателя будет находиться либо в постоянном, либо в общем пространстве памяти (в зависимости от архитектуры), но он укажет на глобальную память.

-3

Когда вы вызываете вашу __global__ kernel <<<i,j>>>() функции, и дать ему некоторые переменные, то все эти переменные будет глобальными (общие) переменными для всех потоков независимы существует в одном блоке или нет.

+0

Это неверно. Параметрические переменные ядра расположены либо в общей, либо в постоянной памяти в зависимости от архитектуры. Каждый блок имеет свою собственную копию данных. – CygnusX1

+1

Ow. Я вижу «глобальные (общие) переменные». Осторожно, в CUDA «общая память» не совпадает с «глобальной памятью», хотя да, глобальная память распределяется между всеми потоками и всеми блоками. – CygnusX1

Смежные вопросы