首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科学计算::OpenMP还是多线程

科学计算::OpenMP还是多线程
EN

Stack Overflow用户
提问于 2012-03-24 09:04:52
回答 3查看 2.5K关注 0票数 4

我正在为科学计算社区开发代码,特别是迭代求解线性方程组(Ax=b形式)。

我已经为基本矩阵子程序使用了BLAS和LAPACK,但是我现在意识到手动并行化还有一些余地。我正在开发一个共享内存系统,这给我留下了两个选择: OpenMP和PThreads。

假设时间不是最大的因素(&代码的性能),这是一种更好的、未来的证明,并且可能是可移植的并行化方式?在使用线程方面花费的时间是否值得提高性能?

我相信,我的应用程序(它基本上是一次启动许多事情,然后根据它们的“最佳”值操作),将从显式线程控制中受益,但我担心编码会占用太多的时间,最终也不会带来性能上的回报。

我在这里已经看过几个类似的问题,但它们都是与一般应用有关的。

Linux与This中的一个通用多线程应用程序有关。

This也是一个普遍的问题。

我知道SciComp.SE,但我觉得这里的话题更多。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-24 09:37:24

您的问题看上去好像您期望使用OpenMP的编码效率将高于对线程的编码效率,而使用P线程的执行效率将高于OpenMP。总的来说,我认为你是对的。然而,一段时间前,我决定我的时间比我的计算机的时间更重要,并选择了OpenMP。这不是我有理由后悔的决定,也不是我有任何确凿证据可以证实的决定。

但是,如果您认为您的选择仅限于OpenMP和P线程,则MPI (我假设您至少听说过这一点,如果没有)也将在共享内存机器上运行。在某些应用程序中,MPI可以在共享内存计算机上获得比OpenMP更好的程序,而没有太大的困难。

三年前(+/-几年前),科学开发人员工具箱中必不可少的并行化工具是OpenMP和MPI。任何使用这些工具的人都是其他用户社区中的一员,这比P螺纹和MPI的用户社区更大(仅仅是轶事证据)。今天,随着GPU和其他加速器的出现,这里的情况变得更加分散,很难从HMPP、ACC、教堂、MPI-3、OpenMP4、CUDA、OpenCL等中选出一个获奖者。我仍然认为OpenMP+MPI是一个有用的组合,但不能忽视这个街区的新孩子。

FWIW I致力于开发地球物理应用的计算EM程序,因此非常核心的是“科学计算”。

票数 7
EN

Stack Overflow用户

发布于 2012-03-24 19:41:43

我意识到我的答案很长,所以我把结论放在第一位:

简短回答:

我会说,openMP和p线程本质上是相同的,您应该选择需要最少开发时间的哪一个(如果符合您的需要,可能是openMP )。但是如果您想投入开发时间,也许您应该重新设计您的代码,以便它能够适应其他范例(例如,向量化以利用SSE/AVX或GPU)。

发展:

如果您开发线性求解器,我假设您的代码将(非常)长寿(也就是说,它可能会超过使用它的物理模型)。在这种情况下,特别是如果您没有一个庞大的开发团队,我认为您应该主要根据开发时间、可维护性和

另外,你不应该认为今天的“最佳”选择(无论“最好”意味着什么)可能不会是“最好的”明天的选择。因此,即使您现在面临的是openMP与线程之间的问题(即使现在的频谱已经比@HighPerformanceMark的答案中所说的要大),您也应该期望在未来有更多的可供选择的方案。

如果您现在有开发时间,那么我会说,如果您能够抽象代码中所有的计算密集型内核,从而使它们很容易地适应不同的并行化范式,那将是更好的投资。在这方面,最重要(也是最困难)的事情是数据结构:从GPGPU计算的合并中获益需要将数据置于与传统缓存优化方法不同的顺序。

这使我得出结论:所有基于线程的解决方案本质上都是等价的(在性能和代码体系结构方面),您应该选择哪种解决方案需要最少的开发时间。但是,如果您想投入开发时间,也许您应该重新设计代码,使其可以并行化或向量化(从而利用SSE/AVX或GPU)。如果您能够做到这一点,您将能够跟踪硬件/软件的发展,并保持性能。

票数 2
EN

Stack Overflow用户

发布于 2013-11-06 23:21:00

为了补充已经很好的答案: OpenMP在并行代码方面的工作通常比我编写线程时做得更好。考虑到OpenMP也比较容易,如果这些是我的选择,我总是选择它。我怀疑如果你问这个问题,你不是一个线程专家,所以我也建议你使用OpenMP而不是线程。

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

https://stackoverflow.com/questions/9850437

复制
相关文章

相似问题

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