如何在被OpenMPI prun调用的C程序中获取全部命令行参数
重要提示
我发现该问题至少部分与我使用的特定计算集群相关,因为prun似乎与SLURM存在某种结合,但它仍可能对OpenMPI的prun通用使用具有参考价值。
问题
我希望在C程序中创建一个字符串数组,其元素为调用该C程序的prun命令的全部命令行参数。具体场景如下:
# prun调用C程序 prun -v -<可变核心数> \ -np <可变计算节点数> \ <prun的其他参数> \ ./name_of_c_program <C程序的参数>
因此,在name_of_c_program.c中,我希望能够访问如下内容:
// C程序应能访问全部命令行参数(包括prun的参数) int main(int argc, char **argv){ all_cmd_line_args = get_all_cmd_line_args(); // all_cmd_line_args = {"prun", "-v", ...} }
我已知默认情况下,argv的第一个元素是程序名(即name_of_c_program),后续元素则是上述代码块中<C程序的参数>部分的内容。
关于
prun的说明 根据prun的文档,它似乎会设置一些环境变量。或许可以在C程序中访问这些环境变量来获取prun的选项,prun用于执行串行和并行作业,调用格式为:prun [ options ] <program> [ <args> ]。
当前(可能仅适用于特定环境)的解决方案
我认为这并非通用方案,但发现在我使用的特定集群中,prun命令会为所有进程设置环境变量,并将这些变量存储在名称符合.PRUN_ENVRIONMENT*模式的临时文本文件中。要获取"PRUN_CPUS=<CPU数量>"这类信息,只需读取该临时文件并将结果存储到C程序的变量中即可。
内容的提问来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

