前面讲了使用CUDA进行矩阵乘法,如何判断计算是否正确呢,因为矩阵很大。这里采用的方法时将一部分数据采样出来输出到文本中查看结果
在矩阵乘法函数中加入如下测试:
在extern "C" void MatrixMultiplication_CUDA(const float* M,const float* N,float* P,int Width)函数中加入如下代码,注意加在显卡设备数据复制到内存后。
1 //测试计算结果用 2 FILE* file1 = fopen("test_M.txt","w"); 3 FILE* file2 = fopen("test_N.txt","w"); 4 FILE* file3 = fopen("test_P.txt","w"); 5 for(int i=0;i<1024;i++) //输出前1024个元素 6 { 7 fprintf(file1,"%f ",M[i]); //输出M第一行 8 fprintf(file2,"%f ",N[i*1024]); //输出N第一列 9 fprintf(file3,"%f ",P[i]); 10 if(0==(i+1)%5) 11 { 12 fprintf(file1,"\n"); 13 fprintf(file2,"\n"); 14 fprintf(file3,"\n"); 15 } 16 } 17 fclose(file1); 18 fclose(file2); 19 fclose(file3);
为了方便测试,将需要计算的矩阵M和N每个元素都赋1.5。
结果如下:
可以计算下数组P的元素大小:1.5*1.5*1024=2304。因此由测试可知使用GPU设备计算时准确的。但GPU设备只不支持double数据,如果对精度要求很高的话,可能会有点问题。