2013-02-16 47 views

回答

6

爲了聲明將駐留在CUDA全局內存中的變量,您需要將__device__關鍵字放在它的前面,例如,

__device__ bool myGlobalBoolVar; 

或者,也可以在全局內存空間cudaMalloc,例如分配內存

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

然後您可以將指針作爲參數傳遞給內核。請注意,指針參數本身將駐留在常量或共享內存空間中(取決於體系結構),但它將指向全局內存。

-3

當你呼喚你的__global__ kernel <<<i,j>>>()功能,並給他一些變量,那麼所有這些變量將是全球(共享)爲您的所有線程獨立存在於同一塊或不變量。

+0

這是錯誤的。根據架構,內核的參數變量位於共享或常量內存中。每個塊都有自己的數據副本。 – CygnusX1 2013-02-16 08:33:29

+1

Ow。我看到「全球(共享)變量」。小心,在CUDA中,「共享內存」與「全局內存」不同,儘管是的,全局內存在所有線程和所有塊之間共享。 – CygnusX1 2013-02-16 08:38:52