-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathintroduction.tex
More file actions
17 lines (16 loc) · 6.68 KB
/
introduction.tex
File metadata and controls
17 lines (16 loc) · 6.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{ %introduction
\phantomsection
\section*{Введение}
\addcontentsline{toc}{section}{Введение}
\parВ настоящее время большинство выпускаемых микропроцессоров являются многоядерными. Это касается не только настольных компьютеров, но и в том числе мобильных телефонов и планшетов (исключением пока являются только встраиваемые вычислительные системы). Для полной реализации потенциала многоядерной системы программисту необходимо использовать специальные методы параллельного программирования, которые становятся всё более востребованными в промышленном программировании. Однако методы параллельного программирования ощутимо сложнее для освоения, чем традиционные методы написания последовательных программ.
\parЦелью настоящего учебного пособия является описание практических заданий (лабораторных работ), которые можно использовать для закрепления теоретических знаний, полученных в рамках лекционного курса, посвященного технологиям параллельного программирования. Кроме этого, в пособии в сжатой форме излагаются основные принципы параллельного программирования.%, при этом теоретический материал даётся тезисно и поэтому для полноценного освоения требуется использовать конспекты лекций по соответствующей дисциплине.
\parПри программировании многопоточных приложений приходится решать конфликты, возникающие при одновременном доступе к общей памяти нескольких потоков. Для синхронизации одновременного доступа к общей памяти в настоящее время используются следующие три концептуально различных подхода:
\begin{enumerate}
\item\textbf{Явное использование блокирующих примитивов}\quad(мьютексы, семафоры, условные переменные). Этот подход исторически появился первым и сейчас является наиболее распространённым и поддерживаемым в большинстве языков программирования. Недостатком метода является достаточно высокий порог вхождения, т.к. от программиста требуется в ''ручном режиме'' управлять блокирующими примитивами, отслеживая конфликтные ситуации при доступе к общей памяти.
\item\textbf{Применение программной транзакционной памяти}\quad(Software\\ Transactional Memory, STM). Этот метод проще в освоении и применении, чем предыдущий, однако до сих пор имеет ограниченную поддержку в компиляторах, а также в полной мере он сможет себя проявить при более широком распространении процессоров с аппаратной поддержкой STM.
\item\textbf{Использование неблокирующих алгоритмов}\quad(lockless, lock-free,\\wait-free algorithms). Этот метод подразумевает полный отказ от применения блокирующих примитивов при помощи сложных алгоритмических ухищрений. При этом для корректного функционирования неблокирующего алгоритма требуется, чтобы процессор поддерживал специальные атомарные (бесконфликтные) операции вида ''сравнить и обменять'' (cmpxchg, ''compare and swap''). На данный момент большинство процессоров имеют в составе системы команд этот тип операций (за редким исключением, например: ''SPARC 32'').
\end{enumerate}
\parПредлагаемое вниманию методическое пособие посвящено первому из перечисленных методов, т.к. он получил наибольшее освещение в литературе и наибольшее применение в промышленном программировании. Два других метода могут являться предметом изучения углублённых учебных курсов, посвященных параллельным вычислениям.
\parАвторы ставили целью предложить читателям изложение основных концепций параллельного программирования в сжатой форме в расчёте на самостоятельное изучение пособия в течение двух-трёх месяцев. При использовании пособия в технических вузах рекомендуется приведённый материал использовать в качестве односеместрового учебного курса в рамках %бакалаврской
подготовки студентов по направлению подготовки ''Программная инженерия'' или смежных с ней.% Однако приводимые примеры практических заданий могут быть при желании адаптированы для использования в магистерских курсах.
}