首页 > 解决方案 > 如何准备在集群上执行的代码,以便一次从 .txt 文件中获取一个参数?

问题描述

我正在准备一些要在由 SLURM 管理的集群上运行的 C++ 代码。集群采用一个编译文件:a.out。然后它将通过 JOB_ARRAY 在 500 个不同的节点上执行它。在执行文件的每个副本时,它需要读取一个输入参数,例如double parameter. 我的想法是准备一个 .txt 文件,该文件将parameter在每一行保存一个值。parameter实施读取这些值的最佳策略是什么?

  1. a.out 将从第一行读取值并立即将其删除。如果这是正确的策略,如何确保 a.out 的两个副本不会同时做同样的事情?

  2. a.out 将从第 n 行读取值。如何让 a.out 的副本知道它与哪个 n 一起工作?

  3. 有没有比上述两个更好的实施策略?如果是这样,该怎么做?C++ fstream 是要走的路,还是我应该尝试一些完全不同的东西。

谢谢你的任何想法。如果您还留下一些非常简单的代码来说明 a.out 的外观,我将不胜感激。

标签: c++fstreamslurmread-write

解决方案


选项二是最好的方法:您可以使用 $SLURM_ARRAY_TASK_ID 来获取特定的行,因此您的作业脚本中的调用很简单:

a.out $(head -n $SLURM_ARRAY_TASK_ID parameter.txt | tail -1)

这应该得到与任务数组 ID 对应的行。


推荐阅读