我必须使用以下算法(这里基于犰狳),使用两个基于不同库的矩阵的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,但它的目标是完整矩阵,而不是单个元素。我如何为所有以所示方式访问的矩阵定义自定义运算符,但是从不同的库中为减少?它将始终是从右侧添加的双值。
答案 0 :(得分:-1)
如果我要优化此代码,我将首先了解矩阵的大小。
如果它很大,我会考虑编写一个缓存友好的代码。
在您的情况下,如果您的多个矩阵无法保存在缓存中,您还需要这样做。请参阅此链接What is "cache-friendly" code?
缓存优化后,omp减少可能不太重要。