考虑到当今多核和多处理硬件的巨大重要性,试图了解人们目前实际上是如何编写并行代码的。对我来说,主要的范式似乎是 pthreads(POSIX 线程),它在 Linux 上是原生的,在 Windows 上可用。HPC 人倾向于使用 OpenMP 或 MPI,但在 StackOverflow 上似乎没有很多。还是您依赖 Java 线程、Windows 线程 API 等而不是可移植标准?在您看来,进行并行编程的推荐方法是什么?
或者您是否在使用更奇特的东西,例如 Erlang、CUDA、RapidMind、CodePlay、Oz,甚至亲爱的老 Occam?
澄清:我正在寻找非常便携且适用于各种主机架构上的平台(例如 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 是实践中最常见的实现。