我想编写一个代码转换器,它接受基于OpenMP的并行程序并在集群上运行它。
我该如何解决这个问题?我使用哪些库?如何为此设置一个小集群?
我发现在互联网上找到关于集群计算的好材料非常困难。
编辑:如果不可能,那么英特尔是如何做到的?英特尔编译器似乎完全符合我的要求。我没有任何我想要运行的具体应用程序。我想写“转换器/编译器”,而不是应用程序。我知道共享内存与分布式内存不同,但必须有一种同步内存的方法,如果不是针对所有情况,那么对于某些特定情况,即使这意味着应用程序是使用自定义构造编写的。答案 0 :(得分:3)
Intel有一个OpenMP实现,可以与x86 64位集群的C ++和Fortran编译器一起使用。您可以免费获得这些编译器的30天评估版。除此之外,Zifre大多是正确的。如果您关注可伸缩性,请紧紧抓住并在另一个编程模型(MPI,CUDA,Cilk,...)中编写并行程序,该模型在设计时考虑了分布式系统。如果您提供有关您的申请的更多信息,我们可能会在这方面提供更多有用的指导。
答案 1 :(得分:2)
在我看来,这不是一个好主意。
OpenMP背后的基本思想是数据共享并行执行。它运行良好,当访问共享数据时,您什么都不需要。每个线程都可以访问共享缓存或RAM中的变量。
群集计算利用消息传递,因为群集中的计算机具有分布式内存。当一个进程需要来自另一个进程的数据时,您应该管理通过网络传递的数据。这是一项耗时的操作。
因此,如果要编写此类编译器,则应在OpenMP中为每个数据访问实现数据广播操作(例如MPI的MPI_Bcast)。这将完全破坏并行性能。
答案 2 :(得分:1)
这根本不可能。您必须以完全不同的方式构建代码以使其在群集上工作(编程多台机器非常与编程一台机器不同)。
这样做没有神奇的小精灵尘埃。
另一方面,如果你在编写程序时考虑到集群,可以在一台机器上运行它(虽然它显然会慢一些)。
答案 3 :(得分:1)
SCORE / SCASH和Omni OpenMP编译器