source: CIVL/examples/concurrency/wildcard.cvl@ 0fdf4bd

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since 0fdf4bd was 34f73ef, checked in by Ziqing Luo <ziqing@…>, 11 years ago

add MPI_Finalize()

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@2148 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.1 KB
Line 
1#include <civlc.cvh>
2#include <stdio.h>
3#include <mpi.h>
4#include <civl-mpi.cvh>
5#include <assert.h>
6
7$input int NPROCS = 5;
8CMPI_Gcomm __MPI_COMM_WORLD;
9void MPI_Process(int place){
10 MPI_Comm MPI_COMM_WORLD = CMPI_Comm_create($here, __MPI_COMM_WORLD, place);
11 int nprocs, rank, msg;
12 MPI_Status status;
13 __MPI_Sys_status__ _my_status = __UNINIT;
14
15 $assert(_my_status == __UNINIT);
16 _MPI_Init();
17 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
18 MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
19
20 if(rank != 0){
21 msg = rank;
22 MPI_Send(&msg, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
23 }
24 else{
25 int source;
26
27 msg = -1;
28 for(int i=1; i<NPROCS; i++){
29 MPI_Recv(&msg, 1, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);
30 }
31 }
32 _MPI_Finalize();
33 CMPI_Comm_destroy(MPI_COMM_WORLD);
34 printf("process %d terminates\n", rank);
35}
36
37void main(){
38
39 $proc procs[NPROCS];
40
41 __MPI_COMM_WORLD = CMPI_Gcomm_create($root, NPROCS);
42 for(int i=0; i<NPROCS; i++)
43 procs[i] = $spawn MPI_Process(i);
44 for(int i=0; i<NPROCS; i++)
45 $wait(procs[i]);
46
47 CMPI_Gcomm_destroy(__MPI_COMM_WORLD);
48}
Note: See TracBrowser for help on using the repository browser.