我想知道是否可以在多个主机上运行OpenMP程序。到目前为止,我只听说过可以在多个线程上执行的程序,但都在同一个物理计算机中。是否可以在两个(或更多)客户端上执行程序?我不想使用MPI。
答案 0 :(得分:11)
是的,可以在分布式系统上运行OpenMP程序,但我怀疑它是否在每个用户的手中。 ScaleMP提供vSMP - 一种昂贵的商业虚拟机管理程序软件,允许用户在许多联网主机上创建虚拟NUMA计算机,然后在该VM内运行常规操作系统(Linux或Windows)。它需要快速网络互连(例如InfiniBand)和专用主机(因为它在普通操作系统下作为管理程序运行)。我们在这里有一个可操作的vSMP集群,它运行未经修改的OpenMP应用程序,但性能在很大程度上取决于数据层次结构和访问模式。
NICTA用于开发名为vNUMA的类似SSI管理程序,但开发也已停止。除了他们的解决方案是IA64特定的(IA64是英特尔安腾,不要误解为Intel64,这是他们当前的x86 CPU)。
英特尔过去常常开发集群OpenMP(ClOMP;不要误解同样命名的项目给Clang带来OpenMP支持),但由于“客户普遍缺乏兴趣而且案例数量低于预期,它被放弃了一个好处“(来自here)。 ClOMP是英特尔对OpenMP的扩展,它内置于英特尔编译器套件中,例如你不能在GCC中使用它(这个request开始为GCC开始ClOMP开发进入了边缘)。如果您可以访问旧版本的英特尔编译器(版本从9.1到11.1),则必须获得(试用版)ClOMP许可证,鉴于该产品已经死亡且旧(试用)许可证已经存在,这可能几乎是不可能的过期。然后,从版本12.0开始,英特尔编译器不再支持ClOMP。
存在其他研究项目(仅搜索“分布式共享内存”),但只有vSMP(ScaleMP解决方案)似乎足够成熟,适用于生产HPC环境(并且相应地定价)。现在大多数人都在努力开发共同阵列语言(Co-Array Fortran,统一并行C等)。我建议您查看Berkeley UPC或花一些时间学习MPI,因为它在未来几年肯定不会消失。
答案 1 :(得分:2)
之前,有 Cluster OpenMP 。
群集OpenMP是OpenMP的一个实现,可以使用多个SMP计算机而无需使用MPI。这种进步的优点是无需编写显式消息传递代码,也无需混合编程范例。 Cluster OpenMP中的共享内存通过分布式共享内存子系统在所有计算机上维护。集群OpenMP基于OpenMP的宽松内存一致性,允许共享变量仅在绝对必要时保持一致。 source
群集OpenMP的性能注意事项
某些内存操作比其他内存操作更昂贵。要使用Cluster OpenMP实现良好性能,相对于对受保护页面的访问次数,对未受保护页面的访问次数必须尽可能高。这意味着一旦页面在给定节点上更新,在下一次同步之前应该对它进行大量访问。为了实现这一点,程序应该尽可能少地同步,并尽可能地重复使用给定页面上的数据。这转化为避免细粒度同步,例如原子构造或锁定,以及具有高数据局部性source。