我正在开发一个多线程的数字处理应用程序,让我们称之为myprogram。我计划在IBM的LSF网格上运行myprogram。LSF允许在不同机器的CPU上调度作业。例如,bsub -n 3 ... myprogram ...可以从node1分配两个CPU,从node2分配一个CPU。
我知道我可以要求LSF在同一个节点中分配所有3个核心,但我对我的工作被调度到不同节点的情况很感兴趣。
myprogram会在node1和node2中的两个不同进程中运行吗?myprogram中做些什么来使LSF更容易管理?我应该使用任何LSF库吗?发布于 2015-10-07 11:30:59
对Q1的回答
当您提交像bsub -n 3 myprogram这样的作业时,LSF所做的就是在1-3个主机上分配3个插槽。其中一个主机将被指定为“第一个执行主机”,而LSF将在该主机上调度和运行一个myprogram实例。
如果您想并行地运行myprogram,LSF有一个名为blaunch的命令,它本质上将启动每个分配的核心程序的一个实例。例如,像bsub -n 3 blaunch myprogram一样提交作业将运行3个myprogram实例。
对Q2的回答
所谓“管理数据传输”,我假设您指的是myprogram实例之间的通信。答案是否定的,LSF是一个调度和调度工具。它所做的只是分配和调度,但它不知道调度程序正在做什么。blaunch反过来只是一个任务启动程序,它只是启动一个任务的多个实例。
这里需要的是某种类似MPI的并行编程框架(例如,请参阅www.openmpi.org)。这提供了一组API和命令,允许您以并行方式编写myprogram。
一旦您这样做并将您的程序提交给mympiprogram,您就可以像bsub -n 3 mpirun mympiprogram一样将其提交给LSF。mpirun工具--至少在OpenMPI (和其他一些情况下)--与LSF集成,并使用遮罩下的blaunch接口为您启动任务。
对Q3的回答
您不需要在程序中使用LSF库来使LSF变得更容易,就像我说的,程序内部所发生的事情对系统是透明的。LSF库只允许您的程序成为LSF系统的客户端(提交作业、查询等)
https://stackoverflow.com/questions/32923464
复制相似问题