OpenMP中的矩阵缩减,自定义缩减运算符

时间:2017-08-24 12:22:52

标签: matrix openmp reduction

我必须使用以下算法(这里基于犰狳),使用两个基于不同库的矩阵的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 个答案:

答案 0 :(得分:-1)

如果我要优化此代码,我将首先了解矩阵的大小。

如果它很大,我会考虑编写一个缓存友好的代码。

在您的情况下,如果您的多个矩阵无法保存在缓存中,您还需要这样做。请参阅此链接What is "cache-friendly" code?

缓存优化后,

omp减少可能不太重要。