2016-03-04 83 views
0

我无法运行openblas cblas测试程序。当乘以方矩阵时,我的Cblas完美运行,但是当我用非方矩阵尝试时,我得到错误“分段错误 - 核心抛弃” 我检查并重新检查了尺寸问题,但它们似乎是正确的,所以我想知道可能会发生什么是错的。当我输入m = 200而不是m = 300时,它完美地工作。非方矩阵Openblas cblas分段错误

例如,下面的程序无法正常工作

#include <iostream> 
    #include <stdlib.h> 

    extern "C" 
    { 
    #include <cblas.h> 
    } 



    using namespace std; 

    int main() 
    { 
     double *a,*x, *y, *z; 
     int m,k; 
     m=300; k=200; 

     a = (double *) malloc(m*k*sizeof(double)); 
     x = (double *) malloc (k*sizeof(double)); 
     y = (double *) malloc (m*sizeof(double)); 
     z = (double *) malloc (m*sizeof(double)); 

     int i; 

     for (i = 0; i < (m*k); ++i) 
     { 
      a[i] = 1; 
     } 

     for (i = 0; i < (k); ++i) 
     { 
      x[i] = 1; 
     } 

     for (i = 0; i < (m); ++i) 
     { 
      y[i] = 100 ; 
     } 

     cblas_dcopy(m,y,1,z,1); 
     cblas_dgemv(CblasRowMajor,CblasNoTrans,m,k,1.0, a ,m ,x, 1, 1.0, z, 1); 


     for (int i = 0; i<m; ++i) 
     { 
      cout<<z[i]<<endl; 
     } 

     free (a); 
     free (x) ; 
     free (y) ; 
     free (z) ; 

     return 0; 
     } 

在此先感谢

回答

0

我已经想通了这个问题很多:BLAS的文件(自带的参数中给出的参数LDA在矩阵之后)对应于他们称之为“矩阵的主要维度”。只有在COLMAJOR系统(由Fortran使用)中将矩阵行数作为LDA传递,如果您在C或C++中使用cblas,则必须将列数作为LDA传递,因为使用了ROWMAJOR系统。

希望这可以帮助未来的人