如何优化用于 LSF 的多线程程序?

How to optimize multithreaded program for use in LSF?

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

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

  1. LSF 如何解决这个问题?在node1和node2的两个不同进程中myprogram会不会是运行?

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

  3. 我可以在 myprogram 中做些什么来使 LSF 易于管理?我应该使用任何 LSF 库吗?

问题 1 的答案

当您提交像 bsub -n 3 myprogram 这样的作业时,LSF 所做的只是在 1-3 台主机上分配 3 个插槽。其中一台主机将被指定为 "first execution host",LSF 将在该主机上调度 运行 myprogram 的单个实例。

如果您想 运行 myprogram 并行,LSF 有一个名为 blaunch 的命令,它实际上会为每个分配的内核启动一个程序实例。例如,提交您的工作 bsub -n 3 blaunch myprogram will 运行 3 instances of myprogram.

问题 2 的答案

"manage data transfer" 我假设您指的是 myprogram 实例之间的通信。答案是否定的,LSF是一个调度调度工具。它所做的只是分配和调度,但它不知道被调度的程序在做什么。 blaunch 反过来只是一个任务启动器,它只是启动一个任务的多个实例。

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

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

问题 3 的答案

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