@@ -25,26 +25,40 @@ bool nesterov_a_test_task_mpi::TestTaskMPI::ValidationImpl() {
25
25
}
26
26
27
27
bool nesterov_a_test_task_mpi::TestTaskMPI::RunImpl () {
28
+ MultiplyMatrixBasedOnRank ();
29
+ return true ;
30
+ }
31
+
32
+ void nesterov_a_test_task_mpi::TestTaskMPI::MultiplyMatrixBasedOnRank () {
28
33
int rank = -1 ;
29
34
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
30
35
31
- auto multiply = [this ](bool row_major) {
32
- for (int i = 0 ; i < rc_size_; ++i) {
33
- for (int j = 0 ; j < rc_size_; ++j) {
34
- int sum = 0 ;
35
- for (int k = 0 ; k < rc_size_; ++k) {
36
- int a = input_[(row_major ? i : k) * rc_size_ + (row_major ? k : i)];
37
- int b = input_[(row_major ? k : j) * rc_size_ + (row_major ? j : k)];
38
- sum += a * b;
39
- }
40
- output_[(i * rc_size_) + j] += sum;
36
+ if (rank == 0 ) {
37
+ MultiplyRowMajor ();
38
+ } else {
39
+ MultiplyColumnMajor ();
40
+ }
41
+ MPI_Barrier (MPI_COMM_WORLD);
42
+ }
43
+
44
+ void nesterov_a_test_task_mpi::TestTaskMPI::MultiplyRowMajor () {
45
+ for (int i = 0 ; i < rc_size_; ++i) {
46
+ for (int j = 0 ; j < rc_size_; ++j) {
47
+ for (int k = 0 ; k < rc_size_; ++k) {
48
+ output_[(i * rc_size_) + j] += input_[(i * rc_size_) + k] * input_[(k * rc_size_) + j];
41
49
}
42
50
}
43
- };
51
+ }
52
+ }
44
53
45
- multiply (rank == 0 );
46
- MPI_Barrier (MPI_COMM_WORLD);
47
- return true ;
54
+ void nesterov_a_test_task_mpi::TestTaskMPI::MultiplyColumnMajor () {
55
+ for (int j = 0 ; j < rc_size_; ++j) {
56
+ for (int k = 0 ; k < rc_size_; ++k) {
57
+ for (int i = 0 ; i < rc_size_; ++i) {
58
+ output_[(i * rc_size_) + j] += input_[(i * rc_size_) + k] * input_[(k * rc_size_) + j];
59
+ }
60
+ }
61
+ }
48
62
}
49
63
50
64
bool nesterov_a_test_task_mpi::TestTaskMPI::PostProcessingImpl () {
0 commit comments