Задача - найти матрицу. Есть две независимые части расчета, которые могут выполняться разными потоками одновременно. Итак, я разделил всю работу на группы из четырех потоков. Когда вся работа выполняется каждой группой потоков, мне нужно объединить результат расчетов. Для этого я создал еще одну параллельную область, чтобы убедиться, что вся подготовительная работа выполнена, прежде чем я начну вычислять окончательный результат.
Результат верный и работает правильно, но есть издержки, так как я создал еще одну параллельную область только для выполнения одной простой задачи. Можно ли избежать создания параллельной параллельной области и обеспечить более точное выполнение кода одновременно?
omp_set_nested(1);
#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 0) {
#pragma omp parallel num_threads(4)
{
transposeMatrix(A, TrA);
multiplyMatrix(TrA, B, R1);
subtractMatrix(D, R1, R2);
}
} else {
#pragma omp parallel num_threads(4)
{
reverseMatrix(C, eC, rC);
}
}
}
#pragma omp parallel num_threads(4)
{
addUpMatrices(rC, R2, R3);
}