Попытка найти лучший способ объединить результаты вычислений в разных потоках (OpenMP) - PullRequest
0 голосов
/ 07 ноября 2019

Задача - найти матрицу. Есть две независимые части расчета, которые могут выполняться разными потоками одновременно. Итак, я разделил всю работу на группы из четырех потоков. Когда вся работа выполняется каждой группой потоков, мне нужно объединить результат расчетов. Для этого я создал еще одну параллельную область, чтобы убедиться, что вся подготовительная работа выполнена, прежде чем я начну вычислять окончательный результат.

Результат верный и работает правильно, но есть издержки, так как я создал еще одну параллельную область только для выполнения одной простой задачи. Можно ли избежать создания параллельной параллельной области и обеспечить более точное выполнение кода одновременно?

            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);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...