Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int *index = new int[PR_count];
- int *count = new int[PR_count];
- int rest_rows = size;
- int row_number = size / PR_count;
- count[0] = row_number * size;
- index[0] = 0;
- for (int i = 1; i < PR_count; i++)
- {
- rest_rows -= row_number;
- row_number = rest_rows / (PR_count - i);
- count[i] = row_number * size;
- index[i] = index[i - 1] + count[i - 1];
- }
- double *cur_row = new double[count[PR_rank]];
- MPI_Scatterv(get_ptr(), count, index, MPI_DOUBLE, cur_row, count[PR_rank], MPI_DOUBLE, 0, MPI_COMM_WORLD);
- double *res_part = new double[count[PR_rank]];
- for (int i = 0; i < count[PR_rank] / size; i++)
- {
- res_part[i] = 0;
- for (int j = 0; j < size; j++)
- {
- res_part[i] += cur_row[j + i * size] * cur.get_ptr()[j];
- }
- }
- double *res_row = new double[size];
- for (int i = 0; i < PR_count; i++)
- {
- index[i] /= size;
- count[i] /= size;
- }
- MPI_Allgatherv(res_part, count[PR_rank], MPI_DOUBLE, res_row, count, index, MPI_DOUBLE, MPI_COMM_WORLD);
- Column result(size);
- for (int l = 0; l < size; ++l)
- {
- result.set(l, res_row[l]);
- }
- delete[] index;
- delete[] cur_row;
- delete[] res_part;
- delete[] res_row;
- delete[] count;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement