Ошибка сегментации Openblas Cblas на неквадратной матрице

У меня проблемы с запуском программы тестирования openblas cblas. Мой Cblas работает отлично при умножении квадратных матриц, но когда я пробую его с неквадратными матрицами, я получаю ошибку «Ошибка сегментации — ядро ​​сброшено». Я проверил и перепроверил проблемы с размерами, но они кажутся правильными, поэтому мне интересно, что может быть неправильно. Когда я набираю m = 200 вместо m = 300, это работает отлично.

Например, следующая программа не работает

    #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

Решение

Я выяснил проблему: параметр LDA, приведенный в документации blas (параметр, который идет сразу после матрицы), соответствует тому, что они называют «ведущим измерением матрицы». Вы должны передать число строк матрицы как LDA только в системе COLMAJOR (используемой Fortran), если вы используете cblas в C или C ++, вы должны передать число столбцов как LDA, поскольку используется система ROWMAJOR.

Надеюсь, что это может помочь кому-то в будущем

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]