2016-11-21 131 views
0

我是CUDA的初學者,我試圖爲雙數據類型和指向雙數據類型的指針分配共享內存。我使用動態分配共享內存的數組和CUDA中的數據指針

extern __shared__ double dataShared[]; 

在這裏,在我想指針在特定的地方

int v = threadIdx.x; 
dataShared[v] = &dataShared[v + (v+1)*data.V]; 

我希望有一個2D雙數據陣列和1d指針數組指向共享2D arrayin的每一列此數據分配數據記憶。在這裏,我避免了由於性能影響而導致的指針數組的動態分配。這裏指針數組被移位並用於訪問列,這樣2d數組將被列移位。

但是,這是不允許的,是否有任何其他方式可以實現這一點。目前我正在使用cuda 7.5,如果有人可以建議cuda 8.0中有什麼新功能來實現這一點,那會更好。

+1

目前還不清楚你在問什麼。這行:'dataShared [v] =&dataShared [']'沒有意義,因爲您將指針類型的值賦給double類型的數組元素。我嚴重懷疑CUDA存在問題。你可能想試着想出一個簡單的C的解決方案。它肯定也適用於CUDA。爲了獲得有意義的答案,您需要發佈更多代碼和/或更好地解釋您的意圖。它也可能是一個[XY問題](http://xyproblem.info/),所以你可能想要添加一些關於你試圖解決的問題的上下文的更多信息 – Drop

回答

2

您可以使用2個不同的指針,有不同的類型,以指向共享內存的同一塊:

extern __shared__ char dataShared[]; 
double ** columns = (double **) dataShared; //Here you can store pointers to columns 
double * realData = (double *) (dataShared + N * sizeof(double *)); //N is the number of columns 

在這裏,您使用的共享內存的一個塊,但使用不同的偏移量爲它的2個區域(指向列的偏移量爲0,實際數據偏移量爲N * sizeof(double *))。