2013-07-12 34 views
1

我想要在CUDA設備上的__constant__內存中初始化一個數組。我不知道它的大小或值,直到運行時。在CUDA上使用__constant__內存的正確方法?

我知道我可以使用__constant__ float Points[**N**][2]或類似的東西,但我如何使這種動態?可能是__constant__ float* Points的形式?

這可能嗎?可能更重要的是,這是一個好主意嗎?如果有更好的替代方案來做到這一點,我很樂意聽到他們的聲音。

+0

[CUDA中常量內存的動態分配]的可能重複(http://stackoverflow.com/questions/271273/dynamic-allocation-of-constant-memory-in-cuda)。本主題也在[常量內存分配和初始化](https://devtalk.nvidia.com/default/topic/367449/cuda-programming-and-performance/constant-memory-allocation-and-initialization/)中討論過。 。 – JackOLantern

+0

這正是我所需要的。如果你讓這個答案我會接受。 –

回答

2

正如Dynamic Allocation of Constant memory in CUDAConstant memory allocation and initialization中所討論的那樣,你不能。作爲Constant memory allocation and initialization注意到,

常量嵌入在編譯時可執行文件(這就是爲什麼你必須字節複製到被指定的符號在運行時設置的常數值地址)。因此,您將無法爲同一編譯內核的不同調用分配不同大小的常量數組。

Constant memory allocation and initialization的建議是使用紋理內存,因爲

紋理尺寸可以動態地進行設定它們被緩存。

如果您使用的是開普勒,我的建議是通過const __restrict來修飾數組指針。通過這種方式,您將能夠動態分配數組,並且編譯器將安排事物,以便在運行時通過紋理緩存自動讀取數據。