Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix OpenMP中的矩阵缩减、自定义缩减运算符_Matrix_Openmp_Reduction - Fatal编程技术网

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

Matrix OpenMP中的矩阵缩减、自定义缩减运算符,matrix,openmp,reduction,Matrix,Openmp,Reduction,我必须使用两个for循环,基于来自不同库的矩阵,使用以下算法(这里基于犰狳)来组装矩阵: inline void loop\u over\u matrix\u serial(常量大小和大小,arma::mat和matrix) { 对于(大小i=0;i

我必须使用两个for循环,基于来自不同库的矩阵,使用以下算法(这里基于犰狳)来组装矩阵:

inline void loop\u over\u matrix\u serial(常量大小和大小,arma::mat和matrix)
{
对于(大小i=0;i

为了加快操作速度,我想使用OpenMP的还原。在其他问题中已经有了自定义的约简运算符,例如这里:,但它针对的是完整矩阵,而不是单个元素。如何为所有以所示方式访问但来自不同库的矩阵定义自定义运算符,以进行简化?它将始终是一个从右侧添加的双值。

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

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

在你的例子中,如果你的几个矩阵不能保存在缓存中,你也需要这样做。请参考此链接


在缓存优化之后,omp减少可能就不那么重要了。

我看不到代码中有任何减少——只是将数组中的每个元素设置为计算值。减少被称为减少,因为它们减少了数据从输入到输出的维度。因此,例如,
dot_乘积
将两个向量减少为一个标量。二维结构上的行求和生成一维结构。
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);
}