我可以将矩阵的子集传递到MKL中的另一个函数中吗

Can I pass a subset of a matrix into another function in MKL?

本文关键字:MKL 另一个 函数 子集 我可以      更新时间:2023-10-16

我正在尝试优化MKL中的许多矩阵计算,这需要我使用以下方法来分配大块内存:

CCD_ 1。

最近,我发现出现了很多内存分配错误,这些错误很难复制,甚至更难调试。我担心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; 

您所做的正是引用子矩阵的官方方式。

BLAS函数将矩阵的前导维数作为输入参数的最重要原因之一是能够在没有额外数据拷贝的情况下轻松引用子矩阵。

相关文章: