Отдельные процессы будут сортировать подмножество родительского массива.Но после того, как мастер-процесс соберет все эти подмножества, для родительского массива должна быть выполнена одна сортировка.
например,
исходный массив = {1,7,2,3, 10,4,8,0, 11,5,9,6}
после процесса рассеяния1: {1,7,2,3} процесс 2: {10,4,8,0} процесс 3: {11,5,9,6}
и сортировка отдельных процессов: {1,2, 3,7}, {0,4,8,10}, {5,6,9,11}
, таким образом, после сбора вы получите исходный массив как {1,2,3,7, 0, 4,8,10, 5,6,9,11}
Таким образом, должен быть сделан еще один проход сортировки.
Редактировать:
Одно из решений было бы (Это может быть дополнительно оптимизировано): вместо использования рассеяния и сбора данных в формате mpi используйте обычную отправку и получение MPI. Главный процесс / узел передает данные фиктивному главному процессу / узлу, который далее делит их на остальные узлы.Последняя строка узлов может сортировать подмножество данных и возвращать отсортированные подмножества своим родителям.
после того, как родители получат индивидуально отсортированные подмножества, они будут сортировать отсортированные подмножества и предоставлять свои наборы своим родителям.
Этот подход может быть дополнительно оптимизирован.