【发布时间】:2019-11-21 19:17:02
【问题描述】:
我正在使用 netlib LSODAR 子例程来集成 ODE。代码为available。该代码在 F77 中并使用保存语句和 DATA 构造。我不能只删除它们,而且代码很长,需要很长时间才能通过和编辑每个选项。我的代码需要运行多个这些集成,因此我想使用 openmp 来并行化代码。有没有办法让这些代码线程安全?我已经使所有函数和子例程递归,并将子例程的所有输入变量设为私有/第一私有,但它没有帮助。任何帮助表示赞赏。如果还有其他线程安全的替代方案也可以。
一个样本是
program main
!$omp parallel
call counter()
call counter()
!$omp end parallel
end program main
subroutine counter()
integer i
save i
i = i+1
end subroutine counter
我不能干预保存语句,而且还有一些常见的块。在我的理想情况下,最后每个线程中的 i 应该是 2。但是,在这种情况下,它只会导致(处理器数量)*2。
【问题讨论】:
-
能否提供示例代码?