0

I'm using cblass_dgemm to multiply two matrices

It is supposed to calculate B = A' x A;

row_train = 10304, col_train = 5;

gsl_matrix *mean_centred_train = gsl_matrix_alloc(row_train, col_train);
gsl_matrix * image_for_eigen = gsl_matrix_alloc(col_train, col_train);

This is how I call it:

cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, mean_centred_train->size1, mean_centred_train->size2, mean_centred_train->size2, 1, mean_centred_train->data, mean_centred_train->size1, mean_centred_train->data, mean_centred_train->size1, 1, image_for_eigen->data, image_for_eigen->size1);

And when I run the program I get a segmentation fault, and I'm pretty sure the sizes of matrices are correct.

Jesus Ramos
  • 22,940
  • 10
  • 58
  • 88
Tal_
  • 761
  • 2
  • 6
  • 13

1 Answers1

1

It should be like this.

cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, 
            image_for_eigen->size1, //m
            image_for_eigen ->size2,  //n
            mean_centred_train->size1,  //k
            1.0, //alpha 
            mean_centred_train->data, mean_centred_train->size1,
            mean_centred_train->data, mean_centred_train->size1,
            0.0, //beta
            image_for_eigen->data, image_for_eigen->size1);

[m, n] are size of the result matrix, no matter the input matrices are transposed or not. Also beta should be 0.0 if you want B=A'*A.

kangshiyin
  • 9,681
  • 1
  • 17
  • 29