Giter VIP home page Giter VIP logo

parallel_programming_course's Introduction

Build Status Build status

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

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

  • MPI
  • OpenMP
  • TBB

Правила работы

  1. Не отлаживаемся в репозитории, для этого у вас есть локальные машины и все скрипты (стиль кодирования)
  2. Уважаем время других и не задерживаем очередь
  3. Тщательно проверяем программу на зависания

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.

  • Теперь переходим в созданную нами директорию и начинаем работу над задачей. В данной директории должны быть всего 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
    

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

parallel_programming_course's People

Contributors

akonia avatar anastasiaasenina avatar antongrishin avatar chernenko-valery avatar danielvolkov52 avatar denmur725 avatar dmtrii-kg avatar ermachenkoboris avatar homksei avatar juliakamelina avatar katerina394 avatar kjlacchoeum9l avatar kudrinmatvey avatar mcf11y avatar nastya1204 avatar nifadyev avatar nkasmazy avatar palidos avatar panovaelena avatar pavjelv avatar saufaer avatar sharovia avatar tolstikov98 avatar usovama avatar vadimkutovoi avatar varvarapozdeeva avatar xnd-r avatar yakovdeleon avatar your0mind avatar zinovievvladimir avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.