我在我的筆記本電腦(英特爾酷睿i7四核12GB4700米RAM),運行MPI和效率下降,甚至對於不涉及進程間通信代碼MPI慢。顯然,我不能只扔100個進程,因爲我的機器只有四核,但我認爲它應該擴展到8進程(intel四核模擬爲8 ???)。例如,考慮簡單的玩具Fortran代碼:爲什麼我的筆記本電腦
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
對於2個進程需要花費一半的時間,但即使想4個進程的結果開始變得不那麼有效,8個進程(應季的時間?)沒有任何改進。基本上我想知道這是否僅僅是因爲我在筆記本電腦上運行,並且與共享內存有關,或者如果我在代碼中犯了一些基本錯誤。感謝
注:在上面的例子中,我手動更改數組聲明和內環的NPROC爲等於我使用的處理器的數量。