7
7
8
8
int main (int argc , char * * argv ){
9
9
10
+ unsigned long long N = 1000000 ;
11
+ unsigned long long M = 100000 ;
12
+
10
13
int world_rank ;
11
14
int world_size ;
12
15
13
16
int namelen ;
14
- int iam = 0 ;
15
- int np = 1 ;
17
+ int iam ;
18
+ int np ;
16
19
MPI_Init (& argc ,& argv );
17
20
MPI_Comm_rank (MPI_COMM_WORLD , & world_rank );
18
21
MPI_Comm_size (MPI_COMM_WORLD , & world_size );
@@ -26,7 +29,10 @@ int main(int argc, char** argv){
26
29
printf ("Hello from thread %d out of %d from process %d out of %d on %s\n" ,
27
30
iam , np , world_rank , world_size , processor_name );
28
31
29
-
32
+ float * array = malloc (N * sizeof (float ));
33
+ for (unsigned long long i = 0 ; i < N ; i ++ ){
34
+ array [i ]= 0.0 ;
35
+ }
30
36
31
37
float value = 0.0 ;
32
38
float recieved = 0.0 ;
@@ -44,6 +50,9 @@ int main(int argc, char** argv){
44
50
}
45
51
// recieve values from every other processes
46
52
// in a sync way
53
+
54
+
55
+
47
56
for (int i = 1 ; i < world_size ; i ++ ){
48
57
MPI_Recv (& recieved , 1 , MPI_FLOAT , i ,i , MPI_COMM_WORLD , MPI_STATUS_IGNORE ) ;
49
58
if (recieved == (float )i ){
@@ -75,28 +84,47 @@ int main(int argc, char** argv){
75
84
MPI_Isend (& value , 1 , MPI_FLOAT , i , i , MPI_COMM_WORLD , & request ) ;
76
85
}
77
86
87
+
88
+
89
+
90
+
78
91
// recieve values from every other processes
79
92
for (int i = 1 ; i < world_size ; i ++ ){
80
93
MPI_Irecv (& recieved , 1 , MPI_FLOAT , i ,i , MPI_COMM_WORLD , & request ) ;
81
94
MPI_Wait (& request , & status ) ;
82
- if (recieved == (float )i ){
83
- printf ("process %d correctly send back\n" , i );
95
+ if (recieved == (float )i * M ){
96
+ printf ("process %d correctly send back %f \n" , i , recieved );
84
97
}
85
98
else {
86
- printf ("process %d badly send back %f (%f excepted) \n" , i , recieved , (float )i );
99
+ printf ("process %d badly send back %f (%f excepted) \n" , i , recieved , (float )i * M );
87
100
}
88
- }
101
+ }
102
+
103
+ for (unsigned long long j = 0 ; j < M ; j ++ ){
104
+ #pragma omp parallel for
105
+ for (unsigned long long i = 0 ; i < N ; i ++ ){
106
+ array [i ] += world_rank * 1.0 ;
107
+ }
108
+ }
89
109
}
90
110
else if (world_rank < world_size ){
91
111
92
112
MPI_Irecv (& value , 1 , MPI_FLOAT , 0 , world_rank , MPI_COMM_WORLD , & request ) ;
113
+ MPI_Wait (& request , & status ) ;
93
114
int inc = 0 ;
94
- #pragma omp parallel for
95
- for (int i = 0 ; i < 1000 ; i ++ ){
96
- inc += 1 ;
97
- }
98
- MPI_Wait (& request , & status ) ;
99
- MPI_Isend (& value , 1 , MPI_FLOAT , 0 , world_rank , MPI_COMM_WORLD , & request ) ;
115
+
116
+
117
+
118
+ value = array [N - 1 ];
119
+ MPI_Isend (& value , 1 , MPI_FLOAT , 0 , world_rank , MPI_COMM_WORLD , & request ) ;
120
+
121
+ for (unsigned long long j = 0 ; j < M ; j ++ ){
122
+ #pragma omp parallel for
123
+ for (unsigned long long i = 0 ; i < N ; i ++ ){
124
+ array [i ] += world_rank * 1.0 ;
125
+ }
126
+ }
127
+
100
128
}
101
129
102
130
0 commit comments