В практике рассматриваются следующие технологии параллельного программирования:
- MPI
- OpenMP
- TBB
- Не отлаживаемся в репозитории, для этого у вас есть локальные машины и все скрипты (стиль кодирования)
- Уважаем время других и не задерживаем очередь
- Тщательно проверяем программу на зависания
Проект не будет собираться полностью пока вы не скачаете все модули репозитория командой:
git submodule update --init --recursive
- Windows (MSVC):
Ссылка на установочные файлы здесь.
Обязательно надо установить следующие файлы:
msmpisdk.msi
иmsmpisetup.exe
- Linux (gcc и clang):
sudo apt install mpich
sudo apt install openmpi-bin
sudo apt install libopenmpi-dev
- MacOS (apple clang):
brew install open-mpi
OpenMP встроен в компиляторы gcc
и msvc
, но все таки часть компонент нужно установить для некоторых систем:
- Linux (gcc и clang):
sudo apt install libomp-dev
- MacOS (apple clang): Система сильно нестабильная, пока не рекомендуется использовать ее для OpenMP!
brew install libomp
- Windows (MSVC): CMake при использовании этого проекта на Windows сам устанвливает TBB.
- Linux (gcc и clang):
sudo apt-get install libtbb-dev
- MacOS (apple clang):
brew install tbb
Переходим в директорию с исходным кодом.
- Получаем конфигурационные файлы для сборки: makefile, .sln и т.д.
mkdir build
cd build
cmake -D USE_MPI=ON -D USE_OMP=ON -D USE_TBB=ON ..
cd ..
Комментарий про ключи CMake:
-D USE_MPI=ON
отвечает за сборку зависимостей и проектов свзанных с MPI.-D USE_OMP=ON
отвечает за сборку зависимостей и проектов свзанных с OpenMP.-D USE_TBB=ON
отвечает за сборку зависимостей и проектов свзанных с TBB.
Соотвественно, если что-то не потребуется, то флаг можно не указывать.
- Собираем проект:
cmake --build build --config RELEASE
- Находим и запускаем исполняемый файл в директории
<наш проект>/build/bin
-
В директории
modules
есть папки с задачами:task_1
,task_2
,task_3
. Находим директорию соотвествующую вашей задаче и переходим в нее. Создаем папку с названием<фамилия>_<инициал имени>_<краткое название задачи>
. К примеру:task1/nesterov_a_vector_sum
. -
Теперь переходим в созданную нами директорию и начинаем работу над задачей. В данной директории должны быть всего 4 файла и все (кроме
CMakeLists.txt
) написанные вами:main.cpp
- google тесты для вашей задачи, количество тестов должно быть 5 или больше.vector_sum.h
- заголовочный файл с прототипами функций вашей задачи, название файла такое же, как и<краткое название задачи>
.vector_sum.cpp
- исходные коды реализации функций вашей задачи, название файла такое же, как и<краткое название задачи>
.CMakeLists.txt
- конфигурация вашего проекта. Пример для каждой конфигурации находятся в директорииtest_tasks
.
-
Название pull-request'а выглядит следующим образом:
<Фамилия Имя>. Задача <Номер задачи (Их 3 в этом семестре)>. <Полное название задачи>. Нестеров Александр. Задач 1. Сумма элементов вектора.
-
В описание pull-request'а пишем полную постановку задачи.
Пример pull-request'а находится в pull-request'ах проекта.
-
Работаем со своим fork-репозитроием. Работаем в отдельной ветке и НЕ в
master
!!! Название ветки аналогично названию директории для вашей задачи. К примеру создание ветки:git checkout -b nesterov_a_vector_sum
-
В директории
reports
размещаем pdf-файл с отчетом. Отчет должен называться следующим образом -<фамилия>_<инициал имени>_<краткое название задачи>.pdf
nesterov_a_vector_sum.pdf
-
Название pull-request'а для отчета выглядит следующим образом:
<Фамилия Имя>. Отчет. <Полное название задачи>. Нестеров Александр. Отчет. Сумма элементов вектора.
Для проверки стиля кодирования используется Google C++ Style.
- Описание стиля находится здесь.
- Проверить стиль можно с помощью скрипта:
python scripts/lint.py
Невывполнение правил ведет к покраснению сборки проекта.