请高手帮忙把我的程序OpenMP并行化

kevinhcj 2008-06-29 01:30:05
HI,ALL,

我参照"The C++ Programming Language" (Bjarne Stroustrup, 3rd special editon, p589-592)写了一个矩阵模板类,里面有一个LU分解 (LUdcmp(vector <int>& index, int& d), 参照Numerical Recipes in C相关内容),以及相应的线性方程组求解LUbksb(const vector <int>& index, vector <T>& b) const,当我运行在很多的矩阵时,发现太慢了,但是我对于OpenMP并不熟悉,昨天弄了一下,由于模板类TMatrix定义在名字空间Mathematrics中,我修改后的程序老是出现跟名字空间相关的错误,所以恳请熟悉OpenMP的高手帮我把程序并行化一下。

我观察了一下,LUdcmp里面的内层循环(i)是可以并行化的。


谢谢!

由于上次发帖不成功,但是可用分少了,结帖的时候再追加吧:)
...全文
109 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdleek 2008-07-01
  • 打赏
  • 举报
回复
顶一下,学习了
僵哥 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kevinhcj 的回复:]
我非常同意您的观点。

我的代码中的LU分解基本是自己写的,所以我知道那一部分可以并行,但是对于OpenMP,尤其在模板和名字空间中的运用非常不熟悉。
看来,正如您所说,用OpenMP来并行化别人的代码,不是一件容易的事情。

我再努力学习一下OpenMP吧,个人感觉应该比重新学习多线程编程要容易点吧:)

谢谢您的指教。
[/Quote]
如果你不了解多线程的运行机制,那么要想用好OpenMP可不是件什么简单的事。目前市场上还是有一些关于OpenMP的书。同时Intel为推广他们的平台也有相关的培训(当然是收钱的),你也可以到本论坛当中Intel专题讨论当中获得帮助,或者也可以登录Intel官方网站或论坛获得帮助。还有本书是关于Intel平台下多线程开发,或者并行计算的。
kevinhcj 2008-06-29
  • 打赏
  • 举报
回复
我非常同意您的观点。

我的代码中的LU分解基本是自己写的,所以我知道那一部分可以并行,但是对于OpenMP,尤其在模板和名字空间中的运用非常不熟悉。
看来,正如您所说,用OpenMP来并行化别人的代码,不是一件容易的事情。

我再努力学习一下OpenMP吧,个人感觉应该比重新学习多线程编程要容易点吧:)

谢谢您的指教。
僵哥 2008-06-29
  • 打赏
  • 举报
回复
单纯从指令上面采用OpenMP,可以大概举个例子,比如要执行一个从1累加到100
那么就可以分而多个线程(根据硬件的具体情况),比如说
1~10
11~20
...
91~100
这样几个完全独立的分片,然后他们就可以在线程当中分别执行运算,然后再到最后把各分片执行的结果进行一个合并运算。

OpenMP,如果不是很熟练使用的话,特别是从别人的代码进行转化,那是相当消耗时间和脑力的,首先需要对运行的情况步骤进行分解,然后分析哪些需要并行,哪些需要串行,甚至是到哪一个点需要串行,等待前面任务的结束。非特别需要的话,一般会直接考虑使用显式的多线程,而不是采用OpenMP并行指令。
kevinhcj 2008-06-29
  • 打赏
  • 举报
回复
我的理解是,前提就是两次迭代之间没有相关性阿,至于特性,如果您愿意,望不吝赐教。

我并非计算机专业的,由于课题的需要,接触编程不久,如果您有什么指教,than u first !
僵哥 2008-06-29
  • 打赏
  • 举报
回复
如果你连并行化的特性和前提都不了解的话,那么只有两个字:抱歉

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