我正在尝试优化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 :(得分:1)
你所做的正是引用子矩阵的官方方式。
BLAS函数将矩阵的主要维度作为输入参数的一个最重要的原因是,无需额外的数据复制即可轻松引用子矩阵。