最近在实现一个向量相称的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