В практике ркассматриваются следующие технологии параллельного программирования:
- MPI
- OpenMP
- TBB
- 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
Переходим в директорию с исходным кодом parallel_programming_course
.
- Получаем конфигурационные файлы для сборки: 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
. Находим директорию соотвествующую вашей задаче и переходим в нее. Создаем папку с названием<фамилия>_<инициал имени>_<краткое название задачи>_<технология (mpi, omp, tbb)>
. К примеру:task1/nesterov_a_vector_sum_omp
. -
В той же директории находим файл:
CMakeLists.txt
. К примеру:task1/CMakeLists.txt
. Добавляем в этот файл наши измнения для того, чтобы проект видел нашу папку с задачей:message(STATUS "Task 1") ... add_subdirectory(nesterov_a_vector_sum_omp) ...
-
Теперь переходим в созданную нами директорию и начинаем работу над задачей. В данной директории должны быть всего 2 файла и оба написанных вами:
main.cpp
- исходной код вашей задачи.CMakeLists.txt
- конфигурация вашего проекта. Пример для каждой конфигурации находятся в директорииtest_tasks
. Единственное, что нужно указать - название вашего подпроекта - название аналогично названию вашей папки:
set(PROJECT_NAME "nesterov_a_vector_sum_omp") ...
-
Название pull-request'а выглядит следующим образом:
<Фамилия Имя>. Задача <Номер задачи>. <Полное название задачи>. Нестеров Александр. Задач 1. Сумма элементов вектора.
и отправляется в проект allnes/parallel_programming_course
-
В описание pull-request'а пишем полную постановку задачи.
Пример pull-request'а находится в pull-request'ах проекта.
-
Работаем со своим fork-репозитроием. Работаем в отдельной ветке и НЕ в
master
!!! Название ветки аналогично названию директории для вашей задачи. К примеру создание ветки:git checkout -b nesterov_a_vector_sum_omp
Для проверки стиля кодирования используется Google C++ Style.
- Описание стиля находится здесь.
- Проверить стиль можно с помощью скрипта:
python scripts/lint.py
Невывполнение правил ведет к покраснению сборки проекта.