如何解决我们如何在 Fortran 中使用多个进程?
我正在尝试执行 16 个任务,这些任务一一分配给名为 tasks_ready_master
的数组的每个元素。我想避免使用 OMP 任务。
我想过使用fork/wait方法。
!$OMP SINGLE
n=16
do ff =1,n
pid=c_fork()
if (pid < 0) then
call perror('fork()' // c_null_char)
else if (pid == 0) then
call tasks_ready_master(ff+4)%f_ptr(self,var)
call exit(STATUS)
else
pid=c_wait(STATUS)
call sleep(50)
end if
end do
!$OMP END SINGLE
我参考了在 Multiple child process 上找到的 C 代码。
对于 unix
模块,我遵循了 https://cyber.dabamos.de/programming/modernfortran/fork.html 上的步骤。
想法是创建16个子进程,每个进程执行一个任务。
据我了解,else if (pid == 0) then
下的代码是由子进程执行的。
我不理解c_wait
函数,这里有必要使用sleep
函数吗?
对我来说,else
(父进程)下的部分是无用的。这非常重要吗 ?没有它,它会告诉我:
fork(): Resource temporarily unavailable
抱歉,Fortran 中没有足够的关于 fork/wait 的文档。
(我将标记 C,因为我发布的链接之一(在我的问题中)包含 C 代码,并且使用的函数来自 C。)
感谢评论,我有:
n=3
do ff =1,n
pid(ff)=c_fork()
if (pid(ff) < 0) then
call perror('fork()' // c_null_char)
else if (pid(ff) == 0) then
call tasks_ready_master(ff+4)%f_ptr(self,var)
call exit(STATUS)
end if
end do
do ff=1,n
pid(ff)=c_wait(STATUS)
end do
我认为 pid
是一个包含 16 个整数元素的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。