c/c++语言开发共享cblas_dgemm – 仅在(beta)为2的幂时起作用

我完全难过了。 我有一个用c编写的相当大的递归程序,它调用cblas_dgemm()。 结果由正常工作的程序独立validation。

C = alpha*A*B + beta*C 

在使用随机矩阵和所有可能的参数组合的重复测试中,程序仅在abs(beta)= 2 ^ n(1,2,4,8 ..)时给出正确的答案。 任何值都适用于alpha。 β的任何其他正/负,奇数/偶数值在10-30%的时间内给出正确的答案。

我正在使用Ubuntu 10.04,GCC 4.4.x,我已经尝试过系统安装的blas / cblas / atlas以及手动编译的图集。

任何提示或建议将不胜感激。 我对在这个网站潜伏的非常慷慨(和聪明)的人感到惊讶。

提前感谢你们,

拉斯

    两个完全不相关的错误共同产生了一个虚幻的画面。 它让我在错误的地方寻找问题。

    (1)调用dgemm的函数的逻辑有一个简单的错误。 如果我没有追逐错误的问题,本来很容易修复。

    (2)我的双重比较函数:AlmostEqual2sComplement()的双版本( )使用了不正确大小的整数 – 在某些罕见情况下导致错误的TRUE 。 这是第一次错误咬我!

    再次感谢您在尝试调试程序时使用科学方法的有用建议。

    拉斯

    是的,一个完整的例子会很方便。 这是我使用GSL的sgemm变体sgemm一个旧例子; 应该很容易修复到double 。 请尝试查看是否给出了GSL手册中显示的结果:

     /* from the gsl info documentation in node 'gsl cblas examples' */ /* compile via 'gcc -o $file $file.c -lgslcblas' */ /* edd 15 Nov 2003 */ #include  #include  int main (void) { int lda = 3; float A[] = { 0.11, 0.12, 0.13, 0.21, 0.22, 0.23 }; int ldb = 2; float B[] = { 1011, 1012, 1021, 1022, 1031, 1032 }; int ldc = 2; float C[] = { 0.00, 0.00, 0.00, 0.00 }; /* Compute C = AB */ cblas_sgemm (CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 3, 1.0, A, lda, B, ldb, 0.0, C, ldc); printf ("[ %g, %gn", C[0], C[1]); printf (" %g, %g ]n", C[2], C[3]); return 0; } 

      以上就是c/c++开发分享cblas_dgemm – 仅在(beta)为2的幂时起作用相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522844.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