-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsection7_1.tex
More file actions
25 lines (25 loc) · 4.4 KB
/
section7_1.tex
File metadata and controls
25 lines (25 loc) · 4.4 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
{ %section7_1
\subsection{Порядок выполнения работы}
\begin{enumerate}
\itemВ программе, полученной в результате выполнения ЛР-3, так изменить этап Generate, чтобы генерируемый набор случайных чисел не зависел от количества потоков, выполняющих программу. Например, на каждой итерации $i$ перед вызовом rand\textunderscore r можно вызывать функцию srand(f(i)), где f – произвольно выбранная функция. Можно придумать и использовать любой другой способ.
\itemЗаменить вызовы функции gettimeofday на omp\textunderscore get\textunderscore wtime.
\itemРаспараллелить вычисления на этапе Sort, для чего выполнить сортировку в два этапа:
\begin{itemize}
\itemОтсортировать первую и вторую половину массива в двух независимых нитях (можно использовать OpenMP-директиву ''parallel sections'');
\itemОбъединить отсортированные половины в единый массив.
\end{itemize}
\itemНаписать функцию, которая один раз в секунду выводит в консоль сообщение о текущем проценте завершения работы программы. Указанную функцию необходимо запустить в отдельном потоке, параллельно работающем с основным вычислительным циклом.
\itemОбеспечить прямую совместимость (forward compatibility) написанной параллельной программы. Для этого все вызываемые функции вида «omp\textunderscore *» можно условно переопределить в препроцессорных директивах, например, так:
\begin{figure}[H]
\lstinputlisting{lab4Example.cpp}
\end{figure}
\itemПровести эксперименты, варьируя $N$ от $min(\frac{N_x}{2},\;N_1)$ до $N_2$, где значения $N_1$ и $N_2$ взять из ЛР-1, а $N_x$ – это такое значение $N$, при котором накладные расходы на распараллеливание превышают выигрыш от распараллеливания. Написать отчёт о проделанной работе. Подготовиться к устным вопросам на защите.
\item\textbf{Необязательное задание на «четвёрку» и «пятёрку».} Уменьшить количество итераций основного цикла с 100 до 10 и провести эксперименты, замеряя время выполнения следующими методами:
\begin{itemize}
\itemИспользование минимального из десяти полученных замеров;
\itemРасчёт по десяти измерениям доверительного интервала с уровнем доверия 95\%.
\end{itemize}
Привести графики параллельного ускорения для обоих методов в одной системе координат, при этом нижнюю и верхнюю границу доверительного интервала следует привести двумя независимыми графиками.
\item\textbf{Необязательное задание на «пятёрку»:} в п.3 задания на этапе Sort выполнить параллельную сортировку не двух частей массива, а $k$ частей в $k$ нитях (тредах), где $k$ – это количество процессоров (ядер) в системе, которое становится известным только на этапе выполнения программы с помощью команды \\«k = omp\textunderscore get\textunderscore num\textunderscore procs()».
\end{enumerate}
}