首页 文章

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

提问于
浏览
0

我必须使用以下算法(这里基于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 回答

  • -1

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

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

    在你的情况下,如果你的几个矩阵不能保存在缓存中,你也需要这样做 . 请参阅此链接,What is "cache-friendly" code?

    缓存优化后,omp减少可能不太重要 .

相关问题