繁体   English   中英

我们如何使用 bash 脚本多次并行运行单个程序?

[英]How do we run single program in parallel multiple times using bash script?

我已经使用以下命令运行了以下程序 test.c

$  nohup bash -c 'gcc test.c && ./a.out' > out1.txt & nohup bash -c 'gcc test.c && ./a.out' > out2.txt

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

#define myrand32 ((unsigned int) (4294967296.0*drand48()))
 

int main()
{
   
    srand48(time(NULL));
 
    for(int i = 0; i<4; i++)
        printf(" %u ", myrand32);
 
    return 0;
}

但是我在两个不同的输出文件中得到了相同的输出。 实际上,我有一个带有 32 个 CPU 的节点,我想在 32 个 CPU 中并行运行相同的程序,以便在输出文件中生成不同的 ooutput。 如何使用 bash 脚本执行此操作? 或任何其他建议。

我会做类似的事情

for i in $(seq 32); do (./a.out > out$i &); done

这会运行 32 个程序副本,全部在后台并行运行,其输出重定向到文件out1out32

您在两个文件中获得了相同的输出,因为正如@MikeCat 所指出的,您的程序的两个副本在同一秒内运行,因此time(NULL)返回相同的值,因此两次调用都使用相同的种子运行。 解决该问题的一种简单方法是执行以下操作

srand48(time(NULL) ^ getpid());

更好的解决方法是从/dev/random读取种子,但这有点棘手。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM