2015-04-04 139 views
1

我有一個這樣的CUDA內核函數:如何獲取CUDA內核函數中數組的大小?

__global__ void kernel(int a, int b) 
{ 
extern __shared__ unsigned char array[]; 
//int size = /*size of array*/; = 16 
} 

和功能主要我把它叫做:

sharedMemSize = 16; 
kernel<<<gridSize, blockSize, sharedMemSize>>>(1, 2); 

我怎樣才能得到共享存儲陣列的大小? 這是我第一次在StackOverflow上有一個問題:)謝謝!

回答

1

將它作爲內核參數傳遞?

kernel<<<gridSize, blockSize, sharedMemSize>>>(1, 2, sharedMemSize); 
+0

或模板參數 – talonmies 2015-04-04 21:22:49

+0

動態分配共享內存的模板參數? – 2015-04-04 22:28:44

+0

爲什麼不呢?通常只有非常有限數量的共享內存大小,大多數內核實際上已經啓動了,因此大小和一些編譯時間實例的模板參數可以覆蓋這些內存大小。擁有已知的常量可以通過改進編譯器優化來提高性能。然後動態分配可以一起移除並替換爲模板靜態分配。 – talonmies 2015-04-05 04:57:22

1

您可以使用:sizeof(array)獲取陣列的大小(以字節爲單位)。