当前位置:  开发笔记 > 编程语言 > 正文

您使用哪些并行编程API?

如何解决《您使用哪些并行编程API?》经验,为你挑选了2个好方法。

考虑到当今多核和多处理硬件的巨大重要性,试图掌握当前人们实际编写并行代码的方式.对我来说,看起来主流范式是pthreads(POSIX线程),它在Linux上是原生的,可在Windows上使用.HPC人员倾向于使用OpenMP或MPI,但似乎StackOverflow上没有这些.或者你依靠Java线程,Windows线程API等而不是便携式标准?在您看来,建议的并行编程方式是什么?

或者你正在使用更多异国情调的东西,如Erlang,CUDA,RapidMind,CodePlay,Oz,甚至是亲爱的老奥卡姆?

澄清:我正在寻找非常便携的解决方案,适用于各种主机架构上的Linux,各种unix等平台.Windows是一种罕见的案例,非常适合支持.所以C#和.net在这里真的太狭隘,CLR是一个很酷的技术,但是他们可以为Linux主机发布它,这样它就像JVM,Python,Erlang或任何其他可移植语言一样普遍.

基于C++或JVM:可能是C++,因为JVM往往会隐藏性能.

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

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

总的来说,情况似乎是有许多我不了解的有趣的微软项目,而且Windows API或pthreads是实践中最常见的实现.



1> Nicholas Man..:

MPI并不像大多数人看起来那么难.现在我认为多范式方法最适合并行和分布式应用程序.使用MPI进行节点到节点的通信和同步,使用OpenMP或PThread进行更精细的并行化.想想每台机器的MPI,以及每个核心的OpenMP或PThreads.这似乎比在不久的将来为每个核心产生新的MPI Proc更好一些.

也许现在对于双核或四核,为机器上的每个核生成一个proc将不会有那么多开销,但是当我们接近每台机器上越来越多的核时,缓存和内存不会扩展那么多,使用共享内存模型会更合适.



2> gbjbaanb..:

我推荐OpenMP.Microsoft已将其放入Visual C++ 2005编译器中,因此它得到了很好的支持,除了使用/ omp指令进行编译之外,您不需要执行任何操作.

它的使用简单,但显然它并不能为你做任何事情,但事实并非如此.我使用它来运行并行循环通常没有任何麻烦,对于更复杂的事情我倾向于自己滚动(例如我有很久以前的代码我剪切,粘贴和修改).

您可以尝试看起来不错的Cilk ++,并且有一本电子书"如何生存多核软件革命".

这两种系统都尝试并行化串行代码 - 即采用for循环,以尽可能简单的方式同时在所有内核上运行它.它们通常不是通用线程库.(例如,一篇研究论文(pdf)描述了在openMP中实现的不同类型的线程池的性能,并建议添加2个新操作 - yield和sleep.我认为他们在那里忽略了一点OpenMP

正如您提到的OpenMP,我假设您在谈论本机c ++,而不是C#或.NET.

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

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有