200 likes | 310 Vues
Learn about memory hierarchy and optimizations for parallel programming, covering registers, cache, main memory, disks, and tapes. Understand access times and costs for different memory types.
E N D
Special Lectures on Parallel Programming 김 재 삼 2005년 8월
Memory - Hierarchy Typical Capacity Typical Access Time Registers < 1 KB 1 nsec Cache L1+L2 = 640 K 2 nsec Main Memory 512~1024 MB 10 nsec Cost = 0.04 cent/KB Magnetic Disks 8 msec 100~400 GB Cost = 0.03 cent/KB Magnetic Tapes > 1 TB 100 sec
$INIT ON C23456 1 2 3 4 5 6 | PROGRAM CARTESIAN INCLUDE 'mpif.h' INTEGER DIMS(2),COM2D,COORDS(2),SRC,DEST,GOORDS(2) LOGICAL PERI(2),REORDER CHARACTER*80 DUMMY C CALL ENVIRON(NODENUM,NPROC) ID = NODENUM IF (ID .EQ. 0) OPEN(10,FILE='test0',STATUS='UNKNOWN') IF (ID .EQ. 1) OPEN(11,FILE='test1',STATUS='UNKNOWN') IF (ID .EQ. 2) OPEN(12,FILE='test2',STATUS='UNKNOWN') IF (ID .EQ. 3) OPEN(13,FILE='test3',STATUS='UNKNOWN') IF (ID .EQ. 4) OPEN(14,FILE='test4',STATUS='UNKNOWN') IF (ID .EQ. 5) OPEN(15,FILE='test5',STATUS='UNKNOWN') MJMP = 2 GOORDS(1) = 1 GOORDS(2) = 2 DIMS(1) = 3 DIMS(2) = 2 PERI(1) = .TRUE. PERI(2) = .TRUE. REORDER = .FALSE. CALL MPI_CART_CREATE(0,2,DIMS,PERI,REORDER,COM2D,IERR) CALL MPI_CART_COORDS(COM2D,NODENUM,2,COORDS,IERR) CALL MPI_CART_RANK(COM2D,GOORDS,NUMBER,IERR) IF (NODENUM .EQ. 0) PRINT *, NUMBER CALL MPI_CART_SHIFT(COM2D,0,MJMP,SRC,DEST,IERR) DO I=0,5 IF (NODENUM .EQ. I) THEN WRITE( * ,100) NODENUM,COORDS(1),COORDS(2),SRC,DEST ENDIF C CALL MPI_BARRIER(0,IERR) ENDDO
IF (ID .EQ. 0) WRITE(10,100) ID,COORDS(1),COORDS(2),SRC,DEST IF (ID .EQ. 1) WRITE(11,100) ID,COORDS(1),COORDS(2),SRC,DEST IF (ID .EQ. 2) WRITE(12,100) ID,COORDS(1),COORDS(2),SRC,DEST IF (ID .EQ. 3) WRITE(13,100) ID,COORDS(1),COORDS(2),SRC,DEST IF (ID .EQ. 4) WRITE(14,100) ID,COORDS(1),COORDS(2),SRC,DEST IF (ID .EQ. 5) WRITE(15,100) ID,COORDS(1),COORDS(2),SRC,DEST C 100 FORMAT('NODE',I3,' is at (',I2,',',I2,'). from',I3,' and to',I3) CALL MPI_FINALIZE(IER) STOP END C ---------------------------- End of MAIN ---------------------------- SUBROUTINE ENVIRON(NODENUM,NPROC) INCLUDE 'mpif.h' CALL MPI_INIT(IER) CALL MPI_COMM_RANK(0,NODENUM,IER) CALL MPI_COMM_SIZE(0,NPROC,IER) RETURN END C ---------------------------- End of ENVIRON ------------------------