IBM LSF 是否促进并行计算?

计算科学 并行计算
2021-12-15 00:40:31

我一直在浏览IBM Platform Load Sharing Facility的文档,以了解它是否支持并行任务计算

以下是我认为与此问题相关的内容,如果我的看法错误,请纠正我。

重点似乎是并行作业执行,其中计算必须被拆分并作为不同的进程运行。

然而,我们拥有的代码针对并行任务执行进行了优化。这是一些伪 C# 代码:

for(timeStep=0; timeStep < MaxTimeSteps; timeStep++)
{
    Parallel.ForEach(Cube.Cells, currentCell =>
    {
        Compute(currentCell, Cube);
    }
}

此代码将计算时间序列并在每个时间步对每个单元格执行一些计算。计算需要同一时间步内其他单元的状态来进行计算。注意Parallel.ForEach指令。

这个问题不能轻易地分解成单独运行的进程,每个进程计算一个时间步长。当前时间步需要上一个时间步的每个单元的状态。将问题进一步拆分为每个时间步中每个单元的作业,将需要同步和广泛的数据交换,无论是进程间还是通过文件或数据库系统。

另一方面,Parallel.ForEach 指令可以极大地受益于许多 CPU 的可用性。

那么,作为单个进程运行的这个问题能否从运行 LSF 的网格中受益?它对进程是否透明,以便它感知一个巨大的系统,具有许多 CPU 和一个大内存地址空间?

3个回答

LSF 绝对不会运行多线程程序的单个进程提供透明的节点组合到单个共享内存环境中。有一些工具可以做到这一点(比如ScaleMP 的产品),但这不是 LSF 所做的。LSF 负责将希望在集群的 1 到多个节点上运行的许多作业排队,然后以某种顺序执行这些作业。作业本身有责任处理该作业中的节点如何被利用。

这通常是通过MPI完成的,它提供了一个可移植的接口,用于在程序或进程之间发送消息,这些程序或进程可能独立运行在使用各种互连网络(包括共享内存)的不同计算机上。大多数 HPC 集群使用某种专用网络,如Infiniband,以实现低延迟 ( ) 和高带宽连接 (56Gb/s)。1μs

MPI 程序本身越来越多地使用OpenMPPthreads等机制在每个进程内进行多线程处理。有时这会导致更好的节点性能和更好地利用节点内的共享内存架构。

LSF 是为 Linux 集群提供排队功能的众多此类资源管理器和调度系统之一。其他包括:SLURMMoab/TorquePBSPro

您还没有告诉我们“Compute(currentCell,Cube)”涉及多少工作,因此很难完全回答这个问题。您是否只需要在每个单元格中执行几行代码,或者它是一个非常复杂的过程,需要几分钟(或几小时)的 CPU 时间?细胞的粗略数量和时间步长是多少?

您也没有说明在多维数据集中共享了多少数据以及如何访问这些数据。每次调用 Compute 都需要访问整个多维数据集还是仅访问 3D 网格中 currentCell 附近的单元格?每个单元格有多少数据?

根据对这些问题的回答,在单个多处理器共享内存系统上使用并行线程实现这一点可能是有意义的(使用例如 OpenMP),或者使用在分布式内存集群上传递消息来实现这一点可能是合理的(使用例如用于消息传递的 MPI。)

无论如何,LSF 不太可能与解决这个问题直接相关。LSF 是一个作业调度程序,它的工作级别远高于适用于此的级别。如果您(例如)有一个程序使用 MPI 消息在 100 个协同工作的进程之间传递,那么您可以使用 LSF 来安排程序的运行,并且 LSF 会在 100 个处理器与有足够的内存来运行该作业。

LSF(或任何批处理调度程序)可以提供的是在具有大量内核的机器上调度您的工作的能力,因此您的进程可以最大限度地提高其潜在的并行性。

LSF 和 ScaleMP 之间存在集成,因此您可以提交要求比网格中任何单台机器(例如,1024 个内核)更多内核的作业,并且 LSF 将安排创建具有那么多内核的 vSMP . 集成要求您说明确切的核心数量。我认为在您的情况下,最好要求诸如“现在可用的最多内核”之类的东西。

关于优化单个进程的并行性,OpenMP 或 MPI 可能是您正在寻找的。