Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C MPI—自动化多示例运行并保留日志和信息的最佳方法+;预测全局变量_C_Io_Mpi - Fatal编程技术网

C MPI—自动化多示例运行并保留日志和信息的最佳方法+;预测全局变量

C MPI—自动化多示例运行并保留日志和信息的最佳方法+;预测全局变量,c,io,mpi,C,Io,Mpi,我想测试我写的两个算法,而不是重复这个过程,改变变量,写下输出,我想实现这个过程的自动化。我希望这就像一个脚本类型,我可以声明处理器的数量,一些变量,并且肯定有一个格式化的输出,包含多次运行的所有结论。输出的格式可以是文本格式,但如果我以后可以使用该文件创建二维图形等,我不会感到麻烦。有什么想法吗?编写一个shell脚本来生成所有要测试的组合。让您的代码以这样一种方式生成输出,您可以确定它使用了哪些参数。我将输出发送到一个文件,该文件的名称列出了所有参数 编辑: 在您的程序中: // ensur

我想测试我写的两个算法,而不是重复这个过程,改变变量,写下输出,我想实现这个过程的自动化。我希望这就像一个脚本类型,我可以声明处理器的数量,一些变量,并且肯定有一个格式化的输出,包含多次运行的所有结论。输出的格式可以是文本格式,但如果我以后可以使用该文件创建二维图形等,我不会感到麻烦。有什么想法吗?

编写一个shell脚本来生成所有要测试的组合。让您的代码以这样一种方式生成输出,您可以确定它使用了哪些参数。我将输出发送到一个文件,该文件的名称列出了所有参数

编辑:

在您的程序中:

// ensure argc >= 4

int   argA = atoi(argv[1]);
float argB = atof(argv[2]);

char* output_filename = argv[3];
在脚本中:

for A in 1 2 3
do
    for B in 0.1 0.2 0.3
    do
         mpirun a.out $A $B results_of_run_${A}_${B}.txt
    done
done

这是我的想法,但我在实施上有困难。例如,我有3个全局变量x,y,z,我想在整个过程中改变它们。首先必须编译程序,然后运行多个进程。最后是文件。它应该是什么格式,以及我如何使它在写入文件时不擦除以前的所有条目(根据我的经验,当您多次调用写入文件的程序时,它会不断重新写入整个文件中的数据。添加命令行支持,以便将这些全局变量设置到您的程序中(即使用
argv
)。让输出文件名反映您的参数,这样您就不会一直覆盖同一个输出文件。可以在内部生成文件名(最不常用),使用另一个开关使脚本指定输出文件名,或者输出到
stdout
并使用操作系统发送到相应的文件(共享内存时为管道,否则为PBS输出文件设置)。您也可以使用程序查询环境变量来设置参数,甚至可以使用配置文件,但命令行路由是最简单、最干净的。如果您想知道,没有办法从程序外部设置程序的全局变量。首先,我要做的是。它是哪一个?我能不能传递整数参数在我运行程序(或在本例中是自动脚本)时从命令行执行?Argv和Argc用于传递字符串参数而不是整数。此外,这将使用MPI(mpicc&mpiexec)执行到并行集群中-MPICH很清楚。其次,输出文件与脚本有什么关系?输出文件是由实际的程序生成和编写的。我必须说,我对这方面的知识非常有限,但请注意详细说明输出管道方法。我会按照
fprint
的方式在文本上写入,但正如我所说,它会不断覆盖每次执行时都会覆盖文件。在并行情况下,这个问题更糟,因为每个处理器在执行一次时都会覆盖文件。我还认为脚本可能是bash脚本。