-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsection1_5.tex
More file actions
25 lines (25 loc) · 3.61 KB
/
section1_5.tex
File metadata and controls
25 lines (25 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{ %section1_5
\subsection{Автоматическое распараллеливание программ}
\parПараллельное программирование – достаточно сложный ручной процесс, поэтому кажется очевидной необходимость его автоматизировать с помощью компилятора. Такие попытки делаются, однако эффективность автораспараллеливания пока что оставляет желать лучшего, т.к. хорошие показатели параллельного ускорения достигаются лишь для ограниченного набора простых for-циклов, в которых отсутствуют зависимости по данным между итерациями и при этом количество итераций не может измениться после начала цикла. Но даже если два указанных условия в некотором for-цикле выполняются, но он имеет сложную неочевидную структуру, то его распараллеливание производиться не будет. Виды автоматического распараллеливания:
\begin{itemize}
\item\textit{Полностью автоматический:}\quadучастие программиста не требуется, все действия выполняет компилятор.
\item\textit{Полуавтоматический:}\quadпрограммист даёт указания компилятору в виде специальных ключей, которые позволяют регулировать некоторые аспекты распараллеливания.
\end{itemize}
\parСлабые стороны автоматического распараллеливания:
\begin{itemize}
\itemВозможно ошибочное изменение логики программы.
\itemВозможно понижение скорости вместо повышения.
\itemОтсутствие гибкости ручного распараллеливания.
\itemЭффективно распараллеливаются только циклы.
\itemНевозможность распараллелить программы со сложным алгоритмом работы.
\end{itemize}
\parПриведём примеры того, как с-программа в файле src.c может быть автоматически распараллелена при использовании некоторых популярных компиляторов:
\begin{itemize}
\itemКомпилятор GNU Compiler Collection:
gcc -O3 -floop-parallelize-all -ftree-parallelize-loops=K -fdump-tree-parloops-details src.c. При этом программисту даётся возможность выбрать значение параметра K, который рекомендуется устанавливать равным количеству ядер (процессоров). Особенностям реализации автораспараллеливания в gcc посвящён самостоятельный проект:\\ \url{https://gcc.gnu.org/wiki/AutoParInGCC}.
\itemКомпилятор фирмы Intel:
icc -c -parallel -par-report file.cc
\itemКомпилятор фирмы Oracle:
solarisstudio -cc -O3 -xautopar -xloopinfo src.c
\end{itemize}
}