Я работаю с OpenBLAS в Windows и испытываю сбои. Я использую тестовый код ниже (вся программа), взятый из Intel MKL из Вот (Я немного изменил это). Та же проблема с другими вызовами функций. При пошаговой отладке сбой происходит после return 0
в основном. Цикл, который выводит матрицу, выдает правильный результат.
double *A, *B, *C;
int m, n, k, i, j;
double alpha, beta;
m = 2, k = 2, n = 2;
alpha = 1.0; beta = 0.0;
A = (double *) malloc(m*k*sizeof(double));
B = (double *) malloc(k*n*sizeof(double));
C = (double *) malloc(m*n*sizeof(double));
for (i = 0; i < (m*k); i++) A[i] = (double) (i + 1);
for (i = 0; i < (k*n); i++) B[i] = (double) (-i - 1);
for (i = 0; i < (m*n); i++) C[i] = (double) 0.0;cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, A, k, B, n, beta, C, n);printf("\n Top left corner of matrix C: \n");
for (i = 0; i<min(m, 6); i++)
{
for (j = 0; j<min(n, 6); j++)
printf("%12.5G", C[j + i*n]);
printf("\n");
}
free(A);
free(B);
free(C);
Авария происходит после exit(mainret)
выполнен.
#else /* !defined (_WINMAIN_) && defined (_CRT_APP) */
if ( !managedapp )
{
#ifndef _CRT_APP
exit(mainret);
#else
_exit_app();
#endif /* _CRT_APP */
#if !defined(_WINMAIN_) && defined(_CRT_APP)
/* WINAPI_FAMILY_APP "Windows" applications should never reach here,
* but Console applications will if they do not exit the process.
* So, terminate the process for Console apps only
*/
ExitProcess(mainret);
#endif
}
Первым делом я подумал о значении ESP, которое может быть повреждено, если соглашения о вызовах функций не совпадают (я использую предварительно собранные библиотеки MinGW OpenBLAS 0.2.14), но все проверки ESP в отладочной сборке проходят успешно.
Я использую компилятор MSVC ++ и встроенная сборка является 32-битной.
Как я могу определить проблему более точно или что может быть причиной этого сбоя?
Задача ещё не решена.