죄송합니다. 여기에서 물어보는 것이 좋을지 아니면 Stack Overflow에 묻는 것이 더 좋은지 잘 모르겠습니다. 하지만 이것은 새로운 Fedora 39 설치에 관한 것이며 dnf를 통해 설치된 패키지인 mpich-devel, openmpi를 사용했습니다. devel 및 (linux-homebrew에서) openmpi에서도 동일한 문제가 발생합니다. 아무래도 시스템과 관련이 있는 것 같아서 여기에 물어보는 게 좋겠다고 생각했어요.
기본적으로 MPI_Init가 포함된 MPI 프로그램을 실행하려고 하면 실행되지만 실제로 시작하는 데 시간이 오래 걸립니다. 바로 나타나지도 않고 top
어떤 이유에서인지 지연되는 것 같습니다. 그렇게 했을 때, 예상했던 것만큼 빠르게 작동했습니다. 이것은 Fortran 언어로 작성된 간단한 Hello World MPI 프로그램입니다.
program hello_world
use mpi
implicit none
integer :: mpi_size, mpi_rank
integer :: ierr
double precision :: t1, t2
call MPI_Init(ierr)
t1 = MPI_Wtime()
call MPI_Comm_size(MPI_COMM_WORLD, mpi_size, ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, mpi_rank, ierr)
print*, "Hello from rank ", mpi_rank, " of ", mpi_size, "."
t2 = MPI_Wtime()
print*, "time for full program", t2-t1
call MPI_Finalize(ierr)
end program hello_world
mpif90(오류 없음)으로 컴파일하고 몇 분 정도 지연하여 실행할 수 있습니다. 이 문제의 원인이 무엇인지 찾아봤고 유사한 게시물에서 다른 프로그램을 닫고 Wi-Fi를 비활성화할 것을 제안했지만(이유는 확실하지 않음) 이들 중 어느 것도 도움이 되지 않았습니다.
이것이 출력이다time mpirun -np 2 ./a.out
Hello from rank 0 of 2 .
time for full program 1.3940195000000001E-002
Hello from rank 1 of 2 .
time for full program 1.4017349000000000E-002
real 2m27.524s
user 0m0.033s
sys 0m0.163s
비교를 위해 여기에 더 간단한 Hello World 프로그램이 있습니다.
program hello
print *, 'Hello, World!'
end program hello
을 사용하여 컴파일 mpif90
하고 시간을 측정하면(여기서는 gfortran과 비교하기 위해 하나의 프로세서를 사용하여 실행) 다음과 같은 결과를 얻습니다.
Hello, World!
real 1m13.201s
user 0m0.016s
sys 0m0.074s
./a.out
gfortran 사용하기(또는 사용하여 실행해도 상관없음 mpirun -np 1 ./a.out
)
Hello, World!
real 0m0.002s
user 0m0.001s
sys 0m0.001s
또한 기다리지 않고 간헐적으로 작동하는 것처럼 보입니다. (업데이트를 통해 문제가 해결되었다고 생각하여 문제를 삭제해도 충분했지만 다시 실행했을 때 문제가 다시 발생했습니다.)
편집: 어떻게든 문제가 있는 것 같습니다 MPI_Init
. 다음과 같이 전화를 걸 수 있습니다.
call date_and_time(values=values)
print *, values(5),":",values(6),":",values(7),":",values(8)
특정 라인의 시간을 찾으면 병목 현상이 발생합니다 MPI_Init
.
예: 프로그램 시작 시간:
17 : 20 : 6 : 221
뒤쪽에 MPI_Init
:
17 : 21 : 21 : 128
뒤쪽에 MPI_Finalize
:
17 : 21 : 21 : 132
답변1
mpiexec -n 4 ./my_program
나는 실제로 아무것도 하기 전에 전체 작업이 90초 이상 실행되는 유사한 문제를 해결했습니다 . 프로그램 자체는 MPI 없이 약 0.15초 만에 실행됩니다.
해결 방법은 모든 네트워크 연결을 비활성화하는 것입니다.(WiFi, VPN...) 런타임이 mpiexec
1초 미만으로 단축됩니다.
수백 대의 기기를 통해 eduroam WiFi에 연결했으며 공용 IP 주소를 가지고 있습니다. 이는 백그라운드의 네트워크 시간 초과 문제로 인해 발생할 수 있습니다.
누군가 Cygwin 메일링 리스트에서 비슷한 문제를 이미 해결했습니다. https://sourceware.org/legacy-ml/cygwin/2016-12/msg00192.html. Kernel 6.6.26, OpenMPI 5.0.2 및 g++ 12.3.0을 실행하는 Linux 상자에서 동일한 문제에 직면하고 있으므로 이 문제는 Windows 시스템 및 Cygwin에만 관련되지 않을 수 있습니다.
도움말을 사용하거나 사용하지 않고 설정하면 -H localhost
효과는 첫 번째 단락에서 이러한 매개변수 없이 실행하는 것과 동일합니다 -H 127.0.0.1
.mpiexec