Могу ли я передать подмножество матрицы в другую функцию в MKL?

Я пытаюсь оптимизировать множество матричных вычислений в 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;

0

Решение

То, что вы сделали, это именно официальный способ ссылки на подматрицу.

Одна из наиболее важных причин, по которым функции BLAS выбирают в качестве входных параметров матрицы в качестве входных параметров, заключается в том, что они позволяют легко ссылаться на подматрицу без дополнительного копирования данных.

1

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

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

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