c++ - 如何准备在集群上执行的代码,以便一次从 .txt 文件中获取一个参数?
问题描述
我正在准备一些要在由 SLURM 管理的集群上运行的 C++ 代码。集群采用一个编译文件:a.out。然后它将通过 JOB_ARRAY 在 500 个不同的节点上执行它。在执行文件的每个副本时,它需要读取一个输入参数,例如double parameter
. 我的想法是准备一个 .txt 文件,该文件将parameter
在每一行保存一个值。parameter
实施读取这些值的最佳策略是什么?
a.out 将从第一行读取值并立即将其删除。如果这是正确的策略,如何确保 a.out 的两个副本不会同时做同样的事情?
a.out 将从第 n 行读取值。如何让 a.out 的副本知道它与哪个 n 一起工作?
有没有比上述两个更好的实施策略?如果是这样,该怎么做?C++ fstream 是要走的路,还是我应该尝试一些完全不同的东西。
谢谢你的任何想法。如果您还留下一些非常简单的代码来说明 a.out 的外观,我将不胜感激。
解决方案
选项二是最好的方法:您可以使用 $SLURM_ARRAY_TASK_ID 来获取特定的行,因此您的作业脚本中的调用很简单:
a.out $(head -n $SLURM_ARRAY_TASK_ID parameter.txt | tail -1)
这应该得到与任务数组 ID 对应的行。
推荐阅读
- android - Opengl ES2 Android经常在Texture中改变颜色
- java - 将数据从 ItemListener 中的事件存储到 ArrayList
- typescript - 允许接口隐式转换为 JsonData
- django - HttpResponseRedirect 不会将编辑页面重定向到另一个显示 Django 编辑结果的页面
- android - ThumDrawable 在 SeekBar 中的行为如何?
- javascript - 我可以在遍历数组时设置不同的 Date.now() 时间吗?
- tfs - TFVC:在 vnext 构建期间删除工作区失败
- css - JustifyContent:React 网格中的“中心”
- java - Spring 的 RemoteFileTemplate.get 方法是同步的吗?
- prolog - Quoridor AI - 无向图