首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >您使用哪些并行编程API?

您使用哪些并行编程API?
EN

Stack Overflow用户
提问于 2008-10-03 13:04:48
回答 19查看 5.1K关注 0票数 16

考虑到如今多核和多处理硬件的巨大重要性,我试图掌握人们目前实际上是如何编写并行代码的。在我看来,占主导地位的范例是pthread(POSIX线程),它在Linux上是原生的,在Windows上可用。高性能计算的人倾向于使用OpenMP或MPI,但在StackOverflow上似乎没有太多这样的东西。或者,您是否依赖Java线程、Windows线程API等,而不是可移植标准?在你看来,做并行编程的推荐方式是什么?

或者你正在使用更具异国情调的东西,如Erlang,CUDA,RapidMind,CodePlay,Oz,甚至是亲爱的旧Occam?

澄清:我正在寻找非常便携的解决方案,并适用于各种主机架构上的Linux,各种unixes等平台。Windows是一个很好支持的罕见案例。所以C#和.net在这里实在太狭隘了,CLR是一项很酷的技术,但是他们能不能把它发布到Linux主机上,这样它就会像JVM、Python、Erlang或任何其他可移植语言一样流行。

C++或基于JVM的:可能是C++,因为JVM倾向于隐藏性能。

MPI:我同意即使是HPC人员也认为它是一个难以使用的工具--但是对于在128000处理器上运行的问题来说,它是解决map/reduce不适用的问题的唯一可伸缩的解决方案。然而,消息传递非常优雅,因为它是唯一一种能够很好地扩展到本地内存/AMP、共享内存/SMP和分布式运行时环境的编程风格。

一个有趣的新竞争者是MCAPI。但我认为还没有人有时间对此有任何实际经验。

因此,总的来说,似乎有很多我不知道的有趣的Microsoft项目,而Windows API或pthread是实践中最常见的实现。

EN

回答 19

Stack Overflow用户

发布于 2008-11-21 14:42:36

MPI并不像大多数人看起来那么难。如今,我认为多范例方法最适合并行和分布式应用程序。使用MPI进行节点间通信和同步,使用OpenMP或PThreads进行更细粒度的并行化。考虑为每台机器配置MPI,为每个内核配置OpenMP或PThreads。在不久的将来,这似乎比为每个核心产生一个新的MPI Proc更容易扩展。

也许现在对于双核或四核来说,为机器上的每个内核派生一个proc不会有那么多的开销,但随着我们在每台机器上接近越来越多的内核,其中缓存和内存的伸缩性不是很大,使用共享内存模型会更合适。

票数 10
EN

Stack Overflow用户

发布于 2008-10-03 13:42:04

我推荐OpenMP。微软已经将它放到了Visual C++ 2005编译器中,因此它得到了很好的支持,除了使用/omp指令进行编译之外,您不需要做任何其他事情。

它使用起来很简单,尽管很明显它不能为你做所有的事情,但是什么也做不到。我使用它来并行运行for循环,通常没有任何麻烦,对于更复杂的事情,我倾向于使用自己的代码(例如,我有几年前的代码,我剪切、粘贴和修改)。

你可以试试Cilk++,它看起来不错,而且有一个电子书"How to Survive the Multicore Software Revolution"

这两种类型的系统都试图并行化串行代码-即以尽可能简单的方式在所有内核上同时运行for循环。它们并不是通用的线程库。(例如,一个research paper(pdf)描述了在openMP中实现的不同类型线程池的性能,并建议在其中添加两个新的操作-让步和睡眠。我认为他们有点忽略了OpenMP的要点)

正如您提到的OpenMP,我假设您谈论的是原生c++,而不是C#或.NET。

此外,如果HPC人员(我假设他们是这类领域的专家)似乎在使用OpenMP或MPI,那么这是您应该使用的,而不是SO的读者群!

票数 6
EN

Stack Overflow用户

发布于 2008-10-03 13:08:19

我们已经开始关注微软的parallel extensions -它还没有发布,但肯定显示出了潜力。

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

https://stackoverflow.com/questions/166729

复制
相关文章

相似问题

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