CUDA验证核函数

CUDA验证核函数

既然你已经编写了核函数,你如何能知道它是否正确运行?你需要一个主机函数来验证核函数的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void checkResult(float *hostRef, float *gpuRef, const int N){
double epsilon = 1.0E-8;
int match = 1;
for(int i = 0 ;i < N; i++){
if(abs(hostRef[i] - gpuRef[i]) > epsilon){
match = 0;
printf("Arrays do not match!\n");
printf("host %5.2f gpu %5.2f at current %d\n",hostRef[i],gpuRef[i],i);
break;
}
}
if(match) printf("Arrays match.\n\n");
return;
}

验证核函数代码

除了许多可用的调试工具外,还有两个非常简单实用的方法可以验证核函数。

首先,你可以在Fermi及更高版本的设备端的核函数中使用printf函数。

其次,可以将执行参数设置为<<<1,1>>>,因此强制用一个块和一个线程执行核函数,这模拟了串行执行程序。这对于调试和验证结果是否正确是非常有用的,而且,如果你遇到了运算次序的问题,这有助于你对比验证数值结果是否是按位精确的。

参考资料

CUDA C编程权威指南 程润伟,Max Grossman(美),Ty Mckercher


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!