我必须使用以下算法(这里基于armadillo),使用两个基于不同库的矩阵的for循环组装矩阵:
inline void loop_over_matrix_serial(const size_t &size, arma::mat &matrix)
{
for (size_t i = 0; i < size; ++i)
for (size_t j = 0; j < size; ++j)
matrix(i, j) += position_function(i, j);
}
为了加快操作速度,我想使用OpenMP进行减少 . 在其他问题中已经有自定义缩减运算符,例如:C++ Armadillo and OpenMp: Parallelization of summation of outer products - define reduction for Armadillo matrix,但它的目标是完整矩阵,而不是单个元素 . 我如何为所有以所示方式访问的矩阵定义自定义运算符,但是从不同的库中为减少?它将始终是从右侧添加的双值 .
1 回答
如果我要优化此代码,我将首先了解矩阵的大小 .
如果它很大,我会考虑编写一个缓存友好的代码 .
在你的情况下,如果你的几个矩阵不能保存在缓存中,你也需要这样做 . 请参阅此链接,What is "cache-friendly" code?
缓存优化后,omp减少可能不太重要 .