Multithreading 不同主机上的OpenMP程序

Multithreading 不同主机上的OpenMP程序,multithreading,performance,parallel-processing,openmp,distributed-computing,Multithreading,Performance,Parallel Processing,Openmp,Distributed Computing,我想知道是否有可能在多台主机上运行OpenMP程序。到目前为止,我只听说过可以在多个线程上执行但都在同一台物理计算机上执行的程序。是否可以在两个(或更多)客户端上执行程序?我不想使用MPI。以前,有一个 群集OpenMP是OpenMP的一个实现,它可以使用多个SMP机器,而无需借助MPI。这一进步的优点是不需要编写显式消息传递代码,也不需要混合编程范例。群集OpenMP中的共享内存通过分布式共享内存子系统跨所有机器进行维护。集群OpenMP基于OpenMP的宽松内存一致性,允许共享变量仅在绝对必

我想知道是否有可能在多台主机上运行OpenMP程序。到目前为止,我只听说过可以在多个线程上执行但都在同一台物理计算机上执行的程序。是否可以在两个(或更多)客户端上执行程序?我不想使用MPI。

以前,有一个

群集OpenMP是OpenMP的一个实现,它可以使用多个SMP机器,而无需借助MPI。这一进步的优点是不需要编写显式消息传递代码,也不需要混合编程范例。群集OpenMP中的共享内存通过分布式共享内存子系统跨所有机器进行维护。集群OpenMP基于OpenMP的宽松内存一致性,允许共享变量仅在绝对必要时保持一致

群集OpenMP的性能注意事项


一些内存操作比其他内存操作要昂贵得多。要使用群集OpenMP实现良好的性能,相对于访问受保护页面的数量,访问未受保护页面的数量必须尽可能高。这意味着,一旦给定节点上的页面被更新,在下一次同步之前,应该对其进行大量访问。为了实现这一点,程序应该尽可能少地进行同步,并尽可能多地重用给定页面上的数据。这意味着避免了细粒度的同步,如原子结构或锁,并具有高数据局部性。

是的,在分布式系统上运行OpenMP程序是可能的,但我怀疑它是否在每个用户都能达到的范围内。ScaleMP提供了vSMP—一种昂贵的商业虚拟机监控程序软件,它允许用户在许多网络主机上创建一个虚拟NUMA机器,然后在此虚拟机内运行常规操作系统(Linux或Windows)。它需要快速网络互连(例如InfiniBand)和专用主机(因为它在正常操作系统下作为虚拟机监控程序运行)。我们这里有一个可操作的vSMP集群,它运行未经修改的OpenMP应用程序,但性能强烈依赖于数据层次结构和访问模式

NICTA曾开发过类似的名为vNUMA的SSI虚拟机监控程序,但开发也停止了。此外,他们的解决方案是针对IA64的(IA64是Intel Itanium,不要误认为是Intel64,这是他们当前一代的x86 CPU)

英特尔曾开发过群集OpenMP(ClOMP;不要误认为是将OpenMP支持带到Clang的同名项目),但由于“客户普遍缺乏兴趣,而且比预期少的案例显示了它的好处”(来自)。ClOMP是OpenMP的英特尔扩展,它内置于英特尔编译器套件中,例如,您不能将其与GCC一起使用(这将使GCC的ClOMP开发陷入困境)。如果您可以访问旧版本的英特尔编译器(从9.1到11.1的版本),则必须获得(试用版)ClOMP许可证,这几乎是不可能的,因为该产品已经失效,旧的(试用版)许可证已经过期。同样,从12.0版开始,英特尔编译器不再支持ClOMP

还有其他的研究项目(只是搜索“分布式共享内存”),但只有vSMP(ScaleMP解决方案)似乎足够成熟,适合生产HPC环境(并且相应地定价)。似乎现在大部分的努力都投入到了联合数组语言(联合数组Fortran、统一并行C等)的开发中。我建议你看看MPI,或者花点时间学习MPI,因为它肯定不会在未来几年消失