Параллельное программирование на языке программирования C ++
Выполнил: Таиров Бахтиёр
студент группы 617-19
Что такое параллелизм?
Если упростить до предела, то параллелизм – это одновременное выполнение двух или более операций. В жизни он встречается на каждом шагу: мы можем одновременно идти и разговаривать или одной рукой делать одно, а второй – другое.
Говоря о параллелизме в контексте компьютеров, мы имеем в виду, что одна и та же система выполняет несколько независимых операций параллельно, а не последовательно.
Чем полезен, вреден параллелизм?
Существует две основных причины для использования параллелизма в приложении: разделение обязанностей и производительность.
Принцип простой: единственная причина не использовать параллелизм – ситуация, когда затраты перевешивают выигрыш. Часто параллельная программа сложнее для понимания, поэтому для написания и сопровождения многопоточного кода требуются дополнительные интеллектуальные усилия, а, стало быть, возрастает и количество ошибок.
Что такое многопоточность и поток?
Поток — это не что иное, как сегмент процесса. Потоки — исполняемые сущности, которые выполняют задачи, стоящие перед исполняемым приложением. Процесс завершается, когда все потоки заканчивают выполнение. Потоки можно считать облегченными процессами – каждый поток работает независимо от всех остальных, и все потоки могут выполнять разные последовательности команд.
Многопоточность (multithreading) — свойство платформы или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины
Роль ядер процессора
Каждый поток в процессе — это задача, которую должен выполнить процессор.
Большинство процессоров сегодня умеют выполнять одновременно две задачи на одном ядре, создавая дополнительное виртуальное ядро. Это называется одновременная многопоточность или многопоточность Hyper-Threading, если речь о процессоре от Intel. Эти процессоры называются многоядерными процессорами. Таким образом, двухъядерный процессор имеет 4 ядра: два физических и два виртуальных. Каждое ядро может одновременно выполнять только один поток.
История многопоточности в C++
Стандарт C++ 1998 года не признавал существования потоков, поэтому результаты работы различных языковых конструкций описывались в терминах последовательной абстрактной машины. Более того, модель памяти не была формально определена, поэтому без поддержки со стороны расширений стандарта C++ 1998 года писать многопоточные приложения вообще было невозможно.
Все изменилось с выходом стандарта C++11. Мало того что в нем определена совершенно новая модель памяти с поддержкой многопоточности, так еще и в стандартную библиотеку C++ включены классы для управления потоками, защиты разделяемых данных, синхронизации операций между потоками и низкоуровневых атомарных операций
Библиотека thread в C++
В C++11, работа с потокам осуществляется по средствам класса std::thread (доступного из заголовочного файла
Полезные функции
std::thread::hardware_concurrency()
Библиотека OpenMP
OpenMP — это библиотека для параллельного программирования вычислительных систем с общей памятью (дальше кратко описано что это за системы). Официально поддерживается Си, С++ и Фортран, однако можно найти реализации для некоторых других языков, например Паскаль и Java. Все примеры в этом «учебнике» написаны на С++.
Библиотека активно развивается, в настоящий момент актуальный стандарт версии 4.5 (выпущен в 2015 году), однако уже идет разработка версии 5.0. В тоже время, компилятор Microsoft C++ поддерживает только версию 2.0, а gcc — версию 4.0.
Библиотека OpenMP часто используется в математических вычислениях, т.к. позволяет очень быстро и без особого труда распараллелить вашу программу. При этом, идеология OpenMP не очень хорошо подойдет, скажем, при разработке серверного ПО (для этого существуют более подходящие инструменты)
Заключение
что такое параллелизм и многопоточность и почему стоит (или не стоит) использовать их в программах. Мы также рассмотрели историю многопоточности в C++ – от полного отсутствия поддержки в стандарте 1998 года через различные платформенно-зависимые расширения к полноценной поддержке в новом стандарте C++11.
Хотим мы, или не хотим, но наступает эра многоядерных/многопроцессорных систем, способных эффективно исполнять правильно спроектированные приложения. Или же демонстрировать ужасную производительность привычных решений -- выбор за нами!
Что ещё почитать?
C++ Concurrency in ActionPractical MultithreadingAnthony WilliamsFebruary, 2012 | 528 pages ISBN: 9781933988771
Разные блоги, например:
https://habr.com/ru/company/otus/blog/549814/
Список литературы
https://www.rulit.me/data/programs/resources/pdf/Uilyams_Parallelnoe-programmirovanie-na-C-v-deystvii_RuLit_Me_606110.pdf
https://pro-prof.com/archives/4335
https://pro-prof.com/archives/1150
https://medium.com/nuances-of-programming/c-многопоточность-конкурентность-и-параллелизм-основы-86bfa8679aed
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.