@@ -25,26 +25,40 @@ bool nesterov_a_test_task_mpi::TestTaskMPI::ValidationImpl() {
2525}
2626
2727bool nesterov_a_test_task_mpi::TestTaskMPI::RunImpl () {
28+ MultiplyMatrixBasedOnRank ();
29+ return true ;
30+ }
31+
32+ void nesterov_a_test_task_mpi::TestTaskMPI::MultiplyMatrixBasedOnRank () {
2833 int rank = -1 ;
2934 MPI_Comm_rank (MPI_COMM_WORLD, &rank);
3035
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];
4149 }
4250 }
43- };
51+ }
52+ }
4453
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+ }
4862}
4963
5064bool nesterov_a_test_task_mpi::TestTaskMPI::PostProcessingImpl () {
0 commit comments