Разработка и сборка программы


Разработка кода

Допустим, ваша задача называется vector_sum.

MPI & Google Test

Подключение нужных заголовочных файлов в main.cpp для Google Test:

#include <mpi.h>
#include <gtest-mpi-listener.hpp>
#include <gtest/gtest.h>

Возможная реализация main при использовании Google Test совместно с MPI:

int main(int argc, char* argv[]) {
    ::testing::InitGoogleTest(&argc, argv);
    MPI_Init(&argc, &argv);

    ::testing::AddGlobalTestEnvironment(new GTestMPIListener::MPIEnvironment);
    ::testing::TestEventListeners &listeners = ::testing::UnitTest::GetInstance()->listeners();

    listeners.Release(listeners.default_result_printer());
    listeners.Release(listeners.default_xml_generator());

    listeners.Append(new GTestMPIListener::MPIMinimalistPrinter);
    return RUN_ALL_TESTS();
}

Цикл сборки с помощью CMake

  1. Перейдите в папку build вашего репозитория. Если ее нет, создайте ее: mkdir build && cd build
  2. Создайте служебные файлы сборки с помощью CMake. Для этого, находясь в папке build, выполните одну из команд ниже:

    • Для сборки с MPI: cmake -DUSE_MPI=ON ..
    • другие команды будут добавлены позже (пока что не требуются)

    На этом этапе ошибок возникнуть не должно. Вы должны увидеть сообщение об успехе:

    -- Configuring done
    -- Generating done
    -- Build files have been written to: .../pp_2020_autumn_informatics/build
  3. Запустите компиляцию программы. Для этого, находясь в папке build, выполните команду cmake --build .

    Вы можете запустить сборку только для своего проекта, используя аргумент --target. Например, если ваша папка называется ivanov_i_vector_sum, то выполните такую команду:

    cmake --build . --target ivanov_i_vector_sum_mpi
  4. После завершения сборки с помощью обнаруженного в системе компилятора изучите список выведенных ошибок в ваших файлах с кодом (если они есть) и исправьте их.

Запуск программы

Собранные таким образом файлы находятся в папке build/bin репозитория. Запускать их на нескольких процессах можно с помощью утилиты mpiexec. Пример запуска программы на 4 процессах:

mpiexec -n 4 ./bin/ivanov_i_vector_sum_mpi

Обратите внимание, что ваша программа должна корректно работать для любого положительного числа процессов.