【问题标题】:How to optimize multithreaded program for use in LSF?如何优化多线程程序以在 LSF 中使用?
【发布时间】:2015-12-31 15:01:14
【问题描述】:

我正在开发一个多线程数字运算应用程序,我们称之为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 库吗?

【问题讨论】:

    标签: multithreading ipc job-scheduling lsf


    【解决方案1】:

    第一季度的回答

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

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

    第二季度的答案

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

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

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

    第三季度的答案

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

    【讨论】:

    • 谢谢。 Openmpi 看起来很有趣。
    猜你喜欢
    • 2013-06-22
    • 2022-01-26
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多