jjzjj

c++ - SGEMM 结果不一致

我正在使用英特尔MKL库中的sgemm函数在英特尔CPU上乘以大型矩阵。我有一个单元测试,它获取一组数据并通过各种算法运行数据。已经证明,在使用这组数据的两次传递之间,如果不使用sgemm(使用非优化算法而不是我公司某人编写的算法),结果是完全相同的。我们得到的结果与函数返回的矩阵中的最低有效数字不一致。然后,我们使用的算法类型可能会加剧此错误。我通过切换到dgemm并使用double值而不是单精度值来避免效果的重要性。但是,我仍然对可能导致这种不一致的原因以及为什么乘以矩阵(使用我们自己未优化的算法)不会导致此问题感兴趣。我目前的想法是,在乘以矩阵时,浮点乘法可能会乱序执行,并且因为

c++ - ATLAS gemm 将 undefined reference 链接到 'cblas_sgemm'

这是我第一次尝试使用ATLAS。我无法正确链接它。这是一个非常简单的sgemm程序:...#includeconstintM=10;constintN=8;constintK=5;intmain(){float*A=newfloat[M*K];float*B=newfloat[K*N];float*C=newfloat[M*N];//InitializeAandBcblas_sgemm(CblasRowMajor,CblasNoTrans,CblasNoTrans,M,N,K,1.0,A,K,B,N,0.0,C,N);...}当我在带有标准ATLAS安装的linux平台上编译它时,出现