mpi

Size: px
Start display at page:

Download "mpi"

Transcription

1 MPI I

2 II MPI FORTRAN C MPI MPI C /FORTRAN MPI MPI MPI MPI MPI MPI-2 MPI-1 MPI-2 MPI MPI

3 ...IX...XI... XII...XIV... XVII MPI MPI MPI MPI MPI MPI MPI MPI MPI Hello World! FORTRAN77+MPI C+MPI MPI MPI MPI...23 III

4 6.1.2 MPI MPI status MPI MPI MPI MPI MPI MPI MPI MPI MPI MPI MPI MPI Jacobi MPI Jacobi Jacobi Jacobi MPI MPI MPICH MPI Linux MPICH...80 IV

5 Windows NT MPICH MPI MPI Jacobi Jacobi MPI V

6 MPI π MINLOC MAXLOC MPI MPI MPI Jacobi MPI MPI MPI-1 C MPI-1 Fortran VI

7 18.3 MPI-2 C MPI-2 Fortran MPI MPI MPI socket I/O VII

8 MPI MPI MPICH VIII

9 IX 21, Great Challenge, 90 HPCC ASCI (Computational Science and Engineering) 777 THNPSC-1 THNPSC MPI MPI MPI THNPSC-1 THNPSC MPI MPI MPI

10 MPI MPI MPI MPI MPI X

11 XI -- PC MPI MPI 1994 MPI MPI FORTRAN 77 C MPI 6 FORTRAN 77 C MPI 6 Fortran90 C++ MPI Fortran 90 C++ MPI FORTRAN77 C MPI MPI MPI MPI MPI MPI MPI MPI-2 I/O MPI

12 1 FORTRAN77+MPI C+MPI Fortran90+MPI MPI_REAL MPI_REAL MPI_BYTE MPI_BYTE MPI_BYTE MPI_CHARACTER MPI MPI MPI Jacobi MPI_SEND MPI_RECV Jacobi MPI_SENDRECV Jacobi Jacobi MPI_WAIT MPI_REQUEST_FREE Jacobi Jacobi MPI_Gather MPI_Gatherv MPI_Scatter XII

13 42 MPI_Scatterv MPI_Allgather MPI_Allgatherv MPI_Alltoall π MPI_MAXLOC MPI_ADDRESS MPI Jacobi XIII

14 SPMD SPMD MPMD FORTRAN77+MPI FORTRAN77+MPI FORTRAN77+MPI C+MPI C+MPI MPI MPI MPI MPI_SEND MPI_RECV tag MPI Jacobi Jacobi MPI_SENDRECV Jacobi MPI NT MPI...89 XIV

15 41 NT MPI NT MPI NT MPI NT MPI MPI MPI MPI_ALLTOALL MPI π π MPI_TYPE_CONTIGUOUS MPI_TYPE_VECTOR MPI_TYPE_INDEXED MPI_TYPE_STRUCT MPI_PUT MPI_GET XV

16 85 MPI_ACCUMULATE MPI_WIN_FENCE MPI_FILE_READ_AT MPI_FILE_WRITE_AT XVI

17 MPI MPI FORTRAN MPI C MPI MPI MPI MPI C FORTRAN MPI MPI Fortran MPI C MPI_MAXLOC I/O XVII

18 MPI 1

19 SIMD Single-Instruction Multiple-Data MIMD Multiple- Instruction Multiple-Data 1 SIMD A=A+1 SIMD A 1 SIMD SIMD MIMD A=B+C+D-E+F*G A=(B+C)+(D-E)+(F*G) B+C D-E F*G SIMD MIMD SPMD Single-Program Multuple-Data MPMD Multiple-Program Multiple-Data 1 2

20 SPMD MPMD MPMD D D M SIMD MIMD M SPMD MPMD S SISD MISD S SPSD MPSD S M I S M P

21 Cluster Computing

22 1.3 5

23 SIMD SPMD B C A A=B+C B C A 1

24 1 SIMD/SPMD SIMD/MIMD/SPMD/MPMD MPI 4 7

25 4 2.3 FORTRAN C MPI FORTRAN C 8

26 SIMD MIMD SPMD MPMD SPMD MPMD

27 5 SPMD 5 6 SPMD 6 SPMD MPMD SPMD MPMD 7 MPMD 10

28 7 MPMD

29 MPI MPI MPI MPI MPICH Linux NT MPI MPI MPI MPI-1 MPI-2 12

30 4 MPI MPI MPI MPI 4.1 MPI MPI MPI 1 MPI MPI FORTRAN+MPI C+MPI MPI FORTRAN77/C/Fortran90/C++ / / 2 MPI MPI MPI MPI 3 MPI MPI MPI MPI MPI, MPI 4.2 MPI MPI C Fortran 77 PVM NX Express p4 13

31 MPI 4.3 MPI MPI Venus (IBM) NX/2 (Intel) Express (Parasoft) Vertex (ncube) P4 (ANL) PARMACS (ANL) Zipcode (MSU) Chimp (Edinburgh University) PVM (ORNL, UTK, Emory U.) Chameleon (ANL) PICL (ANL) MPI Dongarra,Hempel,Hey Walker MPI 1.0 MPI MPI MPI MPI MPI1.1 MPI MPI I/O MPI MPI MPI MPI-2 MPI MPI-1 MPI-2 I/O MPI-1 MPI MPI MPI MPI FORTRAN C FORTRAN C MPI-1 MPI FORTRAN 77 C FORTRAN 77 C MPI-1 MPI Fortran90 FORTRAN Fortran90 FORTRAN 77 Fortran90 C++ C MPI-2 FORTRAN 77 C Fortran90 C++ MPI-2 14

32 4.5 MPI MPICH MPI MPICH MPI-1 MPI MPICH MPICH MPICH MPI-2 Argonne MSU MPICH CHIMP Edinburgh MPI EPCC Edinburgh Parallel Computing Centre ftp://ftp.epcc.ed.ac.uk/pub/packages/chimp/release/ CHIMP Alasdair Bruce, James (Hamish) Mills, Gordon Smith LAM (Local Area Multicomputer) MPI Ohio State University LAM/MPI MPI 2 MPI Mpich Argonne and MSU Chimp Edinburgh ftp://ftp.epcc.ed.ac.uk/pub/packages/chimp/ Lam Ohio State University MPI MPI MPI FORTRAN C MPI MPI 15

33 5 MPI Hello World MPI MPI FORTRAN C MPI 5.1 MPI Hello World! C Hello World MPI FORTRAN77+MPI 1 FORTRAN77+MPI MPI FORTRAN mpif.h MPI C FORTRAN MPI FORTRAN mpif.h Fortran90+MPI MPI-2 Fortran90 C++ Fortran90 include mpif.h use mpi MPI Fortran90 4 MPI MPI_MAX_PROCESSOR_NAME MPI MPI processor_name myid numprocs namelen rc ierr MPI MPI MPI_INIT MPI_FINALIZE MPI MPI MPI FORTRAN MPI_COMM_RANK myid MPI_COMM_SIZE numprocs MPI_GET_PROCESSOR_NAME processor_name namelen write FORTRAN FORTRAN 4 tp5 4 tp MPI 10 16

34 program main include 'mpif.h' character * (MPI_MAX_PROCESSOR_NAME) processor_name integer myid, numprocs, namelen, rc,ierr call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) call MPI_GET_PROCESSOR_NAME(processor_name, namelen, ierr) write(*,10) myid,numprocs,processor_name 10 FORMAT('Hello World! Process ',I2,' of ',I1,' on ', 20A) call MPI_FINALIZE(rc) end 1 FORTRAN77+MPI Hello World! Process 1 of 4 on tp5 Hello World! Process 0 of 4 on tp5 Hello World! Process 2 of 4 on tp5 Hello World! Process 3 of 4 on tp5 8 FORTRAN77+MPI 1 4 tp1 tp3 tp4 tp Hello World! Process 0 of 4 on tp5 Hello World! Process 1 of 4 on tp1 Hello World! Process 2 of 4 on tp3 Hello World! Process 3 of 4 on tp4 9 FORTRAN77+MPI 4 17

35 Hello World MPI_INIT MPI_INIT MPI_INIT MPI_INIT MPI_COMM_RANK MPI_COMM_RANK MPI_COMM_RANK MPI_COMM_RAN myid=0 myid=1 myid=2 myid=3 MPI_GET_PROCESSOR_NAME MPI_GET_PROCESSOR_NAME MPI_GET_PROCESSOR_NAME MPI_GET_PROCESSOR_NAME processor_name= tp5 processor_name= tp5 processor_name= tp5 processor_name= tp5 namelen=3 namelen=3 namelen=3 namelen=3 write write write write Hello World! Process 0 of 4 on tp5 Hello World! Process 1 of 4 on tp5 Hello World! Process 2 of 4 on tp5 Hello World! Process 3 of 4 on tp5 MPI_FINALIZE MPI_FINALIZE MPI_FINALIZE MPI_FINALIZE Hello World 10 FORTRAN77+MPI C+MPI 3 C+MPI FORTRAN77+MPI MPI C mpi.h mpif.h MPI FORTRAN77 MPI_MAX_PROCESSOR_NAME MPI MPI 18

36 processor_name FORTRAN77 myid numprocs namelen MPI MPI_Init MPI_Finalize MPI FORTRAN77+MPI FORTRAN77 C FORTRAN77 MPI FORTRAN77 MPI FORTRAN77 C MPI_ MPI MPI C MPI_Comm_rank myid MPI_Comm_size numprocs MPI_Get_processor_name processor_name namelen fprintf C 4 tp5 tp MPI FORTRAN77+MPI Hello World! Process 0 of 4 on tp5 Hello World! Process 1 of 4 on tp5 Hello World! Process 3 of 4 on tp5 Hello World! Process 2 of 4 on tp5 11 C+MPI 1 4 tp1 tp3 tp4 tp FORTRAN77+MPI C+MPI Hello World! Process 0 of 4 on tp5 Hello World! Process 1 of 4 on tp1 Hello World! Process 2 of 4 on tp3 Hello World! Process 3 of 4 on tp4 12 C+MPI 4 19

37 #include "mpi.h" #include <stdio.h> #include <math.h> void main(argc,argv) int argc; char *argv[]; { int myid, numprocs; int namelen; char processor_name[mpi_max_processor_name]; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Get_processor_name(processor_name,&namelen); fprintf(stderr,"hello World! Process %d of %d on %s\n", myid, numprocs, processor_name); } MPI_Finalize(); 3 C+MPI program main use mpi character * (MPI_MAX_PROCESSOR_NAME) processor_name integer myid, numprocs, namelen, rc, ierr call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) call MPI_GET_PROCESSOR_NAME(processor_name, namelen, ierr) print *,"Hello World! Process ",myid," of ", numprocs, " on", processor_name call MPI_FINALIZE(rc) end 4 Fortran90+MPI 20

38 MPI 13 MPI 13 MPI 5.2 MPI MPI MPI MPI_ MPI_ MPI FORTRAN MPI FORTRAN C MPI MPI_Aaaa_aaa MPI FORTRAN MPI_SUCCESS MPI FORTRAN FORTRAN 1 C 0 FORTRAN 77 MPI ANSI FORTRAN 77 ANSI FORTRAN 77 MPI, MPI MPI mpif.h, mpif.h 21

39 5.3 MPI MPI MPI MPI MPI Hello World MPI Hello World SPMD Single Program Multiple Data 22

40 6 MPI MPI MPI MPI MPI MPI MPI MPI FORTRAN 77 C MPI C FORTRAN 14 MPI 14 MPI MPI FORTRAN 77 C MPI-2 C++ MPI IN OUT INOUT IN MPI MPI OUT MPI INOUT MPI MPI OUT INOUT MPI INOUT 23

41 MPI IN OUT INOUT MPI MPI OUT INOUT void copyintbuffer( int *pin, int *pout, int len ) { int i; for (i=0; i<len; ++i) *pout++ = *pin++; } int a[10]; copyintbuffer( a, a+3, 7); C, MPI FORTRAN77 MPI MPI, C FORTRAN 77 MPI_INIT MPI_INIT() int MPI_Init(int *argc, char ***argv) C C argc argv argc argv MPI_INIT(IERROR) INTEGER IERROR FORTRAN77 FORTRAN77 IERROR C FORTRAN77 void*,<type> MPI C FORTRAN77 MPI MPI_SEND C FORTRAN77 void * <type> 24

42 6.1.2 MPI MPI_INIT() int MPI_Init(int *argc, char ***argv) MPI_INIT(IERROR) INTEGER IERROR MPI 1 MPI_INIT MPI_INIT MPI MPI MPI MPI_FINALIZE() int MPI_Finalize(void) MPI_FINALIZE(IERROR) INTEGER IERROR MPI 2 MPI_FINALIZE MPI_FINALIZE MPI MPI MPI MPI_COMM_RANK(comm,rank) IN comm OUT rank comm int MPI_Comm_rank(MPI_Comm comm, int *rank) MPI_COMM_RANK(COMM,RANK,IERROR) INTEGER COMM,RANK,IERROR MPI 3 MPI_COMM_RANK 25

43 6.1.5 MPI_COMM_SIZE(comm,size) IN comm OUT size comm int MPI_Comm_size(MPI_Comm comm, int *size) MPI_COMM_SIZE(COMM,SIZE,IERROR) INTEGER COMM,SIZE,IERROR MPI 4 MPI_COMM_SIZE MPI_SEND(buf,count,datatype,dest,tag,comm) IN buf ( ) IN count ( ) IN datatype ( ) IN dest ( ) IN tag ( ) IN comm ( ) int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR MPI 5 MPI_SEND MPI_SEND count datatype dest tag MPI_SEND count datatype buf datatype MPI MPI_SEND 26

