首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用reduction打开mp 3 for循环

使用reduction打开mp 3 for循环
EN

Stack Overflow用户
提问于 2018-06-01 12:21:39
回答 1查看 80关注 0票数 1

我需要使用open mp将两个10x10矩阵相乘。我决定将一个矩阵的行分成3行、3行和4行。如何修复前三行的代码?

代码语言:javascript
复制
#pragma omg parallel for reduction(+:m[p][q])
        {
            for (p = 0; p < 3; p++)
                for (q = 0; q < 10; q++)
                    for (k = 0; k < 10; ++k)
                    {
                        m[p][q] += l[p][k] * o[k][q];
                    }
        }
EN

回答 1

Stack Overflow用户

发布于 2018-06-01 15:39:28

首先,不要自己拆分矩阵,而是让OpenMP负责在循环中分担工作,例如

代码语言:javascript
复制
#pragma omg parallel for
{
    for (p = 0; p < 10; p++)
        for (q = 0; q < 10; q++)
            for (k = 0; k < 10; ++k)
            {
                m[p][q] += l[p][k] * o[k][q];
            }
}

在这段代码中,不需要reduction,因为所有并发写操作都发生在m的不同元素上。即使你collapse(2)了前两个循环,在这一点上你仍然很好。

也就是说,优化矩阵乘法在现代硬件上是一个极其复杂的主题。将其并行化得更好。如果您想获得性能,请使用针对您的体系结构进行优化的BLAS implementation。如果你想学习--我建议你从串行实现开始,然后继续并行化。无论是哪种情况,都有大量的教育材料可用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50636060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档