c - 科学计算::OpenMP 或 Pthreads

标签 c math pthreads openmp scientific-computing

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

我已经将 BLAS 和 LAPACK 用于原始矩阵子例程,但我现在意识到手动并行化有一定的范围。我正在研究一个共享内存系统,这让我有 2 个选择:OpenMP 和 PThreads。

假设时间不是最重要的因素(代码的性能才是),哪个是更好的、面向 future 的并且可能是可移植(对 CUDA)的并行化方式?花在使用 Pthreads 上的时间值得提高性能吗?

我相信我的应用程序(它基本上处理一次启动许多事情,然后对所有事情的“最佳”值进行操作)将从显式线程控制中受益,但我担心编码会占用太多的时间,最后不会有任何性能返回。

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

This一个是关于 Linux 中的通用多线程应用程序。

This也是一个普遍的问题。

我知道 SciComp.SE,但觉得它在这里更切合主题。

最佳答案

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

但是您认为您的选择仅限于 OpenMP 和 Pthreads 是错误的,MPI(我假设您至少听说过这个,如果没有再发帖)也将在共享内存机器上运行。对于某些应用程序,可以将 MPI 编程为在共享内存计算机上胜过 OpenMP,而不会有太大困难。

三年(+/- 几年)前,科学开发人员工具箱中的基本并行化工具是 OpenMP 和 MPI。任何使用这些工具的人都是一个庞大的用户社区的一部分,这个社区比 Pthreads 和 MPI 的用户社区更大(仅是轶事证据)。今天,随着 GPU 和其他加速器的出现,情况更加分散,很难从 HMPP、ACC、Chapel、MPI-3、OpenMP4、CUDA、OpenCL 等中选出一个赢家。我仍然认为OpenMP+MPI 是一个有用的组合,但不能忽视街区的新 child 。

FWIW 我致力于为地球物理应用开发计算 EM 代码,因此非常核心“科学计算”。

关于c - 科学计算::OpenMP 或 Pthreads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9850437/

相关文章:

c++ - openMP直方图比较

c - pthread_t 数组初始化的段错误

c++ - C 到 C++ : Converting structs to classes

c - 在 C 中,如果未明确编写,被调用函数是否会自动返回其被调用函数返回的值?

algorithm - 这个 "Valid mathematical expression"是问题P,还是NP?

google-maps - 谷歌地图多边形到 SVG 路径

c - msgget 无法加入 mq

使用指针将数组复制到数组

c - 这段代码有什么问题?

java - 如何可靠地每秒调用函数 X 次?