@@ -16,10 +16,10 @@ using namespace std;
16
16
17
17
18
18
// function declarations
19
- vector<int > get_master_data (int & N, int & my_rank);
19
+ vector<int > get_master_data (int N, int my_rank);
20
20
tuple<int , int > initialize_MPI (int argc, char **argv);
21
- void print_rank_vector (vector<int > vec, int position, int my_rank);
22
-
21
+ void print_rank_vector (vector<int >& vec, int position, int my_rank);
22
+ vector< int > scatter_data (vector< int >& data, int my_rank, int num_proc);
23
23
24
24
int main (int argc, char **argv)
25
25
{
@@ -32,15 +32,13 @@ int main(int argc, char **argv)
32
32
// construct data that will be scattered
33
33
auto master_data = get_master_data (N, my_rank);
34
34
35
- // create vector that will hold the scatter data
36
- vector<int > data (2 );
37
-
38
- MPI_Barrier (MPI_COMM_WORLD); // blocking call
39
35
40
- MPI_Scatter ( master_data.data () , 2 , MPI_INT, data.data () , 2 , MPI_INT , 0 , MPI_COMM_WORLD);
41
36
42
37
print_rank_vector (data, 2 , my_rank);
43
38
39
+
40
+ // MPI_Barrier(MPI_COMM_WORLD); // blocking call
41
+
44
42
// // flag to say what to print
45
43
// int print_flag = stoi(argv[2]);
46
44
@@ -101,6 +99,10 @@ int main(int argc, char **argv)
101
99
}
102
100
103
101
tuple<int , int > initialize_MPI (int argc, char **argv){
102
+ /* *
103
+ * Initializes MPI and returns the number of
104
+ * processes and the rank of the running process.
105
+ */
104
106
105
107
// initialize MPI
106
108
MPI_Init (&argc , &argv);
@@ -116,7 +118,12 @@ tuple<int, int> initialize_MPI(int argc, char **argv){
116
118
return {num_proc,my_rank};
117
119
}
118
120
119
- void print_rank_vector (vector<int > vec, int position, int my_rank){
121
+ void print_rank_vector (vector<int >& vec, int position, int my_rank){
122
+ /* *
123
+ * A simple helper function that will print the rank of the
124
+ * running process and then print the input vector up until
125
+ * the given position.
126
+ */
120
127
121
128
for (int j = 0 ; j < position; j++)
122
129
{
@@ -132,7 +139,7 @@ void print_rank_vector(vector<int> vec, int position, int my_rank){
132
139
}
133
140
134
141
135
- vector<int > get_master_data (int & N, int & my_rank){
142
+ vector<int > get_master_data (int N, int my_rank){
136
143
/* *
137
144
* Constructs an array filled with values 1 to N,
138
145
* if my_rank is zero, else creates an empty array,
@@ -154,4 +161,20 @@ vector<int> get_master_data(int& N, int& my_rank){
154
161
}
155
162
156
163
return master_data;
164
+ }
165
+
166
+ vector<int > scatter_data (vector<int >& input_data, int my_rank, int num_proc){
167
+ /* *
168
+ * A function that scatters the input data to all
169
+ * processes in MPI_COMM_WORLD.
170
+ */
171
+
172
+
173
+
174
+ // create vector that will hold the scatter data
175
+ vector<int > local_data (2 );
176
+
177
+ MPI_Scatter ( input_data.data () , 2 , MPI_INT, local_data.data () , 2 , MPI_INT , 0 , MPI_COMM_WORLD);
178
+
179
+ return local_data;
157
180
}
0 commit comments