2

我想编写一个代码转换器,它采用基于 OpenMP 的并行程序并在集群上运行它。

我该如何解决这个问题?我使用哪些库?如何为此设置一个小型集群?

我发现在互联网上很难找到关于集群计算的好资料。

编辑:如果不可能,那么英特尔是如何做到的?英特尔编译器似乎完全符合我的要求。我没有要运行的任何特定应用程序。我想编写“转换器/编译器”,而不是应用程序。我知道共享内存与分布式内存不同,但必须有一种同步内存的方法,如果不是针对所有情况,那么对于某些特定情况,即使这意味着应用程序是使用自定义构造编写的。

4

4 回答 4

3

英特尔有一个 OpenMP 实现,可与用于 x86 64 位集群的 C++ 和 Fortran 编译器一起使用。您可以免费获得这些编译器的 30 天评估版。除此之外,Zifre 基本上是对的。如果您关心可伸缩性,请咬紧牙关,在另一个考虑分布式系统的编程模型(MPI、CUDA、Cilk 等)中编写并行程序。如果您提供有关您的应用程序的更多信息,我们可能会在这方面提供更多有用的指导。

于 2009-06-09T22:47:07.413 回答
2

在我看来,这不是一个好主意。

OpenMP 背后的基本思想是数据共享并行执行。它运作良好,当访问共享数据时,您无需支付任何费用。每个线程都可以访问共享缓存或 RAM 中的变量。

集群计算利用消息传递,因为集群中的计算机具有分布式内存。当一个进程需要来自另一个进程的数据时,您应该管理通过网络传递的数据。这是一项耗时的操作。

所以,如果你想编写这样的编译器,你应该为 OpenMP 中的每个数据访问实现数据广播操作(例如 MPI 中的 MPI_Bcast)。这将完全扼杀并行性能。

于 2009-06-20T14:18:52.687 回答
1

这根本不可能。您必须以完全不同的方式构建代码才能使其在集群上工作(对多台机器进行编程与对一台机器进行编程非常不同)。

没有神奇的精灵尘可以做到这一点。

另一方面,如果您在编写程序时考虑到集群,则可以在单台机器上运行它(尽管它显然会更慢)。

于 2009-06-09T22:39:25.837 回答
1

SCORE/SCASH 和 Omni OpenMP 编译器

于 2009-07-13T19:53:32.940 回答