KudrinMatvey / parallel_programming_course

Практический курс по параллельному программированию.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Build status

Практика по параллельному программированию

В практике ркассматриваются следующие технологии параллельного программирования:

  • MPI
  • OpenMP
  • TBB

1. Установка компонент для корректной работы

MPI

  • 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

OpenMP встроен в компиляторы gcc и msvc, но все таки часть компонент нужно установить для некоторых систем:

  • Linux (gcc и clang):
sudo apt install libomp-dev
  • MacOS (apple clang): Система сильно нестабильная, пока не рекомендуется использовать ее для OpenMP!
brew install libomp

TBB

  • Windows (MSVC): CMake при использовании этого проекта на Windows сам устанвливает TBB.
  • Linux (gcc и clang):
sudo apt-get install libtbb-dev
  • MacOS (apple clang):
brew install tbb

2. Построение проекта с помощью CMake

Переходим в директорию с исходным кодом parallel_programming_course.

  1. Получаем конфигурационные файлы для сборки: 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.

Соотвественно, если что-то не потребуется, то флаг можно не указывать.

  1. Собираем проект:
cmake --build build --config RELEASE
  1. Находим и запускаем исполняемый файл в директории <наш проект>/build/bin

3. Инстркция по размещению своих исходных кодов в проекте

  • В директории modules есть папки с задачами: task_1, task_2, task_3. Находим директорию соотвествующую вашей задаче и переходим в нее. Создаем папку с названием <фамилия>_<инициал имени>_<краткое название задачи>_<технология (mpi - для программ написанных с помощью MPI, omp - для программ с последовательным кодом или написанных на OpenMP, tbb - для программ написанных с помощью 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
    

Невывполнение правил ведет к покраснению сборки проекта.

About

Практический курс по параллельному программированию.


Languages

Language:C++ 58.0%Language:CMake 38.8%Language:Python 1.9%Language:Shell 0.8%Language:Batchfile 0.6%