44 6.1.7 MPI_RECV source datatype tag count count datatype datatype buf MPI count datatype MPI MPI_RECV MPI_RECV(buf,count,datatype,source,tag,comm,status) OUT buf ( ) IN count ( ) IN datatype ( ) IN source ( ) IN tag ( ) IN comm ( ) OUT status ( ) int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR) <type>buf(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS (MPI_STATUS_SIZE) IERROR MPI 6 MPI_RECV status status MPI C MPI_SOURCE MPI_TAG MPI_ERROR status.mpi_source status.mpi_tag status.mpi_error tag FORTRAN status MPI_STATUS_SIZE status(mpi_source) status(mpi_tat) status(mpi_error) tag 27

45 status MPI_GET_COUNT Hello, process 1 1 #include "mpi.h" main( argc, argv ) int argc; char **argv; { char message[20]; int myrank; MPI_Init( &argc, &argv ); /* MPI */ MPI_Comm_rank( MPI_COMM_WORLD, &myrank ); /* */ if (myrank == 0) /* 0 */ { /* message MPI_Send strlen(message) MPI_CHAR MPI_COMM_WORLD 0 1 */ strcpy(message,"hello, process 1"); MPI_Send(message, strlen(message), MPI_CHAR, 1, 99,MPI_COMM_WORLD); } else if(myrank==1) /* 1 */ { /* 1 message 20 MPI_CHAR 0 99 MPI_COMM_WORLD status */ MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status); printf("received :%s:", message); } MPI_Finalize(); 28

46 } /* MPI */ MPI FORTRAN77 MPI FORTRAN MPI FORTRAN77 MPI FORTRAN77 MPI_INTEGER INTEGER MPI_REAL REAL MPI_DOUBLE_PRECISION DOUBLE PRECISION MPI_COMPLEX COMPLEX MPI_LOGICAL LOGICAL MPI_CHARACTER CHARACTER(1) MPI_BYTE MPI_PACKED MPI C 4 4 MPI C MPI C MPI_CHAR signed char MPI_SHORT signed short int MPI_INT signed int MPI_LONG signed long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI_BYTE MPI_PACKED MPI_BYTE MPI_PACKED FORTRAN77 C MPI_BYTE (8 ) MPI, Fortran 77 ANSI C MPI 5 29

47 5 MPI MPI MPI_LONG_LONG_INT MPI MPI_DOUBLE_COMPLEX MPI_REAL2 MPI_REAL4 MPI_REAL8 MPI_INTEGER1 MPI_INTEGER2 MPI_INTEGER4 C long long int FORTRAN77 DOUBLE COMPLEX REAL*2 REAL*4 REAL*8 INTEGER*1 INTEGER*2 INTEGER*4 6.3 MPI MPI MPI MPI MPI MPI MPI 1 2 FORTRAN77 INTEGER MPI_INTEGER REAL MPI_REAL FORTRAN77 MPI C int MPI_INT float MPI_FlOAT 30

48 MPI_INTEGER MPI_INTEGER MPI_REAL MPI_REAL C int long MPI MPI_INT MPI_LONG MPI_INT MPI_LONG MPI_INT MPI_LONG MPI MPI_BYTE MPI_PACKED MPI_TYPE MPI_PACK MPI_UNPACK REAL a(20),b(20) CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 10, MPI_REAL, 1, tag, comm, ierr) ELSE IF (rank.eq. 1) THEN CALL MPI_RECV(b(1), 15, MPI_REAL, 0, tag, comm, status, ierr) END IF 6 MPI_REAL REAL a(20),b(20) CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 10, MPI_REAL, 1, tag, comm, ierr) ELSE IF (rank.eq. 1) THEN CALL MPI_RECV(b(1), 40, MPI_BYTE, 0, tag, comm, status, ierr) END IF 7 MPI_REAL MPI_BYTE REAL a(20),b(20) CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 40, MPI_BYTE, 1, tag, comm, ierr) ELSE IF (rank.eq. 1) THEN CALL MPI_RECV(b(1), 60, MPI_BYTE, 0, tag, comm, status, ierr) END IF 31

49 8 MPI_BYTE MPI_BYTE MPI_BYTE, MPI_PACKED 6 7 MPI_REAL MPI_BYTE 8 MPI_BYTE MPI_CHARACTER FORTRAN 77 CHARACTER CHARACTER FORTRAN 77 CHARACTER*10 a CHARACTER*10 b CALL MPI_COMM_RANK(comm, rank, ierr) IF (rank.eq.0) THEN CALL MPI_SEND(a, 5, MPI_CHARACTER, 1, tag, comm, ierr) ELSE IF (rank.eq. 1) THEN CALL MPI_RECV(b(6), 5, MPI_CHARACTER, 0, tag, comm, status, ierr) END IF 9 MPI_CHARACTER 9 1 b 0 a Fortran CHARACTER, MPI MPI Fortran CHARACTER MPI

50 33 MPI_SEND( buf, count,datatype,dest,tag,comm) MPI MPI MPI MPI MPI MPI (,MPI_BYTE ) MPI,, a b ( ) a b 6.4 MPI MPI MPI < / > < > MPI_SEND MPI_RECV 17 17

51 16 MPI_SEND MPI_RECV(buf,count,datatype,source,tag,comm,status) 17 MPI_RECV / tag MPI_SEND( x,1,,1,tag1,comm) 1 MPI_SEND( y,1,,1,tag2,comm) 2 tag y x tag 1 MPI_RECV(x,1,,0,tag1,comm,status) tag MPI_RECV(y,1,,0,tag2,comm,status) tag MPI source,tag comm, source MPI_ANY_SOURCE tag tag MPI_ANY_TAG tag MPI_ANY_SOURCE MPI_ANY_TAG comm source ( source = MPI_ANY_SOURCE) tag( = MPI_ANY_TAG) MPI_ANY_SOURCE MPI_ANY_TAG MPI = Source = destination 34

52 MPI MPI N 0 N-1 MPI_COMM_WORLD MPI MPI MPI_COMM_WORLD 6.5 MPI MPI MPI MPI MPI MPI MPI MPI MPI

53 7 MPI MPI MPI MPI 7.1 MPI MPI MPI MPI_WTIME() double MPI_Wtime(void) DOUBLE PRECISION MPI_WTIME() MPI 7 MPI_WTIME MPI_WTIME, double starttime, endtime;... starttime = MPI_Wtime() endtime = MPI_Wtime() printf("that tooks %f secodes\n", endtime-starttime); 10 MPI_WTICK double MPI_Wtick DOUBLE PRECISION MPI_WTICK MPI 8 MPI_WTICK MPI_WTICK MPI_WTIME 36

54 MPI #include <stdio.h> #include <stdlib.h> #include "mpi.h" #include "test.h" int main( int argc, char **argv ) { int err = 0; double t1, t2; double tick; int i; MPI_Init( &argc, &argv ); t1 = MPI_Wtime();/* t1*/ t2 = MPI_Wtime();/* t2*/ if (t2 - t1 > 0.1 t2 - t1 < 0.0) { /* 0.1 */ err++; fprintf( stderr, "Two successive calls to MPI_Wtime gave strange results: (%f) (%f)\n", t1, t2 ); } /* 10 1 */ for (i = 0; i<10; i++) { t1 = MPI_Wtime();/* */ sleep(1);/* 1 */ t2 = MPI_Wtime();/* */ if (t2 - t1 >= ( ) && t2 - t1 <= 5.0) break; /* */ if (t2 - t1 > 5.0) i = 9; /* */ } /* 10 */ if (i == 10) { /* */ fprintf( stderr, "Timer around sleep(1) did not give 1 second; gave %f\n",t2 - t1 ); err++; 37

55 } } tick = MPI_Wtick(); /* */ if (tick > 1.0 tick < 0.0) { /* */ err++; fprintf( stderr, "MPI_Wtick gave a strange result: (%f)\n", tick ); } MPI_Finalize( ); 11 MPI 7.2 MPI MPI rank MPI MPI_GET_PROCESSOR_NAME name, resultlen OUT name OUT resultlen int MPI_Get_processor_name ( char *name, int *resultlen) MPI_GET_PROCESSOR_NAME NAME, RESULTLEN, IERROR CHARACTER *(*) NAME INTEGER RESULTLEN, IERROR MPI 9 MPI_GET_PROCESSOR_NAME MPI_GET_PROCESSOR_NAME MPI_GET_VERSION(version, subversion) OUT version OUT subversion int MPI_Get_version(int * version, int * subversion) MPI_GET_VERSION(VERSION, SUBVERSION,IERROR) INTEGER VERSION, SUBVERSION, IERROR MPI 10 MPI_GET_VERSION MPI_GET_VERSION MPI version subversion MPI 38

56 program main include 'mpif.h' character*(mpi_max_processor_name) name integer resultlen, version, subversion, ierr C call MPI_Init( ierr ) name = " " C C C call MPI_Get_processor_name( name, resultlen, ierr ) name resultlen call MPI_GET_VERSION(version, subversion,ierr) MPI errs = 0 do i=resultlen+1, MPI_MAX_PROCESSOR_NAME if (name(i:i).ne. " ") then name resultlen errs = errs + 1 endif enddo if (errs.gt. 0) then print *, 'Non-blanks after name' else print *, name, " MPI version",version, ".", subversion endif call MPI_Finalize( ierr ) end 12 MPI 7.3 MPI MPI_INIT MPI MPI_INITALIZED MPI_INIT MPI_INITALIZED(flag) OUT flag MPI_INIT int MPI_Initialized(int *flag) MPI_INITALIZED(FLAG, IERROR) LOGICAL FLAG INTEGER IERROR MPI 11 MPI_INITALIZED 39

57 MPI_INITALIZED MPI_INIT flag=true flag=false MPI MPI MPI_ABORT(comm, errorcode) IN comm IN errorcode int MPI_Abort(MPI_Comm comm, int errorcode) MPI_ABORT(COMM, ERRORCODE, IERROR) INTEGER COMM, ERRORCODE, IERROR MPI 12 MPI_ABORT MPI_ABORT comm master #include "mpi.h" #include <stdio.h> /* masternode == 0 masternode!= 0 */ int main( int argc, char **argv ) { int node, size, i; int masternode = 0; /* */ MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); MPI_Comm_size(MPI_COMM_WORLD, &size); /* */ for (i=1; i<argc; i++) { fprintf(stderr,"myid=%d,procs=%d,argv[%d]=%s\n",node,size,i,argv[i]); if (argv[i] && strcmp( "lastmaster", argv[i] ) == 0) { masternode = size-1; /* master*/ } } if(node == masternode) { /* master */ fprintf(stderr,"myid=%d is masternode Abort!\n",node); MPI_Abort(MPI_COMM_WORLD, 99); } 40

58 } else { /* master */ fprintf(stderr,"myid=%d is not masternode Barrier!\n",node); MPI_Barrier(MPI_COMM_WORLD); } MPI_Finalize(); 13 MPI N-1 19 #include <stdio.h> #include "mpi.h" int main( argc, argv ) int argc; char **argv; { int rank, value, size; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); /* */ do { /* */ 41

59 if (rank == 0) { fprintf(stderr, "\nplease give new value="); /* 0 */ scanf( "%d", &value ); fprintf(stderr,"%d read <-<- (%d)\n",rank,value); if (size>1) { MPI_Send( &value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD ); fprintf(stderr,"%d send (%d)->-> %d\n", rank,value,rank+1); /* */ } } else { MPI_Recv( &value, 1, MPI_INT, rank - 1, 0, MPI_COMM_WORLD, &status ); /* */ fprintf(stderr,"%d receive (%d)<-<- %d\n",rank,value,rank-1); if (rank < size - 1) { MPI_Send( &value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD ); fprintf(stderr,"%d send (%d)->-> %d\n", rank,value,rank+1); /* */ } } MPI_Barrier(MPI_COMM_WORLD); /* */ } while ( value>=0); MPI_Finalize( ); }

60 Please give new value=76 0 read <-<- (76) 0 send (76)->-> 1 1 receive (76)<-<- 0 1 send (76)->-> 2 2 receive (76)<-<- 1 2 send (76)->-> 3 3 receive (76)<-<- 2 3 send (76)->-> 4 4 receive (76)<-<- 3 4 send (76)->-> 5 5 receive (76)<-<- 4 5 send (76)->-> 6 6 receive (76)<-<- 5 Please give new value=-3 0 read <-<- (-3) 0 send (-3)->-> 1 1 receive (-3)<-<- 0 2 receive (-3)<-<- 1 3 receive (-3)<-<- 2 4 receive (-3)<-<- 3 4 send (-3)->-> 5 5 receive (-3)<-<- 4 6 receive (-3)<-<- 5 1 send (-3)->-> 2 2 send (-3)->-> 3 3 send (-3)->-> 4 5 send (-3)->->

61 0 hello hello hello hello hello 1 2 hello 21 #include "mpi.h" #include <stdio.h> #include <stdlib.h> void Hello( void ); int main(int argc, char *argv[]) { int me, option, namelen, size; char processor_name[mpi_max_processor_name]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD,&me); MPI_Comm_size(MPI_COMM_WORLD,&size); /* */ if (size < 2) { /* 2 */ fprintf(stderr, "systest requires at least 2 processes" ); MPI_Abort(MPI_COMM_WORLD,1); } MPI_Get_processor_name(processor_name,&namelen); /* */ fprintf(stderr,"process %d is alive on %s\n", me, processor_name); MPI_Barrier(MPI_COMM_WORLD); /* */ Hello(); /* */ MPI_Finalize(); } 44

