如何优化用于 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 个核心,但我对我的作业被安排到不同节点的情况很感兴趣。
LSF 如何解决这个问题?在node1和node2的两个不同进程中myprogram
会不会是运行?
LSF 是否自动管理 node1 和 node2 之间的数据传输?
我可以在 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 系统的客户端(提交作业、查询等...)
我正在开发一个多线程数字 c运行ching 应用程序,我们称它为 myprogram
。我计划 运行 myprogram
在 IBM 的 LSF 网格上。 LSF 允许在 CPU 秒内从不同的机器安排一个作业。例如,bsub -n 3 ... myprogram ...
可以从node1分配两个CPU,从node2分配一个CPU。
我知道我可以要求 LSF 在同一节点中分配所有 3 个核心,但我对我的作业被安排到不同节点的情况很感兴趣。
LSF 如何解决这个问题?在node1和node2的两个不同进程中
myprogram
会不会是运行?LSF 是否自动管理 node1 和 node2 之间的数据传输?
我可以在
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 系统的客户端(提交作业、查询等...)