내 노트북 (인텔 i7 쿼드 코어 4700m 12Gb RAM)에서 MPI를 실행 중이며 프로세스 간 통신이없는 코드의 경우에도 효율이 떨어집니다. 분명히 내 컴퓨터가 쿼드 코어이기 때문에 100 개의 프로세스를 던질 수는 없지만 8 프로세스 (인텔 쿼드 코어는 8대로 시뮬레이트)로 확장해야한다고 생각했습니다. 그것은 절반의 시간이 걸리지 만도 4 개 프로세스를 시도하는내 랩톱에서 mpi가 느린 이유는 무엇입니까
program test
implicit none
integer, parameter :: root=0
integer :: ierr,rank,nproc,tt,i
integer :: n=100000
real :: s=0.0,tstart,tend
complex, dimension(100000/nproc) :: u=2.0,v=0.0
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD,nproc,ierr)
call cpu_time(tstart)
do tt=1,200000
v=0.0
do i=1,100000/nproc
v(i) = v(i) + 0.1*u(i)
enddo
enddo
call cpu_time(tend)
if (rank==root) then
print *, 'total time was: ',tend-tstart
endif
call MPI_FINALIZE(ierr)
end subroutine test2
이 개 프로세스에 대한 결과는 덜 효율적이고 8 개 프로세스가 시작 : 예를 들어, 간단한 장난감 포트란 코드를 고려 (시간의 분기를해야 하는가?) 무엇이든 개선은 없습니다. 기본적으로 랩톱 컴퓨터에서 실행되고 공유 메모리와 관련이 있거나 코드에서 근본적인 실수를 저지르고 있기 때문에 이것이 단지 것인지 궁금합니다. 감사합니다
참고 : 위의 예에서는 배열 선언에서 nproc을 수동으로 변경하고 내부 루프는 사용중인 프로세서 수와 동일하게 변경합니다.