62 void Hello( void ) /* */ { int nproc, me; int type = 1; int buffer[2], node; MPI_Status status; MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nproc); /* */ if (me == 0) { /* 0 */ printf("\nhello test from all to all\n"); fflush(stdout); } for (node = 0; node<nproc; node++) { /* */ if (node!= me) { /* */ buffer[0] = me; /* */ buffer[1] = node; /* */ MPI_Send(buffer, 2, MPI_INT, node, type, MPI_COMM_WORLD); /* */ MPI_Recv(buffer, 2, MPI_INT, node, type, MPI_COMM_WORLD, &status); /* */ if ( (buffer[0]!= node) (buffer[1]!= me) ) { /* */ (void) fprintf(stderr, "Hello: %d!=%d or %d!=%d\n", buffer[0], node, buffer[1], me); printf("mismatch on hello process ids; node = %d\n", node); } printf("hello from %d to %d\n", me, node); /* */ fflush(stdout); } } } 15 45

63 7.6 tag 22 ROOT i N-1 ROOT ROOT 0 22 #include "mpi.h" #include <stdio.h> int main(argc, argv) int argc; char **argv; { int rank, size, i, buf[1]; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); if (rank == 0) { for (i=0; i<100*(size-1); i++) { MPI_Recv( buf, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status ); printf( "Msg=%d from %d with tag %d\n", buf[0], status.mpi_source, status.mpi_tag ); } } else { for (i=0; i<100; i++) buf[0]=rank+i; MPI_Send( buf, 1, MPI_INT, 0, i, MPI_COMM_WORLD ); } MPI_Finalize(); } 16 46

64 7.7 MPI MPI 17 CALL MPI_COMM_RANK(comm, rank, ierr) IF (rank.eq.0) THEN CALL MPI_RECV(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) CALL MPI_SEND(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) ELSE IF( rank.eq. 1) CALL MPI_RECV(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) CALL MPI_SEND(sendbuf, count, MPI_REAL, 0, tag, comm, ierr) END IF

65 24 CALL MPI_COMM_RANK(comm, rank, ierr) IF (rank.eq.0) THEN CALL MPI_SEND(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) CALL MPI_RECV(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) ELSE rank.eq.1 CALL MPI_SEND(sendbuf, count, MPI_REAK, 0, tag, comm, status, ierr) CALL MPI_RECV(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) END IF MPI

66 CALL MPI_COMM_RANK(comm, rank, ierr) IF (rank.eq.0) THEN CALL MPI_SEND(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) CALL MPI_RECV(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) ELSE rank.eq. 1 CALL MPI_RECV(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) CALL MPI_SEND(sendbuf, count, MPI_REAL, 0, tag, comm, ierr) END IF C A A D A D A D B C B C A C D B 49

67 7.8 MPI MPI MPI 50

68 51 8 MPI MPI MPI MPI MPI Jacobi MPI MPI MPI MPI SPMD MPI MPMD MPMD SPMD MPI SPMD SPMD SPMD SPMD SPMD SPMD 8.1 MPI Jacobi Jacobi 20 Jacobi Jacobi

69 REAL A(N+1,N+1), B(N+1,N+1) DO K=1,STEP DO J=1,N DO I=1,N B(I,J)=0.25*(A(I-1,J)+A(I+1,J)+A(I,J+1)+A(I,J-1)) END DO END DO DO J=1,N DO I=1,N A(I,J)=B(I,J) END DO END DO 20 Jacobi MPI Jacobi Jacobi M M A(M,M) M=4*N 0 A(M,1:N) 1 A(M,N+1:2*N), 3 A(M,2*N+1:3*N) 3 A(M,3*N+1:M) 1 52

70 M*N N Jacobi 27 FORTRAN Jacobi C program main implicit none include 'mpif.h' integer totalsize,mysize,steps parameter (totalsize=16) parameter (mysize=totalsize/4,steps=10) C integer n, myid, numprocs, i, j,rc real a(totalsize,mysize+2),b(totalsize,mysize+2) integer begin_col,end_col,ierr integer status(mpi_status_size) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) 53

71 print *, "Process ", myid, " of ", numprocs, " is alive" C do j=1,mysize+2 do i=1,totalsize a(i,j)=0.0 end do end do if (myid.eq. 0) then do i=1,totalsize a(i,2)=8.0 end do end if if (myid.eq. 3) then do i=1,totalsize a(i,mysize+1)=8.0 end do end if do i=1,mysize+2 a(1,i)=8.0 a(totalsize,i)=8.0 end do C Jacobi do n=1,steps C C C C if (myid.lt. 3) then call MPI_RECV(a(1,mysize+2),totalsize,MPI_REAL,myid+1,10, * MPI_COMM_WORLD,status,ierr) end if if ((myid.gt. 0) ) then call MPI_SEND(a(1,2),totalsize,MPI_REAL,myid-1,10, * MPI_COMM_WORLD,ierr) end if if (myid.lt. 3) then call MPI_SEND(a(1,mysize+1),totalsize,MPI_REAL,myid+1,10, * MPI_COMM_WORLD,ierr) end if if (myid.gt. 0) then call MPI_RECV(a(1,1),totalsize,MPI_REAL,myid-1,10, 54

72 * MPI_COMM_WORLD,status,ierr) end if begin_col=2 end_col=mysize+1 if (myid.eq. 0) then begin_col=3 endif if (myid.eq. 3) then end_col=mysize endif do j=begin_col,end_col do i=2,totalsize-1 b(i,j)=(a(i,j+1)+a(i,j-1)+a(i+1,j)+a(i-1,j))*0.25 end do end do do j=begin_col,end_col do i=2,totalsize-1 a(i,j)=b(i,j) end do end do end do do i=2,totalsize-1 print *, myid,(a(i,j),j=begin_col,end_col) end do call MPI_Finalize(rc) end 21 MPI_SEND MPI_RECV Jacobi Jacobi Jacobi MPI MPI 55

73 MPI_SENDRECV(sendbuf,sendcount,sendtype,dest,sendtag,recvbuf,recvcount, recvtype, source,recvtag,comm,status) IN sendbuf ( ) IN sendcount ( ) IN sendtype ( ) IN dest ( ) IN sendtag ( ) OUT recvbuf ( ) IN recvcount ( ) IN recvtype ( ) IN source ( ) IN recvtag ( ) IN comm ( ) OUT status (status) int MPI_Sendrecv(void *sendbuf, int sendcount,mpi_datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status) MPI_SENDRECV(SENDBUF, SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVBUF, RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM, STATUS, IERROR) <type> SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVCOUNT, RECVTYPE,SOURCE, RECVTAG, COMM,STATUS(MPI_STATUS_SIZE), IERROR MPI 13 MPI_SENDRECV MPI_SENDRECV MPI_SENDRECV_REPLACE MPI_SENDRECV MPI_SENDRECV_REPLACE MPI_SENDRECV 56

74 MPI_SENDRECV_REPLACE(buf,count,datatype,dest,sendtag,source,recvtag,comm, status) INOUT buf ( ) IN count ( ) IN datatype ( ) IN dest ( ) IN sendtag ( ) IN source ( ) IN recvtag ( ) IN comm ( ) OUT status (status) int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest, int sendtag, int source,int recvtag, MPI_Comm comm, MPI_Status *status) MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG, COMM, STATUS, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR MPI 14 MPI_SENDRECV_REPLACE Jacobi MPI_SENDRECV MPI_SENDRECV Jacobi 57

75 22 MPI_SENDRECV program main implicit none include 'mpif.h' integer totalsize,mysize,steps parameter (totalsize=16) parameter (mysize=totalsize/4,steps=10) integer n, myid, numprocs, i, j,rc real a(totalsize,mysize+2),b(totalsize,mysize+2) integer begin_col,end_col,ierr integer status(mpi_status_size) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) print *, "Process ", myid, " of ", numprocs, " is alive" C do j=1,mysize+2 do i=1,totalsize a(i,j)=0.0 end do end do if (myid.eq. 0) then do i=1,totalsize a(i,2)=8.0 end do end if if (myid.eq. 3) then do i=1,totalsize a(i,mysize+1)=8.0 end do end if do i=1,mysize+2 a(1,i)=8.0 a(totalsize,i)=8.0 end do C 58

76 do n=1,steps C C if (myid.eq. 0) then call MPI_SEND(a(1,mysize+1),totalsize,MPI_REAL,myid+1,10, * MPI_COMM_WORLD,ierr) else if (myid.eq. 3) then call MPI_RECV(a(1,1),totalsize,MPI_REAL,myid-1,10, * MPI_COMM_WORLD,status,ierr) else call MPI_SENDRECV(a(1,mysize+1),totalsize,MPI_REAL,myid+1,10, * a(1,1),totalsize,mpi_real,myid-1,10, * MPI_COMM_WORLD,status,ierr) end if if (myid.eq. 0) then call MPI_RECV(a(1,mysize+2),totalsize,MPI_REAL,myid+1,10, * MPI_COMM_WORLD,status,ierr) else if (myid.eq. 3) then call MPI_SEND(a(1,2),totalsize,MPI_REAL,myid-1,10, * MPI_COMM_WORLD,ierr) else call MPI_SENDRECV(a(1,2),totalsize,MPI_REAL,myid-1,10, * a(1,mysize+2),totalsize,mpi_real,myid+1,10, * MPI_COMM_WORLD,status,ierr) end if begin_col=2 end_col=mysize+1 if (myid.eq. 0) then begin_col=3 endif if (myid.eq. 3) then end_col=mysize endif do j=begin_col,end_col do i=2,totalsize-1 b(i,j)=(a(i,j+1)+a(i,j-1)+a(i+1,j)+a(i-1,j))*0.25 end do end do do j=begin_col,end_col do i=2,totalsize-1 a(i,j)=b(i,j) 59

77 end do end do end do do i=2,totalsize-1 print *, myid,(a(i,j),j=begin_col,end_col) end do call MPI_Finalize(rc) end 22 MPI_SENDRECV Jacobi Jacobi MPI_PROC_NULL MPI MPI_PRC_NULL MPI_PROC_NULL Jacobi program main implicit none include 'mpif.h' integer totalsize,mysize,steps parameter (totalsize=16) parameter (mysize=totalsize/4,steps=10) integer n, myid, numprocs, i, j,rc real a(totalsize,mysize+2),b(totalsize,mysize+2) integer begin_col,end_col,ierr integer left,right,tag1,tag2 integer status(mpi_status_size) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) print *, "Process ", myid, " of ", numprocs, " is alive" 60

78 C do j=1,mysize+2 do i=1,totalsize a(i,j)=0.0 end do end do if (myid.eq. 0) then do i=1,totalsize a(i,2)=8.0 end do end if if (myid.eq. 3) then do i=1,totalsize a(i,mysize+1)=8.0 end do end if do i=1,mysize+2 a(1,i)=8.0 a(totalsize,i)=8.0 end do C C C C tag1=3 tag2=4 if (myid.gt. 0) then left=myid-1 else left=mpi_proc_null end if if (myid.lt. 3) then right=myid+1 else right=mpi_proc_null end if Jacobi do n=1,steps call MPI_SENDRECV(a(1,mysize+1),totalsize,MPI_REAL,right,tag1, * a(1,1),totalsize,mpi_real,left,tag1, * MPI_COMM_WORLD,status,ierr) call MPI_SENDRECV(a(1,2),totalsize,MPI_REAL,left,tag2, * a(1,mysize+2),totalsize,mpi_real,right,tag2, * MPI_COMM_WORLD,status,ierr) 61

79 begin_col=2 end_col=mysize+1 if (myid.eq. 0) then begin_col=3 endif if (myid.eq. 3) then end_col=mysize endif do j=begin_col,end_col do i=2,totalsize-1 b(i,j)=(a(i,j+1)+a(i,j-1)+a(i+1,j)+a(i-1,j))*0.25 end do end do do j=begin_col,end_col do i=2,totalsize-1 a(i,j)=b(i,j) end do end do end do do i=2,totalsize-1 print *, myid,(a(i,j),j=begin_col,end_col) end do call MPI_Finalize(rc) end 23 Jacobi 8.2 MPI C=A B 29 B A B A A 62

80 A B 29 program main include "mpif.h" integer MAX_ROWS,MAX_COLS, rows, cols parameter (MAX_ROWS=1000, MAX_COLS=1000) double precision a(max_rows, MAX_COLS),b(MAX_COLS),c(MAX_COLS) double precision buffer (MAX_COLS), ans integer myid, master, numprocs, ierr, status(mpi_status_size) integer i,j,numsent, numrcvd, sender integer anstype, row call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr) master=0 rows=100 cols=100 C if (myid.eq. master) then A B do i=1,cols b(i)=1 do j=1,rows a(i,j)=i end do end do numsent=0 numrcvd=0 63

81 C C C C C C C C C C C C B call MPI_BCAST(b,cols,MPI_DOUBLE_PRECISION,master, $ MPI_COMM_WORLD, ierr) A numprocs-1 do i=1,min(numprocs-1,rows) do j=1,cols buffer(j)=a(i,j) end do call MPI_SEND(buffer, cols, MPI_DOUBLE_PRECISION,i, $ i,mpi_comm_world, ierr) numsent=numsent+1 end do do i=1,row call MPI_RECV(ans, 1,MPI_DOUBLE_PRECISION, MPI_ANY_SOURCE, $ MPI_ANY_TAG,MPI_COMM_WORLD, status, ierr) sender=status(mpi_source) anstype=status(mpi_tag) C c(anstype)=ans if (numsent.lt. rows) then do j=1,cols buffer(j)=a(numsent+1,j) end do call MPI_SEND(buffer,cols, MPI_DOUBLE_PRECISION, sender, $ numsent+1,mpi_comm_world, ierr) numsent=numsent+1 else 0 call MPI_SEND(1.0,0,MPI_DOUBLE_PRECISION,sender, $ 0, MPI_COMM_WORLD, ierr) end if else B call MPI_BCAST(b,cols,MPI_DOUBLE_PRECISION,master, $ MPI_COMM_WORLD, ierr) 64

