Я пытаюсь оптимизировать множество матричных вычислений в MKL, что требует от меня выделения больших блоков памяти, используя что-то вроде:
double* test_matrix = (double*)mkl_malloc(n * sizeof(double), 64)
.
В последнее время я обнаружил много всплывающих ошибок выделения памяти, которые трудно воспроизвести и еще труднее отладить. Меня беспокоит, что есть некоторые внутренние данные заголовка, которые MKL помещает в кучу, которые я не учитываю, используя мой текущий метод.
Существует ли "официальный" способ передачи подмножества матрицы MKL в другую функцию? Передача копии определенно слишком сильно увеличила бы мои накладные расходы. В настоящее время я даю ссылку на подмножество матрицы следующим образом:
double* a = (double*)mkl_malloc(4 * 4 * sizeof(double), 64);
double* b = (double*)mkl_malloc(4 * 4 * sizeof(double), 64);
double* c = (double*)mkl_malloc(2 * 2 * sizeof(double), 64);
... fill in values for a and b ...
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
2, 2, 2, 1, &a[2], 4, &b[2], 4, 0, c, 2);
cout << "Result is: " << c[0] << c[1] << c[2] << c[3] << endl;