-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsection4_1.tex
More file actions
30 lines (29 loc) · 6.5 KB
/
section4_1.tex
File metadata and controls
30 lines (29 loc) · 6.5 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
26
27
28
29
30
{ %section4_1
\subsection{Порядок выполнения работы}
\begin{enumerate}
\itemНа компьютере с многоядерным процессором установить ОС Linux и компилятор GCC версии не ниже 4.7.2. При невозможности установить Linux или отсутствии компьютера с многоядерным процессором можно выполнять лабораторную работу на виртуальной машине. Минимальное количество ядер при использовании виртуальной машины - 2.
\itemНа языке Cи написать консольную программу lab1.c, решающую задачу, указанную в п.IV (см. ниже). В программе нельзя использовать библиотечные функции сортировки, выполнения матричных операций и расчёта статистических величин. В программе
нельзя использовать библиотечные функции, отсутствующие в стандартных заголовочных файлах stdio.h, stdlib.h, math.h, sys/time.h. Задача должна решаться 100 раз с разными начальными значениями генератора случайных чисел (ГСЧ). Структура программы примерно следующая:
\begin{figure}[H]
\lstinputlisting{lab1Example.cpp}
\end{figure}
\itemСкомпилировать написанную программу без использования автоматического распараллеливания с помощью следующей команды: /home/user/gcc -O3 -Wall -Werror -o lab1-seq lab1.c
\itemСкомпилировать написанную программу, используя встроенное в gcc средство автоматического распараллеливания Graphite с помощью следующей команды “/home/user/gcc -O3 -Wall -Werror -floop-parallelize-all -ftree-parallelize-loops=K lab1.c -o lab1-par-K” (переменной K поочерёдно присвоить хотя бы 4 значения: 1, меньше количества ядер, равное количеству физических ядер и больше количества физических ядер).
\itemВ результате получится одна нераспараллеленная программа и четыре или более распараллеленных.
\itemЗакрыть все работающие в операционной системе прикладные программы (включая Winamp, uTorrent, браузеры и Skype), чтобы они не влияли на результаты последующих экспериментов. При использовании ноутбука необходимо иметь постоянное подключение к сети питания, на время проведения эксперимента.
\itemЗапускать файл lab1-seq из командной строки, увеличивая значения N до значения N1, при котором время выполнения превысит 0.01 с. Подобным образом найти значение N=N2, при котором время выполнения превысит 5 с.
\itemИспользуя найденные значения N1 и N2, выполнить следующие эксперименты (для автоматизации проведения экспериментов рекомендуется написать скрипт):
\begin{itemize}
\itemзапускать lab1-seq для значений \\$N\;=\;{N1,\;N1+\Delta,\;N1+2\Delta,\;N1+3\Delta,…,\;N2}$ и записывать получающиеся значения времени delta\textunderscore ms(N) в функцию $seq(N)$;
\itemзапускать lab1-par-K для значений \\$N\;=\;{N1,\;N1+\Delta,\;N1+2\Delta,\;N1+3\Delta,…,\;N2}$ и записывать получающиеся значения времени delta\textunderscore ms(N) в функцию $par-K(N)$;
\itemзначение $\Delta$ выбрать так: $\Delta\;=\;(N2\;-\;N1)/10$.
\end{itemize}
\itemПровести верификацию значения X. Добавить в конец цикла вывод значения X и изменить количество экспериментов на 5. Сравнить значения X для распараллеленной программы и не распараллеленной.
\itemНаписать отчёт о проделанной работе.
\itemПодготовиться к устным вопросам на защите.
\itemНайти вычислительную сложность алгоритма до и после распараллеливания, сравнить полученные результаты.
\sloppy
\item\textbf{Необязательное задание №1 (для получения оценки «четыре» и «пять»).} Провести аналогичные описанным эксперименты, используя вместо gcc компилятор Solaris Studio (или любой другой на своё усмотрение). При компиляции следует использовать следующие опции для автоматического распараллеливания: \verb+«solarisstudio -cc -O3 -xautopar -xloopinfo lab1.c»+.
\item\textbf{Необязательное задание №2 (для получения оценки «пять»).} Это задание выполняется только после выполнения предыдущего пункта. Провести аналогичные описанным эксперименты, используя вместо gcc компилятор Intel ICC (или любой другой на своё усмотрение). В ICC следует при компиляции использовать следующие опции для автоматического распараллеливания: «icc -parallel -par-threshold=0 -par-num-threads=K -o lab1-icc-par-K lab1.c».
\end{enumerate}
}