82 C A 90 call MPI_RECV(buffer,cols, MPI_DOUBLE_PRECISION, master, $ MPI_ANY_TAG, MPI_COMM_WORLD, status,ierr) C 0 if (status(mpi_tag).ne. 0) then row=status(mpi_tag) ans=0.0 do i=1,cols ans=ans+buffer(i)*b(i) end do C call MPI_SEND(ans, 1, MPI_DOUBLE_PRECISION, master, row, $ MPI_COMM_WORLD, ierr) goto 90 end if endif call MPI_FINALIZE(ierr) end

83 #include <stdio.h> #include "mpi.h" int main( argc, argv ) int argc; char **argv; { int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if (rank == 0) master_io(); /* 0 */ else slave_io(); /* */ MPI_Finalize( ); } #define MSG_EXIT 1 #define MSG_PRINT_ORDERED 2 /* */ #define MSG_PRINT_UNORDERED 3 /* */ /* */ int master_io( void ) { int i,j, size, nslave, firstmsg; char buf[256], buf2[256]; MPI_Status status; MPI_Comm_size( MPI_COMM_WORLD, &size );/* */ nslave = size - 1;/* */ while (nslave > 0) {/* */ MPI_Recv( buf, 256, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status );/* */ switch (status.mpi_tag) { case MSG_EXIT: nslave--; break;/* 1*/ case MSG_PRINT_UNORDERED:/* */ fputs( buf, stdout ); break; case MSG_PRINT_ORDERED:/* */ firstmsg = status.mpi_source; for (i=1; i<size; i++) {/* */ if (i == firstmsg) fputs( buf, stdout );/* */ 66

84 else {/* */ MPI_Recv( buf2, 256, MPI_CHAR, i, MSG_PRINT_ORDERED, MPI_COMM_WORLD, &status );/* */ fputs( buf2, stdout ); } } break; } } } /* */ int slave_io( void ) { char buf[256]; int rank; MPI_Comm_rank( MPI_COMM_WORLD, &rank );/* */ sprintf( buf, "Hello from slave %d ordered print\n", rank ); MPI_Send( buf, strlen(buf) + 1, MPI_CHAR, 0, MSG_PRINT_ORDERED, MPI_COMM_WORLD );/* */ sprintf( buf, "Goodbye from slave %d, ordered print\n", rank ); MPI_Send( buf, strlen(buf) + 1, MPI_CHAR, 0, MSG_PRINT_ORDERED, MPI_COMM_WORLD );/* */ sprintf( buf, "I'm exiting (%d),unordered print\n", rank ); MPI_Send( buf, strlen(buf) + 1, MPI_CHAR, 0, MSG_PRINT_UNORDERED, MPI_COMM_WORLD );/* */ MPI_Send( buf, 0, MPI_CHAR, 0, MSG_EXIT, MPI_COMM_WORLD );/* */ } Hello from slave 1,ordered print Hello from slave 2,ordered print Hello from slave 3,ordered print Hello from slave 4,ordered print Hello from slave 5,ordered print Hello from slave 6,ordered print Hello from slave 7,ordered print Hello from slave 8,ordered print Hello from slave 9,ordered print 67

85 Goodbye from slave 1,ordered print Goodbye from slave 2,ordered print Goodbye from slave 3,ordered print Goodbye from slave 4,ordered print Goodbye from slave 5,ordered print Goodbye from slave 6,ordered print Goodbye from slave 7,ordered print Goodbye from slave 8,ordered print Goodbye from slave 9,ordered print I'm exiting (1),unordered print I'm exiting (3),unordered print I'm exiting (4),unordered print I'm exiting (7),unordered print I'm exiting (8),unordered print I'm exiting (9),unordered print I'm exiting (2),unordered print I'm exiting (5),unordered print I'm exiting (6),unordered print MPI MPI MPI MPI 68

86 9 MPI MPI standard mode bufferedmode synchronous-mode ready-mode MPI MPI 6 MPI MPI_SEND MPI_RECV MPI_BSEND MPI_SSEND MPI_RSEND MPI B S R 9.1 MPI 32 MPI MPI MPI 69

87 MPI_BSEND(buf, count, datatype, dest, tag, comm) IN buf ( ) IN count ( ) IN datatype ( ) IN dest ( ) IN tag ( ) IN comm ( ) int MPI_Bsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) MPI_BSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) <type>buf(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR MPI 15 MPI_BSEND MPI_BSEND MPI_SEND 70

88 33 MPI MPI MPI_BUFFER_ATTACH( buffer, size) IN buffer ( ) IN size ( ) int MPI_Buffer_attach( void* buffer, int size) MPI_BUFFER_ATTACH( BUFFER, SIZE, IERROR) <type>bufferr(*) INTEGER SIZE, IERROR MPI 16 MPI_BUFFER_ATTACH MPI_BUFFER_ATTACH size MPI MPI_BUFFER_DETACH( buffer, size) OUT buffer ( ) OUT size ( ) int MPI_Buffer_detach( void** buffer, int* size) MPI_BUFFER_DETACH( BUFFER, SIZE, IERROR) <type>buffer(*) INTEGER SIZE, IERROR MPI 17 MPI_BUFFER_DETACH MPI_BUFFER_DETACH size buffer 5 71

89 #include <stdio.h> #include <stdlib.h> #include "mpi.h" #define SIZE 6 /* */ static int src = 0; static int dest = 1; void Generate_Data ( double *, int ); /* */ void Normal_Test_Recv ( double *, int ); /* */ void Buffered_Test_Send ( double *, int ); /* */ void Generate_Data(buffer, buff_size) double *buffer; int buff_size; { int i; for (i = 0; i < buff_size; i++) buffer[i] = (double)i+1; } void Normal_Test_Recv(buffer, buff_size) double *buffer; int buff_size; { int i, j; MPI_Status Stat; double *b; b = buffer; /* buff_size - 1 */ MPI_Recv(b, (buff_size - 1), MPI_DOUBLE, src, 2000, MPI_COMM_WORLD, &Stat); fprintf(stderr,"standard receive a message of %d data\n",buff_size-1); for (j=0;j<buff_size-1;j++) fprintf(stderr," buf[%d]=%f\n",j,b[j]); b += buff_size - 1; /* */ MPI_Recv(b, 1, MPI_DOUBLE, src, 2000, MPI_COMM_WORLD, &Stat); fprintf(stderr,"standard receive a message of one data\n"); fprintf(stderr,"buf[0]=%f\n",*b); 72

90 } void Buffered_Test_Send(buffer, buff_size) double *buffer; int buff_size; { int i, j; void *bbuffer; int size; fprintf(stderr,"buffered send message of %d data\n",buff_size-1); for (j=0;j<buff_size-1;j++) fprintf(stderr,"buf[%d]=%f\n",j,buffer[j]); /* buff_size - 1 */ MPI_Bsend(buffer, (buff_size - 1), MPI_DOUBLE, dest, 2000, MPI_COMM_WORLD); buffer += buff_size - 1; fprintf(stderr,"buffered send message of one data\n"); fprintf(stderr,"buf[0]=%f\n",*buffer); /* 1 */ MPI_Bsend(buffer, 1, MPI_DOUBLE, dest, 2000, MPI_COMM_WORLD); /* */ MPI_Buffer_detach( &bbuffer, &size ); /* */ MPI_Buffer_attach( bbuffer, size ); } int main(int argc, char **argv) { int rank; /* My Rank (0 or 1) */ double buffer[size], *tmpbuffer, *tmpbuf; int tsize, bsize; char *Current_Test = NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == src) /* */ Generate_Data(buffer, SIZE);/* */ MPI_Pack_size( SIZE, MPI_DOUBLE, MPI_COMM_WORLD, &bsize ); /* SIZE MPI_DOUBLE */ tmpbuffer = (double *) malloc( bsize + 2*MPI_BSEND_OVERHEAD ); /* */ 73

91 if (!tmpbuffer) { fprintf( stderr, "Could not allocate bsend buffer of size %d\n", bsize ); MPI_Abort( MPI_COMM_WORLD, 1 ); } MPI_Buffer_attach( tmpbuffer, bsize + MPI_BSEND_OVERHEAD ); /* MPI MPI */ Buffered_Test_Send(buffer, SIZE);/* */ MPI_Buffer_detach( &tmpbuf, &tsize );/* */ } else if (rank == dest) { /* */ Normal_Test_Recv(buffer, SIZE);/* */ } } else { fprintf(stderr, "*** This program uses exactly 2 processes! ***\n"); /* */ MPI_Abort( MPI_COMM_WORLD, 1 ); } MPI_Finalize(); MPI_SSEND(buf, count, datatype, dest, tag, comm) IN buf ( ) IN count ( ) IN datatype ( ) IN dest ( ) IN tag ( ) IN comm ( ) int MPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) MPI_SSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR) MPI 18 MPI_SSEND 34 74

92 tag 1 2 #include <stdio.h> #include "mpi.h" #define SIZE 10 /* Amount of time in seconds to wait for the receipt of the second Ssend message */ static int src = 0; static int dest = 1; int main( int argc, char **argv) { int rank; /* My Rank (0 or 1) */ int act_size = 0; int flag, np, rval, i; int buffer[size]; MPI_Status status, status1, status2; int count1, count2; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size( MPI_COMM_WORLD, &np ); if (np!= 2) { fprintf(stderr, "*** This program uses exactly 2 processes! ***\n"); MPI_Abort( MPI_COMM_WORLD, 1 ); } act_size = 5;/* */ if (rank == src) { /* */ act_size = 1; MPI_Ssend( buffer, act_size, MPI_INT, dest, 1, MPI_COMM_WORLD ); /* tag 1*/ fprintf(stderr,"mpi_ssend %d data,tag=1\n", act_size); 75

