Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

CUDA矩阵乘法计算验证

Posted on 2012-05-17 21:59  romi  阅读(2387)  评论(0编辑  收藏  举报

前面讲了使用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数据,如果对精度要求很高的话,可能会有点问题。