作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个并行运行的 MPI
进程,所有这些进程都访问共享内存并执行以下操作:
sem_wait(sem);
shmid = shmget(key, sizeof(int), 0777)) < 0)
shm = shmat(shmid, NULL, 0);
printf("process id = %d, shm = ",rank, *shm);//rank from MPI_Comm_rank()
new_val = *shm+1;
*shm = new_val;
sem_post(sem);
这段代码是一个更大的代码的一部分,我不能把它放在这里,所以我只给出了我认为需要更改的一小部分。
我得到以下结果(第一次运行):
process id = 1 shm = 1
process id = 2 shm = 2
process id = 3 shm = 3
process id = 4 shm = 4
process id = 5 shm = 5
我得到以下结果(第二次运行):
process id = 2 shm = 1
process id = 3 shm = 2
process id = 1 shm = 3
process id = 5 shm = 4
process id = 4 shm = 5
不同运行的结果相似。
是否可以更改代码,使其每次生成相同的值?
我正在linux环境下使用C语言。
我非常需要代码的可重复性。任何形式的帮助将不胜感激。谢谢 !
最佳答案
在不考虑这是否是一个好主意的情况下,您似乎希望在各个进程之间对系统调用进行确定性排序。使用 MPI 完全可以实现这一点 - 例如:
for (int ii = 0; ii < MPI_Comm_size(); ii++) {
if ii == MPI_Comm_rank() {
// attach shmem
}
MPI_Barrier(MPI_COMM_WORLD);
}
这将使进程“轮流”附加到共享内存。
关于c - 多进程计算中如何保证结果的重复性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17463417/
我正在尝试使用重复包装脚本(duplicity-restore.sh)恢复文件,内容如下: #!/bin/bash # Export some ENV variables so you don't h
在过去的几周里,我们的 mysql 数据库一直在随机崩溃。 - 我已经检查了所有数据库是否损坏,但一切正常。 编辑 2016.01.14 - 经常弹出的错误如下 - InnoDB: Database
我是一名优秀的程序员,十分优秀!