最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 基于OpenMP的通用矩阵计算优化(图)

    静态调度:

    动态调度:

    可以看到只需要修改引导语句即可。

    2.3.大规模矩阵计算优化

    2.3.1.问题描述

    2.3.2.构思

    我这里的理解比较简单,只要完成parallel_for函数(实现for循环Pthreads的并行化),在parallel_for函数中完成分支(划分任务),创建任务,给线程分配任务即可执行。

    将parallel_for 函数打包为.so 文件。调用函数时需要指定线程的工作函数,所以需要自己完成functor函数。比较简单,直接完成矩阵乘法即可。

    2.3.3.核心代码

    ①parallel_for函数

    这个需要根据总行数和线程数来划分,可能会有不均匀的情况,所以划分的时候需要注意最后一个线程要处理的行数。然后为划分的任务创建工作线程。

    在这里插入图片描述

    ②For_index结构

    在这里插入图片描述

    这个结构用来表示线程需要处理的工作的数量和跨度。 (这里的span其实可以很灵活的实现,比如在矩阵乘法的最内层调用for_parallel函数时,通过指定span就可以很方便地实现矩阵乘法)

    ③函子函数

    在这里插入图片描述

    这里只是简单的从结构中取出线程所需的行数,进行矩阵乘法。

    在这里插入图片描述

    在Main函数中,只需要调用parallel_for函数即可。

    3.实验结果3.1.基于OpenMP的通用矩阵乘法的实现

    在这里插入图片描述

    可以看到手算证明斯特拉森矩阵乘法的正确性,计算结果是正确的;

    矩阵大小从512到1024,线程从1到8所需时间:

    在这里插入图片描述

    可以看出线程效率从2到4有明显提升手算证明斯特拉森矩阵乘法的正确性,但从4到8没有明显提升,主要原因是虚拟机核心数不足。

    3.2.基于OpenMP的通用矩阵优化

    为了体现OpenMP的任务调度机制,我们选择使用2个线程。

    可以看出,静态和动态的区别并不大。我认为原因是矩阵乘法任务本身的for循环中的计算量大致相同。

    3.3.基于Pthreads构造并行for循环分解、分配和执行机制。

    成功生成.so文件;

    成功生成可执行文件;

    在这里插入图片描述

    执行结果正确。

    4.实验性想法

    本实验是高性能实验的 OpenMP 部分。从简单到深入,我掌握了OpenMP的大致内容。同时,第三个任务提高了实验的难度,更好地锻炼了编程能力。

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 基于OpenMP的通用矩阵计算优化(图)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论