0
所以,如果我有一個設備(或全球)函數創建/一些數據複製到共享內存和我再打另一設備功能,像這樣:如果我在一個函數中創建/分配共享內存,我可以在我不能調用的函數內部使用它嗎?
__global__ void a(){
__shared__ int blah=0;
fun();
}
__device__ void fun(){
blah = 1; //perform some operations
//do whatever
}
我有點生疏與我的CUDA,我想你可能不得不「重新定義」共享變量(我假設操作檢查是否存在該名稱的共享變量,如果這樣分配它) - 這有創建上下文的效果 - 所以基本上這個變量不是從哪裏來的。或者,如果它與標準C/C++中的全局變量相似,並且我可以像上面那樣引用它,那就太棒了。
我很熟悉內存層次結構,我只是在創建/引用內存的語義上生鏽。
請告知上述草圖是否可行。謝謝。
但是,如果您有多個線程 - 您無法傳遞引用,則每個線程都會嘗試分配該名稱的共享內存,因此該塊中的所有線程都可以訪問__shared__變量。 – Nisk
當然,您可以將對共享內存變量的引用傳遞給設備函數,並且完全有效。出於_correctness_原因,您所做的例子不會無條件地完成,但運行時會發生什麼,編譯時會發生什麼是完全不同的問題。 – talonmies