повысить mpi неблокирование + сбор иерархии - PullRequest
0 голосов
/ 10 июня 2019

У меня есть многопроцессорная программа, использующая Visual C ++ и Boost MPI.Каждый процесс разбивает на части и, в конце концов, процесс 0 собирает все результаты и суммирует.Ниже приведена выдержка из кода (poolummary - это класс, использующий сериализацию Boost)

  if(rank == 0){
            vector<poolsummary> ps_;
            vector<poolsummary> ps2_;
            gather(world, ps, ps_, 0);
            gather(world, ps2, ps2_, 0);
            for(int i = 1; i < size;i++){
                ps_[0].updateFromPool(ps_[i]);
                ps2_[0].updateFromPool(ps2_[i]);
            }
            ps_[0].Save_file(asp.SCENARIO_PATH);
            ps2_[0].Save_file2(asp.SCENARIO_PATH);
            vector<poolsummary>().swap(ps_);
            vector<poolsummary>().swap(ps2_);
        }else{
            gather(world, ps, 0);
            gather(world, ps2, 0);
        }

Программе все еще нужно собрать два дополнительных класса (назовем их Hist и Rep).

Обычно я запускаю эту программу, используя 64 процессора, и у этой части сборки есть длинный хвост.Я думаю, что можно улучшить производительность двумя способами: 1. Используя неблокирующую сборку или что-то в этом роде. 2. Сгруппируйте процессы в 8 групп (например, процессы 0-7 в группе 1, процессы 8-15 в группе 2 ...);Затем сначала соберите группу в каждой группе, а затем соберите группы

Может ли кто-нибудь помочь мне, если эти решения будут работать?Если нет, каковы возможные пути улучшения производительности?Это так, как реализовать эти два?Большое спасибо за ваше время.

...