MKL CBlas ошибка

Я пытаюсь получить продукт с двумя матрицами, скажем, A и B, в C, используя cblas, предоставленный Intel MKL. Есть ли причина, по которой это может привести к ошибке?

double * A, *B, *C;

A = (double *) calloc(20 * 200, sizeof (double));
B = (double *) calloc(200 * 200, sizeof (double));
C = (double *) calloc(20 * 200, sizeof (double));

cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 
     20, 200, 200,
     1.0, A, 20,
     B, 200,
     0.0, C, 20);

1 ответ

Решение

Дважды проверьте все параметры cblas_dgemm. Если у вас есть ошибка, функция может читать за пределами массива. Для небольших размеров, которые не вызовут ошибку, так как неверные адреса все равно попадут на одну страницу памяти. (Но математика будет неправильной, вы должны это проверить.) Но матрица 200x200 - это 2,5 мегабайта данных, пропуск неправильного размера определенно вызовет ошибку segfault.

Другие вопросы по тегам