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

时间:2013-08-19 21:22:37

标签: c++ visual-c++ intel-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; 

1 个答案:

答案 0 :(得分:1)

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

BLAS函数将矩阵的主要维度作为输入参数的一个最重要的原因是,无需额外的数据复制即可轻松引用子矩阵。