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

your0mind avatar saufaer avatar palidos avatar usovama avatar zinovievvladimir avatar homksei avatar xnd-r avatar antongrishin avatar kjlacchoeum9l avatar katerina394 avatar panovaelena avatar nifadyev avatar varvarapozdeeva avatar yakovdeleon avatar akonia avatar panzer2344 avatar gachiman avatar alicenov avatar anastasiaasenina avatar artem-volkov avatar ermachenkoboris avatar chernenko-valery avatar danielvolkov52 avatar daryabatova avatar denmur725 avatar dmitrysitkin avatar dubovskoyandrey avatar haxaji2012 avatar imadzuma avatar juliaevd 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.