最近在實現一個向量相稱的CUDA程序的時候,碰見一個讓我很頭疼的問題。基本癥狀是:計算結果在小數據量的時候是完全正確的,如果向量的維數增大到一定數值后,計算結果就不對了。我查了好久,終于找到了問題的源頭。竟然是數據類型的問題,寫下來提醒后來人!
我在內核函數中使用以下語句:
01.unsigned char tx = threadIdx.x;
02.unsigned char bx = blockIdx.x;
03.unsigned int id = tx + bx*blockDim.x;

id竟然不對了。我需要ls個線程,如果ls的數目足夠大,使得bx的值溢出了。
解決方法是:
unsigned short bx = blockIdx.x;
頭疼的解決總會是好的。歡迎大家的駐足,我繼續。。
http://blog.csdn.net/bendanban/article/details/7971447