2

我正在开发一个多线程数字运算应用程序,我们称之为myprogram. 我计划myprogram在 IBM 的 LSF 网格上运行。LSF 允许在不同机器的 CPU 上调度作业。例如,bsub -n 3 ... myprogram ...可以从 node1 分配两个 CPU,从 node2 分配一个 CPU。

我知道我可以要求 LSF 在同一个节点中分配所有 3 个内核,但我对将我的作业安排到不同节点上的情况感兴趣。

  1. LSF 如何管理这个?会myprogram在node1和node2的两个不同进程中运行吗?

  2. LSF 会自动管理 node1 和 node2 之间的数据传输吗?

  3. 我能做些什么myprogram来让 LSF 轻松管理这件事?我应该使用任何 LSF 库吗?

4

1 回答 1

3

回答 Q1

当您提交类似 的作业时bsub -n 3 myprogram,LSF 所做的只是为 1-3 台主机分配 3 个插槽。myprogram其中一个主机将被指定为“第一个执行主机”,LSF 将在该主机上调度和运行单个实例。

如果你想myprogram并行运行,LSF 有一个名为的命令blaunch,它实质上会为每个分配的内核启动一个程序实例。例如,提交您的作业就像bsub -n 3 blaunch myprogram将运行 3 个myprogram.

回答 Q2

通过“管理数据传输”,我假设您的意思是myprogram. 答案是否定的,LSF 是一个调度和调度工具。它所做的只是分配和分派,但它不知道分派的程序在做什么。 blaunch反过来只是一个任务启动器,它只是启动一个任务的多个实例。

您在这里所追求的是某种并行编程框架,例如 MPI(参见例如 www.openmpi.org)。这提供了一组 API 和命令,允许您以myprogram并行方式编写。

完成此操作并将程序转换为 .mympiprogram之后,您可以将其提交给 LSF,例如bsub -n 3 mpirun mympiprogram. 该mpirun工具 - 至少在 OpenMPI(和其他一些)的情况下 - 与 LSF 集成,并使用blaunch引擎盖下的界面为您启动任务。

回答 Q3

你不需要在你的程序中使用 LSF 库来使 LSF 变得更容易,就像我说的那样,程序内部发生的事情对系统是透明的。LSF 库只是使您的程序成为 LSF 系统的客户端(提交作业、查询等...)

于 2015-10-07T11:30:59.077 回答