我的 Fortran 代码中有一个并行区域,它使用 OpenMP 并调用使用作用域内带有 save 属性的变量的子例程。这导致了一个问题,因为它们在线程之间共享,所以我的问题是是否有一种方法可以使这些变量成为私有变量,同时仍然在子例程调用之间保存,或者我是否需要输入和输出它们?
谢谢
我有一个子例程,它应该W % R使用MPI_SEND. 它可以在我的笔记本电脑上使用 Intel 和 gfortran 编译器(从某种意义上说它不会崩溃)。但是当我在 HPC 上运行它时,程序在第一次调用子例程时冻结。
SUBROUTINE mix_walkers( W )
include 'mpif.h'
TYPE(walkerList), INTENT(INOUT) :: W
INTEGER, SAVE :: calls = 0
INTEGER :: ierr, nthreads, rank, width, self, send, recv, sendFrstWlkr, sendLstWlkr, sendWlkrcount, &
recvFrstWlkr, recvlstWlkr, recvWlkrcount, status
calls = calls + 1
CALL MPI_COMM_SIZE( MPI_COMM_WORLD, nthreads, ierr )
CALL MPI_COMM_RANK ( MPI_COMM_WORLD, rank, ierr )
width = W % nwlkr / nthreads
IF( MODULO( calls, nthreads ) == 0 ) …Run Code Online (Sandbox Code Playgroud)