我正在尝试优化 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;