如何优化多线程程序在LSF中使用?

时间:2015-10-03 14:03:17

标签: multithreading ipc job-scheduling lsf

我正在开发一个多线程数字运算应用程序,我们称之为myprogram。我打算在IBM的LSF网格上运行myprogram。 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库吗?

1 个答案:

答案 0 :(得分:3)

回答Q1

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

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

回答Q2

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

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

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

回答Q3

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

相关问题