93 } act_size = 4; MPI_Ssend( buffer, act_size, MPI_INT, dest, 2, MPI_COMM_WORLD ); /* 4 tag 2*/ fprintf(stderr,"mpi_ssend %d data,tag=2\n", act_size); } else if (rank == dest) {/* */ MPI_Recv( buffer, act_size, MPI_INT, src, 1, MPI_COMM_WORLD, &status1 ); /* act_size tag 1*/ MPI_Recv( buffer, act_size, MPI_INT, src, 2, MPI_COMM_WORLD, &status2 ); /* act_size tag 2*/ MPI_Get_count( &status1, MPI_INT, &count1 );/* 1 */ fprintf(stderr,"receive %d data,tag=%d\n",count1,status1.mpi_tag); MPI_Get_count( &status2, MPI_INT, &count2 );/* 2 */ fprintf(stderr,"receive %d data,tag=%d\n",count2,status2.mpi_tag); } MPI_Finalize(); MPI_RSEND(buf, count, datatype, dest, tag, comm) IN buf ( ) IN count ( ) IN datatype ( ) IN dest ( ) IN tag ( ) IN comm ( ) int MPI_Rsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) MPI_RSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) <type>buf(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR MPI 19 MPI_RSEND 35 76

94 C program rsendtest include 'mpif.h' integer ierr call MPI_Init(ierr) call test_rsend 77

95 call MPI_Finalize(ierr) end subroutine test_rsend include 'mpif.h' integer TEST_SIZE parameter (TEST_SIZE=2000) integer ierr, prev, next, count, tag, index, i, outcount, $ requests(2), indices(2), rank, size, $ status(mpi_status_size), statuses(mpi_status_size,2) logical flag real send_buf( TEST_SIZE ), recv_buf ( TEST_SIZE ) call MPI_Comm_rank( MPI_COMM_WORLD, rank, ierr ) call MPI_Comm_size( MPI_COMM_WORLD, size, ierr ) if (size.ne. 2) then print *, 'This test requires exactly 2 processes' call MPI_Abort( 1, MPI_COMM_WORLD, ierr ) endif C C C C C C next = rank + 1 if (next.ge. size) next = 0 prev = rank - 1 if (prev.lt. 0) prev = size - 1 if (rank.eq. 0) then print *, " Rsend Test " end if tag = 1456 count = TEST_SIZE / 3 if (rank.eq. 0) then call MPI_Recv( MPI_BOTTOM, 0, MPI_INTEGER, next, tag, $ MPI_COMM_WORLD, status, ierr ) 0 0 MPI_BOTTOM MPI print *,"Process ",rank," post Ready send" call MPI_Rsend(send_buf, count, MPI_REAL, next, tag, $ MPI_COMM_WORLD, ierr) else print *, "process ",rank," post a receive call" call MPI_Irecv(recv_buf, TEST_SIZE, MPI_REAL, 78

96 C C C C C $ MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, $ requests(1), ierr) 1 call MPI_Send( MPI_BOTTOM, 0, MPI_INTEGER, next, tag, $ MPI_COMM_WORLD, ierr ) MPI_Irecv call MPI_Wait( requests(1), status, ierr ) print *,"Process ", rank," Receive Rsend message from ", $ status(mpi_source) end if end 28 MPI 79

97 10 MPICH MPI MPI MPICH MPICH Linux NT MPI MPICH MPI MPICH MPI MPICH MPI MPICH MPI MPICH Argonne National Laboratory Mississippi State University IBM MPI 10.1 Linux MPICH MPICH mpich.tar.gz mpich.tar.z mpich.tar.gz gunzip ftp ftp://ftp.mcs.anl.org/pub/mpi ftp://ftp.mcs.anl.org/pub/mpisplit ftp://ftp.mcs.anl.org/pub/mpisplit cat 2 tar zxvf mpich.tar.gz gunzip c mpich.tar.gz tar xovf zcat mpich.tar.z tar xovf uncompress mpich.tar.z tar xvf mpich.tar 3 mpich cd mpich Makefile./configure prefix./configure prefix=/usr/local/mpich make configure MPI make MPI 80

98 5 cd examples/basic make cpi../../bin/mpirun np 4 cpi $(HOME)/mpich make testing 6 mpich make install prefix $ HOME /mpich-1.2.1/mpi-2-c++ mpich C++ $ HOME /mpich-1.2.1/bin mpich $ HOME /mpich-1.2.1/doc mpich $ HOME /mpich-1.2.1/examples mpich $ HOME /mpich-1.2.1/f90modules mpich Fortran90 $ HOME /mpich-1.2.1/include mpich $ HOME /mpich-1.2.1/lib mpich $ HOME /mpich-1.2.1/man mpich $ HOME /mpich-1.2.1/mpe mpich $ HOME /mpich-1.2.1/mpid mpich $ HOME /mpich-1.2.1/romio mpich I/O $ HOME /mpich-1.2.1/share upshot jumpshot $ HOME /mpich-1.2.1/src mpich $ HOME /mpich-1.2.1/util mpich $ HOME /mpich-1.2.1/www mpich MPI 81

99 mpicc/mpicc/mpif77/mpif90 mpicc C++ MPI mpicc C mpif77 mpif90 FORTRAN77 Fortran90 MPI MPI mpicc C -mpilog MPE log -mpitrace MPI -mpilog -mpianim -show -help -echo C++/C/FORTRAN77/Fortran MPI SPMD Single Program Multiple Data MPI MASTER/SLAVER MPI MPI C FORTRAN MPI 1 2 N MPI 37 MPI 82

100 MPI 37 1 MPI MPI 2 3 mpirun MPI MPI MPI /etc/hosts.equiv MPI tp5 16 MPI tp1,tp2,...,tp16 tp1,...,tp16 /etc/hosts.equiv tp5 tp5 /etc/hosts.equiv.rhosts MPI home.rhosts tp1 pact tp5 pact tp1 pact home.rhosts tp5 pact MPI MPI mpirun np N program N program MPI $(HOME)/mpich/util/machines/machines.LINUX tp5.cs.tsinghua.edu.cn tp1.cs.tsinghua.edu.cn tp2.cs.tsinghua.edu.cn tp3.cs.tsinghua.edu.cn tp4.cs.tsinghua.edu.cn tp8.cs.tsinghua.edu.cn 83

101 6 MPI tp5.cs.tsinghua.edu.cn $(HOME)/mpich/examples/basic/ mpirun np 6 cpi {tp1,tp2,tp3,tp4,tp8} $(HOME)/mpich/examples/basic/ cpi mashines.linux mpirun machinefile hosts np 6 cpi hosts mpirun p4pg pgfile cpi pgfile 38 < > < > < > < > < > < > < > < > < > tp5 0 /home/pact/mpich/examples/basic/cpi tp1 1 /home/pact/mpich/examples/basic/cpi tp2 1 /home/pact/mpich/examples/basic/cpi tp3 1 /home/pact/mpich/examples/basic/cpi tp4 1 /home/pact/mpich/examples/basic/cpi tp8 1 /home/pact/mpich/examples/basic/cpi 39 0 tp5 0 tp5 MPI mpirun MPI MPI MPI 84

102 mpirun -np <number of processes> <program name and arguments> MPI MPI chameleon ( chameleon/pvm, chameleon/p4,...) meiko ( meiko ) paragon (paragon ch_nx ) p4 ( ch_p4 ) ibmspx (IBM SP2 ch_eui) anlspx (ANLs SPx ch_eui) ksr (KSR 1 2 ch_p4) sgi_mp (SGI ch_shmem) cray_t3d (Cray T3D t3d) smp (SMPs ch_shmem) execer ( ) MPI MPI mpirun [mpirun_options...] <progname> [options...] -arch <architecture> ${MPIR_HOME}/util/machines machines.<arch> -h -machine <machine name> use startup procedure for <machine name> -machinefile <machine-file name> -np <np> -nolocal -stdin filename -t -v -dbx dbx -gdb gdb -xxgdb xxgdb -tv totalview NEC - CENJU-3 -batch -stdout filename -stderr filename Nexus -nexuspg filename -np -nolocal -leave_pg -nexusdb filename Nexus -e execer -pg p4 execer -leave_pg P4 -p4pg filename -np -nolocal 85

103 -leave_pg -tcppg filename tcp -np nolocal -leave_pg -p4ssport num p4 num num=0 MPI_P4SSPORT MPI_USEP4SSPORT MPI_P4SSPORT -p4ssport 0 -mvhome home -mvback files -maxtime min -nopoll -mem value -cpu time CPU IBM SP2 -cac name ANL Intel Paragon -paragontype name -paragonname name shells -paragonpn name Paragon -arch -np MPI sun4 rs6000 sun4 2 rs mpirun -arch sun4 -np 2 -arch rs6000 -np 3 program sun4 program.sun4 rs6000 program.rs6000 %a mpirun -arch sun4 -np 2 -arch rs6000 -np 3 program.%a /tmp/me/sun4 /tmp/me/rs6000 mpirun -arch sun4 -np 2 -arch rs6000 -np 3 /tmp/me/%a/program mpiman MPI UNIX man Web HTML mpiman xman, X -xmosaic xmosaic Web -mosaic mosaic Web -netscape netscape Web -xman X xman -man man program ( mpiman -man MPI_Send) mpireconfig 86

104 make MPICH make mpireconfig filename filename filename.in 10.2 Windows NT MPICH NT MPICH MPICH.NT tcp/ip, VIA sockets VI MS Visual C Digital Fortran 6.0 FORTRAN MPI PMPI C FORTRAN ftp://ftp.mcs.anl.gov/pub/mpi/nt/mpich.nt all.zip setup MPICH NT c:\program Files\Argonne National Lab\MPICH.NT MPI launcher MPI sdk C/C++ MPI MS Visual C++ makefile project include [MPICH Home]\include Debug - /MTd Release - /MT Debug - ws2_32.lib mpichd.lib pmpichd.lib romiod.lib Release - ws2_32.lib mpich.lib pmpich.lib romio.lib pmpich*.lib MPI PMPI_ * lib [MPICH Home]\lib MPI build 87

105 FORTRAN FORTRAN Visual Fortran 6+ mpif.h Visual Fortran 6+ /iface:cref /iface:nomixed_str_len_arg C/C++ NT MPICH VIA NT MPICH Remote Shell Server MPIRun.exe Simple Launcher MPIRun.exe MPICH Remote Shell Server MPI DCOM server SYSTEM MPIRun Remote Shell Server MPIRun MPI Remote Shell Server MPIRun.exe MPI MPIRun -np MPIRun.exe c:\program Files\Argonne National Lab\MPICH.NT \RemoteShell\Bin MPI MPI MPIConfig MPIConfig c:\program Files\Argonne National Lab\MPICH.NT \RemoteShell\Bin MPI MPIConfig MPI Refresh: Find: Verify: DCOM server Set: "set HOSTS" MPIRun "set TEMP" remote shell service MPI C:\ 88

106 timeout Remote Shell Server MPIRun.exe MPI 40 MPIRun configfile [-logon] [args...] MPIRun -np #processes [-logon] [-env "var1=val1 var2=val2..."] executable [args...] MPIRun -localonly #processes [-env "var1=val1 var2=val2..."] executable [args...] NT MPI exe c:\somepath\myapp.exe \\host\share\somepath\myapp.exe [args arg1 arg2 arg3...] [env VAR1=VAL1 VAR2=VAL2... VARn=VALn] hosts hosta #procs [path\myapp.exe] hostb #procs [\\host\share\somepath\myapp2.exe] hostc #procs NT MPI 8 NT01 NT02... NT08 MPI testmpint c:\mpint 42 mpiconf1 exe c:\mpint\testmpint.exe hosts NT01 1 NT02 1 NT03 1 NT04 1 NT05 1 NT06 1 NT07 1 NT NT MPI 1 mpirun mpiconf1 testmpint 8 89

模板

模板 MPI MPI MPI MPI MPI MPI 4 18 9% 5 ? 6 ? 7 数 个数 数 个数 个数 个数 8 ccnuma; SMP MPP; Cluster 9 10 11 12 13 MPI MPI MPI MPI MPI? MPI MPI MPI MPI 15 MPI? MPI(Message Passing Interface ) 1994 5 MPI MPI MPI MPI C

More information

untitled

untitled MPICH anzhulin@sohu.com 1 MPICH for Microsoft Windows 1.1 MPICH for Microsoft Windows Windows NT4/2000/XP Professional Server Windows 95/98 TCP/IP MPICH MS VC++ 6.x MS VC++.NET Compaq Visual Fortran 6.x

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第四讲 消息传递编程接口 MPI 一 MPI 编程基础 主要内容 MPI 安装 程序编译与运行 MPI 编程基础 MPI 程序基本结构 MPI 数据类型 消息发送和接收 MPI 一些常用函数 MPI 介绍 Message Passing Interface 消息传递编程标准, 目前最为通用的并行编程方式 提供一个高效 可扩展 统一的并行编程环境 MPI 是一个库, 不是一门语言,MPI 提供库函数

More information

消息传递并行编程环境MPI.doc

消息传递并行编程环境MPI.doc 973 MPI PETS 8 15 8 16 8 17 MPI MPI MPI MPI 2 MPI PETS PETS 1 1971 7 1992 1997 1999 2 MPI MPI MPI 1 MPI MPI MPI 2 - u=f MPI 3 1 proess 1 2 2 CPU 4 send reeive barrier redution 1 2 3 CPU soket, 4 : API

More information

Parallel Programming with MPI

Parallel Programming  with MPI MPI 并行编程入门 中国科学院计算机网络信息中心超级计算中心 参考材料 张林波清华大学出版社莫则尧科学出版社都志辉清华大学出版社 消息传递平台 MPI 什么是 MPI (Message Passing Interface) 是函数库规范, 而不是并行语言 ; 操作如同库函数调用 是一种标准和规范, 而非某个对它的具体实现 (MPICH 等 ), 与编程语言无关 是一种消息传递编程模型, 并成为这类编程模型的代表

More information

Linux Linux Linux

Linux Linux Linux 2003 2003 8 28 http://lssc.cc.ac.cn/training2003 1 3 23 Linux 37 3.1............................................... 37 3.2 Linux..................................... 37 3.3 Linux..................................

More information

投影片 1

投影片 1 平行運算簡介 / 實例操作企鵝也會的 MPICH 研究員 : 鄧偉華 wade@nchc.org.tw 什麼是平行計算 傳統 : 單一程序 單一 CPU 什麼是平行計算 ( 續 ) 平行計算 程序切割 多 CPUs 為什麼要平行計算 簡省時間 解決大型問題 即時性 使用更多來自網路上的資源 使用大量 便宜 PCs 取代超級電腦 記憶體不足 平行計算種類 Flynn's taxonomy 多處理器架構

More information

第7章-并行计算.ppt

第7章-并行计算.ppt EFEP90 10CDMP3 CD t 0 t 0 To pull a bigger wagon, it is easier to add more oxen than to grow a gigantic ox 10t 0 t 0 n p Ts Tp if E(n, p) < 1 p, then T (n) < T (n, p) s p S(n,p) = p : f(x)=sin(cos(x))

More information

Microsoft PowerPoint - KN002.ppt

Microsoft PowerPoint - KN002.ppt MPI II 1300141 14114 16001630 1630 MPI 11 11 3 MPI MPI-110 MPI- SPMD Single Program/Instruction Multiple Data CPU 4 PE: Processing Element PE #0 Program Data #0 PE #1 Program Data #1 SPMD mpirun -np M

More information

chi@sccas.cn, chi@sc.cnic.cn http://lssc.cc.ac.cn/ http://www.sccas.cn/ http://www.scgrid.cn/ http://www.cngrid.org/ 2005 4 6 3 5 1.1............................ 5 1.2............................. 6 1.2.1..........................

More information

Microsoft PowerPoint - Tongji_MPI编程初步

Microsoft PowerPoint - Tongji_MPI编程初步 并行编程初步 张丹丹 上海超级计算中心 2011-3-4 提纲 引言 认识 MPI 编程 MPI 编程简介 实例 并行计算机体系架构 共享存储 (Shared Memory) 并行计算机体系架构 分布式存储 (Distributed Memory) 混合架构 (Hybrid) 并行计算机体系架构 并行编程模型 数据并行模型 相同的操作同时作用于不同的数据 共享变量模型 用共享变量实现并行进程间的通信

More information

30,000,000 75,000,000 75,000, (i) (ii) (iii) (iv)

30,000,000 75,000,000 75,000, (i) (ii) (iii) (iv) 30,000,000 75,000,000 75,000,000 24 (i) (ii) (iii) (iv) # * 1,800,000 1,800,000 15% 3,400,000 3,400,000 15% 4,200,000 4,200,000 10% 8,600,000 8,600,000 10% 12,600,000 12,600,000 88% 10% 16,000,000 16,000,000

More information

mannal

mannal 高 性 能 集 群 计 算 机 使 用 说 明 书 版 本 1.0.8 高 性 能 计 算 研 究 组 编 2008 年 3 月 12 日 第 1 页 共 30 页 高 性 能 集 群 计 算 机... 1 使 用 说 明 书... 1 高 性 能 计 算 集 群 使 用 说 明... 3 1. 集 群 系 统 概 述... 3 2. 使 用 方 法... 5 1. 登 录 方 法... 5 2.MPI

More information

2015年廉政公署民意調查

2015年廉政公署民意調查 報 告 摘 要 2015 年 廉 政 公 署 周 年 民 意 調 查 背 景 1.1 為 了 掌 握 香 港 市 民 對 貪 污 問 題 和 廉 政 公 署 工 作 的 看 法, 廉 政 公 署 在 1992 至 2009 年 期 間, 每 年 均 透 過 電 話 訪 問 進 行 公 眾 民 意 調 查 為 更 深 入 了 解 公 眾 對 貪 污 問 題 的 看 法 及 關 注, 以 制 訂 適 切

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

智力测试故事

智力测试故事 II 980.00 ... 1... 1... 1... 2... 2... 2... 3... 3... 3... 3... 4... 4... 5... 5... 6... 6... 7... 7... 8... 8... 8... 9... 9...10...10...10 I II...11...11...11...12...13...13...13...14...14...14...15...15...15...16...16...17...17...18...18...19...19...19...19...20...20...21...21...21

More information

大綱介紹 MPI 標準介紹 MPI 的主要目標 Compiler & Run 平行程式 MPICH 程式基本架構 點對點通訊 函數介紹 集體通訊 函數介紹

大綱介紹 MPI 標準介紹 MPI 的主要目標 Compiler & Run 平行程式 MPICH 程式基本架構 點對點通訊 函數介紹 集體通訊 函數介紹 MPI 平行程式設計 勁智數位科技股份有限公司 技術研發部林勝峰 sflin@infowrap.com.tw 大綱介紹 MPI 標準介紹 MPI 的主要目標 Compiler & Run 平行程式 MPICH 程式基本架構 點對點通訊 函數介紹 集體通訊 函數介紹 MPI (Message Passing Interface) Version1.0:June, 1994. Version1.1:June,

More information

Microsoft Word - John_Ch_1202

Microsoft Word - John_Ch_1202 新 约 圣 经 伴 读 约 翰 福 音 目 录 说 明..I 序 言 : 圣 经 中 神 圣 启 示 的 三 层.II 按 时 分 粮 的 原 则..VIII 纲 目 XI 第 一 章..1 第 二 章 13 第 三 章 25 第 四 章 37 第 五 章 49 第 六 章 61 第 七 章 73 第 八 章 85 第 九 章 97 第 十 章..109 第 十 一 章..121 第 十 二 章..133

More information

全唐诗50

全唐诗50 ... 1... 1... 2... 2... 3... 3... 3... 4... 4... 5... 5... 6... 6... 6... 7... 7... 7... 8... 8... 8... 9 I II... 9...10...10...10...11...11...11...12...12...12...13...14...14...15...15...16...16...16...17,...17...18...18...19...19...19

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

I. 1-2 II. 3 III. 4 IV. 5 V. 5 VI. 5 VII. 5 VIII. 6-9 IX. 9 X XI XII. 12 XIII. 13 XIV XV XVI. 16

I. 1-2 II. 3 III. 4 IV. 5 V. 5 VI. 5 VII. 5 VIII. 6-9 IX. 9 X XI XII. 12 XIII. 13 XIV XV XVI. 16 125-0834I/1405/GH I. 1-2 II. 3 III. 4 IV. 5 V. 5 VI. 5 VII. 5 VIII. 6-9 IX. 9 X. 10-11 XI. 11-12 XII. 12 XIII. 13 XIV. 14-15 XV. 15-16 XVI. 16 I. * ++p ++ p ++ ++ * ++p ++ ++ ++p 1 2 ++ ++ ++ ++ ++ I.

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Microsoft Word - Final Chi-Report _PlanD-KlnEast_V7_ES_.doc

Microsoft Word - Final Chi-Report _PlanD-KlnEast_V7_ES_.doc 九 龍 東 商 業 的 統 計 調 查 - 行 政 摘 要 - 2011 年 5 月 統 計 圖 行 政 摘 要...1 圖 I: 在 不 同 地 區 及 樓 宇 類 別 的 數 目 及 比 例...9 圖 II: 影 響 選 擇 地 點 的 因 素 的 重 要 程 度 對 比 就 現 時 所 在 地 點 各 項 因 素 的 滿 意 程 度...20 圖 III: 影 響 選 擇 樓 宇 的 因 素

More information

施 的 年 度 維 修 工 程 已 於 4 月 15 日 完 成, 並 於 4 月 16 日 重 新 開 放 給 市 民 使 用 ii. 天 水 圍 游 泳 池 的 年 度 維 修 工 程 已 於 3 月 31 日 完 成, 並 於 4 月 1 日 重 新 開 放 給 市 民 使 用 iii. 元

施 的 年 度 維 修 工 程 已 於 4 月 15 日 完 成, 並 於 4 月 16 日 重 新 開 放 給 市 民 使 用 ii. 天 水 圍 游 泳 池 的 年 度 維 修 工 程 已 於 3 月 31 日 完 成, 並 於 4 月 1 日 重 新 開 放 給 市 民 使 用 iii. 元 地 委 會 文 件 2016/ 第 25 號 ( 於 6.5.2016 會 議 討 論 ) 康 樂 及 文 化 事 務 署 在 元 朗 區 內 舉 辦 的 康 樂 體 育 活 動 及 設 施 管 理 綜 合 匯 報 (2016 年 5 月 號 報 告 ) 目 的 本 文 件 旨 在 向 各 委 員 匯 報 康 樂 及 文 化 事 務 署 ( 康 文 署 ) 於 2016 年 2 月 至 5 月 在

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 机群应用开发 并行编程原理及程序设计 Parallel Programming: Fundamentals and Implementation 占杰 zhanjie@dawningcomcn 曙光信息产业有限公司 2010 年 1 月 2010 年 1 月 1 参考文献 黄铠, 徐志伟著, 陆鑫达等译 可扩展并行计算技术, 结构与编程 北京 : 机械工业出版社, P33~56,P227~237,

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

PowerPoint Presentation

PowerPoint Presentation 并行计算 十五 分布存储系统并行编程 分布存储系统并行编程 14.1 基于消息传递的并行编程 14.2 MPI 并行编程 6 个基本函数组成的 MPI 子集 MPI 消息 点对点通信 群集通信 SPMD 和 MPMD SPMD 各个进程是同构的, 多个进程对不同的数据执行相同的代码 ( 一般是数据并行 ) 常对应并行循环, 数据并行结构, 单代码 MPMD 各个进程是异构的, 多个进程执行不同的代码

More information

奇闻怪录

奇闻怪录 ... 1... 1... 2... 3... 3... 4... 4... 5... 5... 6... 8... 9... 10... 10... 11... 11... 13... 13... 14... 14... 15... 16... 17... 21 I ... 22... 23... 23... 24... 25... 25... 26... 27... 28... 29 UFO...

More information

<4D F736F F D20BB4FAA46BFA4B2C4A447B4C15F D313038A67E5FBAEEA658B56FAE69B9EAAC49A4E8AED72D5FAED6A977A5BB5F >

<4D F736F F D20BB4FAA46BFA4B2C4A447B4C15F D313038A67E5FBAEEA658B56FAE69B9EAAC49A4E8AED72D5FAED6A977A5BB5F > 行 政 院 104 年 11 月 2 日 院 臺 綜 字 第 1040149345A 號 函 核 定 臺 東 縣 第 二 期 (105-108 年 ) 綜 合 發 展 實 施 方 案 ( 核 定 本 ) 臺 東 縣 政 府 中 華 民 國 1 0 4 年 1 1 月 臺 東 縣 第 二 期 (105-108 年 ) 綜 合 發 展 實 施 方 案 ( 核 定 本 ) 目 錄 第 一 章 前 言...

More information

Microsoft Word - COC HKROO App I _Chi_ Jan2012.doc

Microsoft Word - COC HKROO App I _Chi_ Jan2012.doc 附 錄 I 目 錄 項 目 貨 品 描 述 頁 數 (I) 活 動 物 ; 動 物 1 (II) 植 物 2 (III) 動 物 或 植 物 脂 肪 及 油 及 其 分 化 後 剩 餘 的 ; 經 處 理 可 食 的 脂 肪 ; 動 物 或 植 物 蠟 2 (IV) 經 配 製 的 食 品 ; 飲 料 酒 及 醋 ; 煙 草 及 製 成 的 煙 草 代 替 品 2 (V) 礦 產 5 (VI) 化

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

目 录 参 考 材 料 1 第 一 章 预 备 知 识 2 1.1 高 性 能 并 行 计 算 机 系 统 简 介.................................. 2 1.1.1 微 处 理 器 的 存 储 结 构.................................

目 录 参 考 材 料 1 第 一 章 预 备 知 识 2 1.1 高 性 能 并 行 计 算 机 系 统 简 介.................................. 2 1.1.1 微 处 理 器 的 存 储 结 构................................. MPI 并 行 编 程 讲 稿 张 林 波 中 国 科 学 院 数 学 与 系 统 科 学 研 究 院 科 学 与 工 程 计 算 国 家 重 点 实 验 室 1999 年 7 月 ( 最 后 修 订 :2012 年 7 月 ) i 目 录 参 考 材 料 1 第 一 章 预 备 知 识 2 1.1 高 性 能 并 行 计 算 机 系 统 简 介..................................

More information

(i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (i) (ii)(iii) (iv) (v)

(i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (i) (ii)(iii) (iv) (v) 1948 12 1 1986 1 1995 1995 3 1995 5 2003 4 2003 12 2015 82015 10 1 2004 2 1 (i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (i) (ii)(iii) (iv) (v) (vi) (vii)(viii) (ix) (x) (xi) 2013 8 15 (i) (ii) (iii)

More information

財 務 委 員 會 審 核 2014 至 2015 年 度 開 支 預 算 的 報 告 2014 年 7 月

財 務 委 員 會 審 核 2014 至 2015 年 度 開 支 預 算 的 報 告 2014 年 7 月 香 港 特 別 行 政 區 立 法 會 財 務 委 員 會 審 核 2014 至 2015 年 度 開 支 預 算 的 報 告 2014 年 7 月 財 務 委 員 會 審 核 2014 至 2015 年 度 開 支 預 算 的 報 告 2014 年 7 月 章 節 目 錄 頁 數 I 序 言 1-2 II 公 務 員 事 務 3-9 III 司 法 及 法 律 事 務 10-19 IV 財 經 事

More information

科学计算的语言-FORTRAN95

科学计算的语言-FORTRAN95 科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 机群应用开发 并行编程原理及程序设计 Parallel Programming: Fundamentals and Implementation 戴荣 dair@dawningcomcn 曙光信息产业有限公司 2008 年 7 月 2008 年 7 月 1 参考文献 黄铠, 徐志伟著, 陆鑫达等译 可扩展并行计算技术, 结构与编程 北京 : 机械工业出版社, P33~56,P227~237, 2000

More information

RDEC-RES

RDEC-RES RDEC-RES-089-005 RDEC-RES-089-005 VI I II III 6 IV 7 3 V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX 1 2 3 4 5 6 7 8 躰 ( 9 10 躰 11 12 躰 1 13 14 躰 15 16 躰 17 18 19 1 20 21 22 2 23 24 25 26

More information

Parallel Programming with MPI

Parallel Programming  with MPI MPI 并行编程入门 中国科学院计算机网络信息中心超级计算中心 聚合通信 定义 三种通信方式 聚合函数列表 同步 广播 收集 散发 全散发收集 归约 定义 communicator 1 3 4 5 0 2 一个通信器的所有进程参与, 所有进程都调用聚合通信函数 MPI 系统保证聚合通信函数与点对点调用不会混淆 聚合通信不需要消息标号 聚合通信函数都为阻塞式函数 聚合通信的功能 : 通信 同步 计算等

More information

「保險中介人資格考試」手冊

「保險中介人資格考試」手冊 目 錄 內 容 頁 次 1. 引 言.. 1 2. 考 試.. 1 3. 報 考 詳 情.. 3 4. 註 冊 手 續.. 3 5. 考 試 費.. 4 6. 准 考 證.. 5 7. 選 擇 考 試 時 間.. 5 8. 電 腦 或 系 統 出 現 問 題..... 5 9. 考 試 規 則.. 5 10. 取 消 資 格.. 6 11. 核 實 考 生 身 分.. 6 12. 發 出 成 績 通

More information

(譯本)

(譯本) 檔 號 : LD SMW 86-1/2(C) 立 法 會 參 考 資 料 摘 要 最 低 工 資 條 例 ( 第 608 章 ) 僱 傭 條 例 ( 第 57 章 ) 2015 年 最 低 工 資 條 例 ( 修 訂 附 表 3) 公 告 2015 年 僱 傭 條 例 ( 修 訂 附 表 9) 公 告 引 言 A 在 二 零 一 五 年 一 月 六 日 的 會 議 上, 行 政 會 議 建 議, 行

More information

Microsoft Word - Entry-Level Occupational Competencies for TCM in Canada200910_ch _2_.doc

Microsoft Word - Entry-Level Occupational Competencies for TCM in Canada200910_ch _2_.doc 草 稿 致 省 級 管 理 單 位 之 推 薦 書 二 零 零 九 年 十 月 十 七 日 加 拿 大 中 醫 管 理 局 聯 盟 All rights reserved 序 言 加 拿 大 中 醫 管 理 局 聯 盟, 於 二 零 零 八 年 一 月 至 二 零 零 九 年 十 月 間, 擬 定 傳 統 中 醫 執 業 之 基 礎 文 件 由 臨 床 經 驗 豐 富 之 中 醫 師 教 育 者 及

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

山东出版传媒招股说明书

山东出版传媒招股说明书 ( 山 东 省 济 南 市 英 雄 山 路 189 号 ) 首 次 公 开 发 行 股 票 ( 申 报 稿 ) 保 荐 机 构 ( 主 承 销 商 ) 中 银 国 际 证 券 有 限 责 任 公 司 ( 上 海 市 浦 东 银 城 中 路 200 号 中 银 大 厦 39 层 ) 首 次 公 开 发 行 股 票 ( 一 ) 发 行 股 票 类 型 : 人 民 币 普 通 股 (A 股 ) ( 二 )

More information

(b)

(b) 1. (a) (b) (c) 22 85155 (i) (ii) 2200 5 35% 20% 500 3,000 3015 50% 30 (i) (ii) (iii) (iii) 30% QFII 15% H (20)(5) (iv) (i)(ii) (iii) (iv) (v) 10 30 (vi) 5% (vii) (1) (1) 25%(1) (viii) (ix) 10% 20 45 20

More information

-i-

-i- -i- -ii- -iii- -iv- -v- -vi- -vii- -viii- -ix- -x- -xi- -xii- 1-1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-9 1-10 1-11 1-12 1-13 1-14 1-15 1-16 1-17 1-18 1-19 1-20 1-21 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-10 2-11

More information

Microsoft Word - 强迫性活动一览表.docx

Microsoft Word - 强迫性活动一览表.docx 1 1 - / 2 - / 3 - / 4 - / 5 - I. 1. / 2. / 3. 4. 5. 6. 7. 8. 9 10 11. 12. 2 13. 14. 15. 16. 17. 18. 19. 20 21. 22 23. 24. / / 25. 26. 27. 28. 29. 30. 31. II. 1. 2 3. 4 3 5. 6 7 8. 9 10 11 12 13 14. 15.

More information

1. 2285 155 2200 35% 30 3015 50% 30 (i) (ii) (iii) [][]15% H (20)(5) (i)(ii) (iii)(iv) 30 5% (1) (1) 25% (1) 10% 2045 20 5% 20 50% 50% 151 20 10% 50% 25% 10% 10% (1)(2)(4)(5)15 1060 3045 H H H (i)(ii)

More information

- 2 - 获 豁 免 计 算 入 总 楼 面 面 积 及 / 或 上 盖 面 积 的 环 保 及 创 新 设 施 根 据 建 筑 物 条 例 的 规 定 4. 以 下 的 环 保 设 施 如 符 合 某 些 条 件, 并 由 有 关 人 士 提 出 豁 免 申 请, 则 可 获 豁 免 计 算 入

- 2 - 获 豁 免 计 算 入 总 楼 面 面 积 及 / 或 上 盖 面 积 的 环 保 及 创 新 设 施 根 据 建 筑 物 条 例 的 规 定 4. 以 下 的 环 保 设 施 如 符 合 某 些 条 件, 并 由 有 关 人 士 提 出 豁 免 申 请, 则 可 获 豁 免 计 算 入 屋 宇 署 地 政 总 署 规 划 署 联 合 作 业 备 考 第 1 号 环 保 及 创 新 的 楼 宇 引 言 为 了 保 护 和 改 善 建 筑 及 自 然 环 境, 政 府 推 广 建 造 环 保 及 创 新 的 楼 宇, 目 的 是 鼓 励 业 界 设 计 和 建 造 加 入 以 下 措 施 的 楼 宇 : (a) 采 用 楼 宇 整 体 使 用 周 期 方 法 规 划 设 计 建 造 和

More information

1 2 6 8 15 36 48 55 58 65 67 74 76 150 152 1 3 1 2 4 2 2001 2000 1999 12 31 12 31 12 31 304,347 322,932 231,047 14,018 16,154 5,665 (i) 0.162 0.193 0.082 (ii) 0.165 0.227 0.082 (iii) 10.08 13.37 6.47 0.688

More information

建築污染綜合指標之研究

建築污染綜合指標之研究 1 2 3 4 5 (3) 6 7 (11) 8 9 10 11 12 250 13 14 15 16 17 18 V V 0 a a 0 Li 10 ( 10 ) a a 0 19 20 21 22 23 24 ( ) ( ) + 25 0 1 1 ( 1 ) ( 1 ) + ( 1 ) ( 1 ) + ( 1 ) ( 1 ) + ( 1 ) ( 1 ) + + 26 ( + 27 n i 1 28

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

<D6D0B9FAB9C5CAB757512E6D7073>

<D6D0B9FAB9C5CAB757512E6D7073> 黄 河 文 明 的 历 史 变 迁 丛 书 编 委 会 学 术 顾 问 李 学 勤 朱 绍 侯 姚 瀛 艇 郝 本 性 晁 福 林 王 巍 主 任 李 小 建 苗 长 虹 副 主 任 覃 成 林 高 有 鹏 牛 建 强 刘 东 勋 主 编 李 玉 洁 编 委 苗 书 梅 程 遂 营 王 蕴 智 张 新 斌 郑 慧 生 涂 白 奎 袁 俊 杰 薛 瑞 泽 陈 朝 云 孔 学 郑 贞 富 陈 彩 琴 石

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................

More information

<4D6963726F736F667420576F7264202D20CDF2B4EFB5E7D3B0D4BACFDFB9C9B7DDD3D0CFDEB9ABCBBECAD7B4CEB9ABBFAAB7A2D0D0B9C9C6B1D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E532303134C4EA34D4C23137C8D5B1A8CBCDA3A92E646F63>

<4D6963726F736F667420576F7264202D20CDF2B4EFB5E7D3B0D4BACFDFB9C9B7DDD3D0CFDEB9ABCBBECAD7B4CEB9ABBFAAB7A2D0D0B9C9C6B1D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E532303134C4EA34D4C23137C8D5B1A8CBCDA3A92E646F63> ( 住 所 : 北 京 市 朝 阳 区 建 国 路 93 号 万 达 广 场 B 座 11 层 ) 首 次 公 开 发 行 A 股 股 票 ( 申 报 稿 ) 保 荐 人 ( 主 承 销 商 ) 住 所 : 上 海 市 浦 东 银 城 中 路 200 号 中 银 大 厦 39 层 万 达 电 影 院 线 股 份 有 限 公 司 首 次 公 开 发 行 股 票 本 公 司 的 发 行 申 请 尚 未

More information

对联故事

对联故事 980.00 ... 1... 1... 2... 3... 3... 4... 4... 5... 5... 6... 7... 7... 8... 9...10...10...11...12...13...13...14...15...15...16...17 I II...18...18...19...19...20...21...21...22...22...23...24...25...25...26...26...27...28...29...29...30...30...31...32...32...33...34...34...35

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

,, 17 075 200,, 170, 1, 40, 4 000, 5,,,, 100 600, 862,, 100, 2 /5,, 1 /5, 1 2,, 1 /5,,, 1 /2,, 800,,,,,,, 300,,,,,, 4 300,,,,, ,,,,,,,,,,, 2003 9 3 3. 22 24 4. 26 30 2 33 33 1. 34 61 1. 1 37 63 1. 2 44

More information

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344> 1. 請 問 誰 提 出 積 體 電 路 (IC) 上 可 容 納 的 電 晶 體 數 目, 約 每 隔 24 個 月 (1975 年 更 改 為 18 個 月 ) 便 會 增 加 一 倍, 效 能 也 將 提 升 一 倍, 也 揭 示 了 資 訊 科 技 進 步 的 速 度? (A) 英 特 爾 (Intel) 公 司 創 始 人 戈 登. 摩 爾 (Gordon Moore) (B) 微 軟 (Microsoft)

More information

How to Debug Tuxedo Server printf( Input data is: %s, inputstr); fprintf(stdout, Input data is %s, inputstr); fprintf(stderr, Input data is %s, inputstr); printf( Return data is: %s, outputstr); tpreturn(tpsuccess,

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

全唐诗28

全唐诗28 ... 1... 1... 1... 2... 2... 2... 3... 3... 4... 4... 4... 5... 5... 5... 5... 6... 6... 6... 6... 7... 7... 7... 7... 8... 8 I II... 8... 9... 9... 9...10...10...10...11...11...11...11...12...12...12...13...13...13...14...14...14...15...15...15...16...16...16...17...17

More information

「香港中學文言文課程的設計與教學」單元設計範本

「香港中學文言文課程的設計與教學」單元設計範本 1. 2. 3. (1) (6) ( 21-52 ) (7) (12) (13) (16) (17) (20) (21) (24) (25) (31) (32) (58) 1 2 2007-2018 7 () 3 (1070) (1019-1086) 4 () () () () 5 () () 6 21 1. 2. 3. 1. 2. 3. 4. 5. 6. 7. 8. 9. ( ) 7 1. 2.

More information

软件测试(TA07)第一学期考试

软件测试(TA07)第一学期考试 一 判 断 题 ( 每 题 1 分, 正 确 的, 错 误 的,20 道 ) 1. 软 件 测 试 按 照 测 试 过 程 分 类 为 黑 盒 白 盒 测 试 ( ) 2. 在 设 计 测 试 用 例 时, 应 包 括 合 理 的 输 入 条 件 和 不 合 理 的 输 入 条 件 ( ) 3. 集 成 测 试 计 划 在 需 求 分 析 阶 段 末 提 交 ( ) 4. 单 元 测 试 属 于 动

More information

歡 迎 您 成 為 滙 豐 銀 聯 雙 幣 信 用 卡 持 卡 人 滙 豐 銀 聯 雙 幣 信 用 卡 同 時 兼 備 港 幣 及 人 民 幣 戶 口, 讓 您 的 中 港 消 費 均 可 以 當 地 貨 幣 結 算, 靈 活 方 便 此 外, 您 更 可 憑 卡 於 全 球 近 400 萬 家 特

歡 迎 您 成 為 滙 豐 銀 聯 雙 幣 信 用 卡 持 卡 人 滙 豐 銀 聯 雙 幣 信 用 卡 同 時 兼 備 港 幣 及 人 民 幣 戶 口, 讓 您 的 中 港 消 費 均 可 以 當 地 貨 幣 結 算, 靈 活 方 便 此 外, 您 更 可 憑 卡 於 全 球 近 400 萬 家 特 歡 迎 您 成 為 滙 豐 銀 聯 雙 幣 信 用 卡 持 卡 人 滙 豐 銀 聯 雙 幣 信 用 卡 同 時 兼 備 港 幣 及 人 民 幣 戶 口, 讓 您 的 中 港 消 費 均 可 以 當 地 貨 幣 結 算, 靈 活 方 便 此 外, 您 更 可 憑 卡 於 全 球 近 400 萬 家 特 約 商 戶 簽 賬, 尊 享 種 種 購 物 飲 食 及 娛 樂 消 費 優 惠 如 需 查 詢 滙

More information

普 通 高 等 教 育 十 二 五 重 点 规 划 教 材 计 算 机 系 列 中 国 科 学 院 教 材 建 设 专 家 委 员 会 十 二 五 规 划 教 材 操 作 系 统 戴 仕 明 姚 昌 顺 主 编 姜 华 张 希 伟 副 主 编 郑 尚 志 梁 宝 华 参 编 参 编 周 进 钱 进

普 通 高 等 教 育 十 二 五 重 点 规 划 教 材 计 算 机 系 列 中 国 科 学 院 教 材 建 设 专 家 委 员 会 十 二 五 规 划 教 材 操 作 系 统 戴 仕 明 姚 昌 顺 主 编 姜 华 张 希 伟 副 主 编 郑 尚 志 梁 宝 华 参 编 参 编 周 进 钱 进 科 学 出 版 社 普 通 高 等 教 育 十 二 五 重 点 规 划 教 材 计 算 机 系 列 中 国 科 学 院 教 材 建 设 专 家 委 员 会 十 二 五 规 划 教 材 操 作 系 统 戴 仕 明 姚 昌 顺 主 编 姜 华 张 希 伟 副 主 编 郑 尚 志 梁 宝 华 参 编 参 编 周 进 钱 进 参 编 北 京 内 容 简 介 本 书 由 浅 入 深 系 统 全 面 地 介 绍

More information

「保險中介人資格考試」手冊

「保險中介人資格考試」手冊 保 險 中 介 人 資 格 考 試 手 冊 目 錄 內 容 頁 次 1. 引 言.. 1 2. 考 試... 1 3. 報 考 詳 情... 3 4. 報 名 手 續... 4 5. 考 試 費... 5 6. 准 考 證... 5 7. 選 擇 考 試 時 間... 6 8. 電 腦 或 系 統 出 現 問 題...... 6 9. 考 試 規 則..... 6 10. 取 消 資 格... 7

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

- 1 - ( ) ( ) ( )

- 1 - ( ) ( ) ( ) : 2 2868 4679 airportcomments@edlb.gov.hk www.edlb.gov.hk/edb/chi/papers/cdoc/ - 1 - ( ) 2. 3. 4. 2004 ( ) 60 5. ( ) - 2-6. ( 483 ) 7. ( 32 ) ( 448 ) 1995 ( ) 1 8. 1 ( ) 128 129 130 - 3-9. (i) (ii) (iii)

More information

天主教永年高級中學綜合高中課程手冊目錄

天主教永年高級中學綜合高中課程手冊目錄 天 主 教 永 年 高 級 中 學 綜 合 高 中 課 程 手 冊 目 錄 壹 學 校 背 景. 貳 教 育 理 念 與 教 育 目 標. 3 一 規 劃 理 念...3 二 教 育 目 標...3 參 畢 業 要 求. 5 一 總 學 分 數...5 二 必 選 修 學 分 數...5 三 必 須 參 加 活 動...9 四 成 績 評 量 方 式...9 肆 課 程 概 述.. 9 一 課 程

More information

Microsoft Word - Panel Paper on T&D-Chinese _as at 6.2.2013__final_.doc

Microsoft Word - Panel Paper on T&D-Chinese _as at 6.2.2013__final_.doc 二 零 一 三 年 二 月 十 八 日 會 議 討 論 文 件 立 法 會 CB(4)395/12-13(03) 號 文 件 立 法 會 公 務 員 及 資 助 機 構 員 工 事 務 委 員 會 公 務 員 培 訓 及 發 展 概 況 目 的 本 文 件 介 紹 公 務 員 事 務 局 為 公 務 員 所 提 供 培 訓 和 發 展 的 最 新 概 況, 以 及 將 於 二 零 一 三 年 推 出

More information

II II

II II I I II II III 1. 2. 3. III 4. IV 5. 6. 8. 9. 10. 12. IV V V VI VI VII VII VIII VIII IX IX X X XI XI XII XII 1 1 2 2 3 3 4 33 35 4 5 5 6 6 7 ( ) 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17

More information

目录 第一章 MPI 简介 消息传递编程的相关概念 分布式内存 消息传输 进程 消息传递库 发送 / 接收 同步 / 异步 阻塞

目录 第一章 MPI 简介 消息传递编程的相关概念 分布式内存 消息传输 进程 消息传递库 发送 / 接收 同步 / 异步 阻塞 神威蓝光 计算机系统 MPI 用户手册 国家超级计算济南中心 2011 年 03 月 目录 第一章 MPI 简介... 1 1.1 消息传递编程的相关概念... 2 1.1.1 分布式内存... 2 1.1.2 消息传输... 3 1.1.3 进程... 3 1.1.4 消息传递库... 3 1.1.5 发送 / 接收... 3 1.1.6 同步 / 异步... 3 1.1.7 阻塞通讯... 4

More information

《小王子》 (法)圣埃克苏佩里 原著

《小王子》 (法)圣埃克苏佩里 原著 小 王 子 ( 法 ) 圣 埃 克 苏 佩 里 原 著 献 给 莱 翁 维 尔 特 请 孩 子 们 原 谅 我 把 这 本 书 献 给 了 一 个 大 人 我 有 一 条 正 当 的 理 由 : 这 个 大 人 是 我 在 世 界 上 最 好 的 朋 友 我 另 有 一 条 理 由 : 这 个 大 人 什 么 都 懂 ; 即 使 儿 童 读 物 也 懂 我 还 有 第 三 条 理 由 ; 这 个 大

More information

Microsoft PowerPoint - OPVB1基本VB.ppt

Microsoft PowerPoint - OPVB1基本VB.ppt 大 綱 0.VB 能 做 什 麼? CH1 VB 基 本 認 識 1.VB 歷 史 與 版 本 2.VB 環 境 簡 介 3. 即 時 運 算 視 窗 1 0.VB 能 做 什 麼? Visual Basic =>VB=> 程 式 設 計 語 言 => 設 計 程 式 設 計 你 想 要 的 功 能 的 程 式 自 動 化 資 料 庫 計 算 模 擬 遊 戲 網 路 監 控 實 驗 輔 助 自 動

More information

<4D6963726F736F667420576F7264202D20B1B1BEA9D6B8C4CFD5EBBFC6BCBCB7A2D5B9B9C9B7DDD3D0CFDEB9ABCBBEB4B4D2B5B0E5CAD7B4CEB9ABBFAAB7A2D0D0B9C9C6B1D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E532303136C4EA36D4C23230C8D5B1A8CBCDA3A92E646F63>

<4D6963726F736F667420576F7264202D20B1B1BEA9D6B8C4CFD5EBBFC6BCBCB7A2D5B9B9C9B7DDD3D0CFDEB9ABCBBEB4B4D2B5B0E5CAD7B4CEB9ABBFAAB7A2D0D0B9C9C6B1D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E532303136C4EA36D4C23230C8D5B1A8CBCDA3A92E646F63> ( 北 京 市 海 淀 区 黑 泉 路 8 号 宝 盛 广 场 B 座 6 层 6001 室 ) 首 次 公 开 发 行 股 票 并 在 创 业 板 上 市 ( 申 报 稿 ) 本 公 司 的 发 行 申 请 尚 未 得 到 中 国 证 监 会 核 准 本 ( 申 报 稿 ) 不 具 有 据 以 发 行 股 票 的 法 律 效 力, 仅 供 预 先 披 露 之 用 投 资 者 应 当 以 正 式 公

More information

Microsoft Word - NCH final report_CHI _091118_ revised on 10 Dec.doc

Microsoft Word - NCH final report_CHI _091118_ revised on 10 Dec.doc 十 八 區 區 議 會 的 簡 介 會 (1) 東 區 區 議 會 (2008 年 4 月 24 日 ) III. 中 環 新 海 濱 城 市 設 計 研 究 第 二 階 段 公 眾 參 與 ( 東 區 區 議 會 文 件 第 51/08 號 ) 10. 主 席 歡 迎 發 展 局 副 秘 書 長 ( 規 劃 及 地 政 ) 麥 駱 雪 玲 太 平 紳 士 規 劃 署 副 署 長 / 地 區 黃 婉

More information

Microsoft Word - 0B 封裡面.doc

Microsoft Word - 0B 封裡面.doc 國 立 臺 灣 大 學 校 總 區 東 區 規 劃 調 整 委 託 技 術 服 務 報 告 書 定 稿 版 目 錄 審 核 意 見 修 正 辦 理 情 形 壹 計 畫 緣 起 及 目 標 1-1 計 畫 緣 起 1 1-2 計 畫 目 標 與 效 益 1 1-3 計 畫 範 圍 2 1-4 計 畫 期 程 2 貳 基 地 環 境 概 述 2-1 東 ( 北 ) 區 使 用 現 況 3 2-2 東

More information

<4D6963726F736F667420576F7264202D20B6ABD0CBD6A4C8AFB9C9B7DDD3D0CFDEB9ABCBBECAD7B4CEB9ABBFAAB7A2D0D0B9C9C6B1D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E5202032303134C4EA33D4C23131C8D5B1A8CBCDA3A92E646F63>

<4D6963726F736F667420576F7264202D20B6ABD0CBD6A4C8AFB9C9B7DDD3D0CFDEB9ABCBBECAD7B4CEB9ABBFAAB7A2D0D0B9C9C6B1D5D0B9C9CBB5C3F7CAE9A3A8C9EAB1A8B8E5202032303134C4EA33D4C23131C8D5B1A8CBCDA3A92E646F63> 东 兴 证 券 股 份 有 限 公 司 ( 住 所 : 北 京 市 西 城 区 金 融 大 街 5 号 ( 新 盛 大 厦 )12 15 层 ) 首 次 公 开 发 行 股 票 招 股 说 明 书 ( 申 报 稿 ) 保 荐 人 ( 主 承 销 商 ) 瑞 银 证 券 有 限 责 任 公 司 住 所 : 北 京 市 西 城 区 金 融 大 街 7 号 英 蓝 国 际 金 融 中 心 12 层 15

More information

一、

一、 ... 1...24...58 - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - i. ii. iii. iv. i. ii. iii. iv. v. vi. vii. viii. ix. x. - 9 - xi. - 10 - - 11 - -12- -13- -14- -15- C. @ -16- @ -17- -18- -19- -20- -21- -22-

More information

江苏宁沪高速公路股份有限公司.PDF

江苏宁沪高速公路股份有限公司.PDF - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - 33.33% ( ) ( ) ( ) 33.33% ( ) ( ) ( ) 1 1 1992 8 3200001100976 1997 6 27 H 12.22 2001 1 16 A 1.5 2001 12 3 503,774.75 14,914,399,845.00 13,445,370,274.00

More information

2015 2 104 109 110 112 113 113 113 114 1 (1) 9,654,346,443 6,388,650,779 4,183,429,633 1,183,342,128 (2) 47,710,000 41,600,000 16,600,000 13,200,000 (3), (1) 371,147,787 125,421,629 749,150,179 565,001,961

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc 人 力 資 源 推 算 報 告 香 港 特 別 行 政 區 政 府 二 零 一 二 年 四 月 此 頁 刻 意 留 空 - 2 - 目 錄 頁 前 言 詞 彙 縮 寫 及 注 意 事 項 摘 要 第 一 章 : 第 二 章 : 第 三 章 : 第 四 章 : 附 件 一 : 附 件 二 : 附 件 三 : 附 件 四 : 附 件 五 : 附 件 六 : 附 件 七 : 引 言 及 技 術 大 綱 人

More information

南華大學數位論文

南華大學數位論文 1 i -------------------------------------------------- ii iii iv v vi vii 36~39 108 viii 15 108 ix 1 2 3 30 1 ~43 2 3 ~16 1 2 4 4 5 3 6 8 6 4 4 7 15 8 ----- 5 94 4 5 6 43 10 78 9 7 10 11 12 10 11 12 9137

More information

李天命的思考藝術

李天命的思考藝術 ii iii iv v vi vii viii ix x 3 1 2 3 4 4 5 6 7 8 9 5 10 1 2 11 6 12 13 7 8 14 15 16 17 18 9 19 20 21 22 10 23 24 23 11 25 26 7 27 28 12 13 29 30 31 28 32 14 33 34 35 36 5 15 3 1 2 3 4 5 6 7 8 9 10 11

More information

皮肤病防治.doc

皮肤病防治.doc ...1...1...2...3...4...5...6...7...7...9...10... 11...12...14...15...16...18...19...21 I ...22...22...24...25...26...27...27...29...30...31...32...33...34...34...36...36...37...38...40...41...41...42 II

More information

性病防治

性病防治 ...1...2...3...4...5...5...6...7...7...7...8...8...9...9...10...10... 11... 11 I ...12...12...12...13...14...14...15...17...20...20...21...22...23...23...25...27...33...34...34...35...35 II ...36...38...39...40...41...44...49...49...53...56...57...57...58...58...59...60...60...63...63...65...66

More information

中国南北特色风味名菜 _一)

中国南北特色风味名菜 _一) ...1...1...2...3...3...4...5...6...7...7...8...9... 10... 11... 13... 13... 14... 16... 17 I ... 18... 19... 20... 21... 22... 23... 24... 25... 27... 28... 29... 30... 32... 33... 34... 35... 36... 37...

More information

全唐诗24

全唐诗24 ... 1... 1... 2... 2... 3... 3... 4... 4... 5... 5... 6... 6... 7... 7... 8... 8... 9... 9...10...10...10...11...12...12...12...13...13 I II...14...14...14...15...15...15...16...16...16...17...17...18...18...18...19...19...19...20...20...20...21...21...22...22...23...23...23...24

More information

509 (ii) (iii) (iv) (v) 200, , , , C 57

509 (ii) (iii) (iv) (v) 200, , , , C 57 59 (ii) (iii) (iv) (v) 500,000 500,000 59I 18 (ii) (iii) (iv) 200,000 56 509 (ii) (iii) (iv) (v) 200,000 200,000 200,000 500,000 57 43C 57 (ii) 60 90 14 5 50,000 43F 43C (ii) 282 24 40(1B) 24 40(1) 58

More information

95年度社區教育學習計畫執行成果報告

95年度社區教育學習計畫執行成果報告 宜 蘭 縣 政 府 環 境 保 護 局 101 年 度 宜 蘭 縣 環 境 教 育 委 託 執 行 計 畫 期 末 報 告 ( 定 稿 版 ) 社 團 法 人 宜 蘭 縣 博 物 館 家 族 協 會 中 華 民 國 102 年 6 月 宜 蘭 縣 政 府 環 境 保 護 局 101 年 度 宜 蘭 縣 環 境 教 育 委 託 執 行 計 畫 期 末 報 告 ( 定 稿 版 ) 計 畫 主 持 人 :

More information

Parallel Programing with MPI Binding with Fortran, C,C++

Parallel Programing with MPI Binding with Fortran, C,C++ M P I 并行编程 C/C++/Fortran 语言绑定 ID: 独峰箫狼 版本 : v1.2.1 :tkong@mail.sdu.edu.cn 1 目录 并行简介 MPI 概述 MPI 编程 MPI 基本概念 六个基本函数 详解消息通信域 衍生数据类型 点对点通信 群集通信 一些练习程序 2 并行简介 何谓并行 如何创建并行程序 并行结构 并行编程模型 3 何谓并行 多个线程同时进行工作 就像电路的并联可以起到分流的作用一样

More information

W. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO

W. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO Linux muduo C++ (giantchen@gmail.com) 2012-09-30 C++ TCP C++ x86-64 Linux TCP one loop per thread Linux native muduo C++ IT 5 C++ muduo 2 C++ C++ Primer 4 W. Richard Stevens UNIX Sockets API echo Sockets

More information

untitled

untitled 13.01 A1 13.02 [ 2013 1 1 ] 13.03 13.04 13.05 (1) 21 (2) (3) 1/13 13 1 13.06 (1) (2) (3) 21 13.06A 13.06B 13.07 13.08 13.09 (1) 13.10 1. 13.10 13 2 1/13 2. (2) 13.10 (1) (2) 1 1. 13.10(2) XIVA 1/13 13

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南 Symantec Sygate Enterprise Protection 防 护 代 理 安 装 使 用 指 南 5.1 版 版 权 信 息 Copyright 2005 Symantec Corporation. 2005 年 Symantec Corporation 版 权 所 有 All rights reserved. 保 留 所 有 权 利 Symantec Symantec 徽 标 Sygate

More information