\documentclass[A4paper, 12pt]{article}

%\usepackage[a4paper,margin=1.5cm,lmargin=2cm,rmargin=1cm]{geometry}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{textcomp}


\usepackage[T1]{fontenc}
\usepackage[T2A]{fontenc}


\usepackage{graphicx}
%\usepackage{psfrag}

\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}

%\usepackage{pscyr}
%\usepackage{literat}
\usepackage[matrix,arrow,curve]{xy}
\def\thesection{\S\arabic{section}}
\def\thesubsection{\arabic{section}.\arabic{subsection}}
\def\thesubsubsection{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}

\textwidth 16cm \textheight 24cm \oddsidemargin 5mm \topmargin
-1.5cm \sloppy
\renewcommand{\baselinestretch}{1.5}


\begin{document}
    \thispagestyle{empty}
    \begin{center}
        {\normalsize {\bfseries
            Московский государственный университет имени М.В. Ломоносова\\
            Факультет вычислительной математики и кибернетики\\
            Кафедра оптимального управления \\
        }}
        \vspace{7cm}

        {\LARGE {\bfseries
        Отчет по преддипломной практике\\
        \vspace{1cm}
        Исследование вопросов параллельного программирования с использованием OpenMP в моделировании
        }}
    \end{center}
    \vspace{2cm}
    \begin{flushright}
            {\large студента 513 группы\\ Быстрицкого Н.Д.\\
            \vspace{12pt}
            Руководитель\\ доцент Бойков В.Г.\\}
    \end{flushright}
    \vspace{1cm}
    \begin{center}
        {\large Москва\\ 2010}
    \end{center}

\pagebreak\pagebreak
\tableofcontents


\pagebreak
\numberwithin{equation}{section}
\numberwithin{figure}{section}
\section{Предисловие}
\subsection{От одноярерных к многоядерным процессорам}
\def\thesection{\arabic{section}}

В конце 2000 года компания Intel выпускает процессор, ставший первым микропроцессором, в основе которого лежала принципиально новая по сравнению с предшественниками архитектура седьмого поколения (по классификации Intel) — NetBurst (суперскалярная гиперконвейерная микроархитектура, рабочее название — P68), которая пришла на смену архитектуре P6 (суперскалярная суперконвейерная архитектура) на рынке настольных и серверных процессоров. Она не являлась развитием архитектуры P6, а представляла собой принципиально новую по сравнению со всеми предшественниками архитектуру. Архитектура NetBurst разрабатывалась, в первую очередь, с целью достижения высоких тактовых частот процессоров. Характерными особенностями архитектуры NetBurst являются гиперконвейеризация и применение кэша последовательностей микроопераций вместо традиционного кэша инструкций. АЛУ процессоров архитектуры NetBurst также имеет существенные отличия от АЛУ процессоров других архитектур. Таким образом, основным достоинством процессоров архитектуры NetBurst является возможность работы на высоких тактовых частотах. Это позволило достичь высокой производительности в оптимизированных задачах и компенсировать низкую удельную производительность. Кроме того, высокая тактовая частота даёт маркетинговые преимущества: потребители склонны выбирать процессоры с большей тактовой частотой («покупают мегагерцы»). К достоинствам процессоров архитектуры NetBurst можно также отнести высокую пропускную способность памяти. Кроме того, основными недостатками длинного конвейера являются уменьшение удельной производительности по сравнению с коротким конвейером (за один такт выполняется меньшее количество инструкций), а также серьёзные потери производительности при некорректном выполнении инструкций (например, при неверно предсказанном условном переходе или кэш-промахе). Так, например, процессор Pentium 4 с частотой 1700 МГц в неоптимизированных под архитектуру NetBurst задачах уступал процессорам с частотой 1333 МГц. Кроме того, работа процессоров на высоких частотах была связана с высоким тепловыделением. Несмотря на то, что процессоры на ядре Cedar Mill были способны работать на частотах, превышавших 7 ГГц, с использованием экстремального охлаждения (обычно использовался стакан с жидким азотом), максимальная тактовая частота серийных процессоров Pentium 4 составила 3800 МГц. При этом типичное тепловыделение превышало 100 Вт, а максимальное — 150 Вт. Из-за невозможности дальнейшего наращивания тактовой частоты, компания Intel была вынуждена предложить иной способ повышения производительности. Этим способом стал переход от одноядерных процессоров к многоядерным. Двухъядерные процессоры архитектуры NetBurst для настольных компьютеров (Pentium D) представляли собой два ядра Prescott (процессоры на ядре Smithfield), находящиеся на одном кристалле, или Cedar Mill (Presler), находящиеся в одном корпусе (по сути два отдельных процессора в одном корпусе). Так как процессоры архитектуры NetBurst изначально разрабатывались как одноядерные, обмен данными между ядрами осуществлялся через оперативную память, что приводило к потерям производительности (для сравнения, конкурирующие процессоры Athlon 64 X2 разрабатывались с расчётом на многоядерность, поэтому имеют специальный блок, позволяющий осуществлять обмен данными минуя оперативную память). На самом деле, AMD заявила о разработке двухъядерных процессоров раньше Intel. Однако, вскоре обнаружились проблемы с повышенным тепловыделением у процессоров Pentium 4. Это заставило Intel сменить политику, и, чтобы первой выпустить двухъядерные процессоры, Intel начала разработку ядра под кодовым названием Smithfield.Процессоры были анонсированы 26 мая 2005 года. Smithfield разрабатывался в спешке (вскоре после выхода процессора Intel это признала), поэтому процессоры на этом ядре получились не очень удачными. Ядро представляет собой два кристалла Prescott, размещенных на одной подложке. Smithfield, как и Prescott, производился по 90 нм технологии и имел все недостатки ядра Prescott. Чтобы процессор соответствовал требованиям TDP 130 Вт, было решено ограничить максимальную частоту значением 3,2 ГГц, а младшая модель имела частоту 2,6 ГГц. Как известно, архитектура Prescott, ввиду наличия длинного конвейера, очень зависима от частоты, поэтому снижение частоты очень сильно уменьшило производительность. Кроме того, несмотря на пониженную частоту, наличие двух ядер приводило к очень большому тепловыделению. А ввиду того, что крайне мало программ использовали возможность распределять свои функции на несколько потоков, выгоды от использования двух ядер практически не было. По производительности последние модели на ядре Smithfield значительно отставали от последних моделей на ядре Prescott. Для установки новых процессоров требовалось покупать новую материнскую плату, так как Smithfield имел другие тробования к VRM, нежели Prescott. А первые материнские платы для Smithfield работали только с памятью типа DDR2, которая зачастую была медленнее обычной DDR. Конкурентные процессоры AMD Athlon 64 X2 были лишены практически всех этих недостатков. Всё это привело к тому, что процессоры Pentium D не пользовались популярностью, в отличие от AMD Athlon 64 X2, даже несмотря на то, что они были дешевле процессоров AMD Athlon 64 X2. Smithfield, как и Athlon 64 X2 обладает разделенным кэшем L2 (то есть каждое ядро обладает своим кэшем L2), это значительно упростило разработку, но немного уменьшает производительность процессора, в отличие от общего для обоих ядер кэша L3. Ядро Presler производилось по 65 нм технологии, это позволило поднять частоту процессоров, правда, максимальный TDP новых процессоров оставался на уровне 130 Вт (так было до выхода ревизии ядра D0, которая позволила увеличить уровень выхода годных кристаллов). Presler лишен поддержки технологии Hyper-Threading, поддерживает технологию виртуализации Vanderpool, а также C1E, EIST и TM2 (в поздних моделях на степпингах C1 и D0). Процессоры были анонсированы во второй половине января 2006 года, хотя в японских магазинах были замечены продажи этих CPU в первых числах того же месяца. Серия этих моделей обозначалась как 9x0. Первоначально был запланирован выход моделей с номерами 920, 930, 940 и 950. А в апреле 2006 года вышла модель с номером 960, работающая на частоте 3,6 ГГц. Далее к ним добавились более дешевые модели 915 (2.8GHz), 925 (3.0GHz), 935 (3.2GHz) и 945 (3.4GHz), которые были лишены поддержки Vanderpool. Процессор на ядре Presler стал последним в линейке Pentium D. Следующим процессором, построенным на ядре Conroe и на данный момент являющимся одной из наиболее популярных в среднем ценовом сегменте модификацией стал Intel Core 2 Duo. В 2007 году линейка Pentium D полностью снята с производства, что вызвано отказом Intel от микроархитектуры NetBurst.

Core 2 — шестое поколение микропроцессоров архитектуры x86-64 корпорации Intel, основанное на процессорной архитектуре Intel Core. Это потомок микроархитектуры Intel P6, на которой, начиная с процессора Pentium Pro, построено большинство микропроцессоров Intel, исключая процессоры с архитектурой NetBurst. Введя новый бренд, от названий Pentium и Celeron Intel не отказалась, в 2007 году переведя их также на микроархитектуру Core, и на данный момент доступны процессоры Pentium Dual-Core (не путать с Pentium D) и Core Celeron (400-я серия). Но теперь воссоединились мобильные и настольные серии продуктов (разделившиеся на Pentium M и Pentium 4 в 2003 году). Первые процессоры Core 2 официально представлены 27 июля 2006 года. Также как и их предшедственники, процессоры Intel Core, они делятся на модели Solo (одноядерные), Duo (двухъядерные), Quad (четырёхъядерные) и Extreme (двух- или четырёхъядерные с повышенной частотой и разблокированным множителем). Процессоры получили следующие кодовые названия — «Conroe» (двухъядерные процессоры для настольного сегмента), «Merom» (для портативных ПК), «Kentsfield» (четырёхъядерный Conroe) и «Penryn» (Merom, выполненный по 45 нанометровому техпроцессу). Хотя процессоры «Woodcrest» также основаны на архитектуре Core, они выпускаются под маркой Xeon. С декабря 2006 года все процессоры Core 2 Duo производятся на 300-миллиметровых листах на заводе Fab 12 в Аризоне, США и на заводе Fab 24-2 в County Kildare, Ирландия. В отличие от процессоров архитектуры NetBurst (Pentium 4 и Pentium D), в архитектуре Core 2 ставка делается не на повышение тактовой частоты, а на улучшение других параметров процессоров, таких как кэш, эффективность и количество ядер. Рассеиваемая мощность этих процессоров значительно ниже, чем у настольной линейки Pentium. С параметром TDP, равным 65 Вт, процессор Core 2 имеет наименьшую рассеиваемую мощность из всех доступных в продаже настольных чипов, в том числе на ядрах Prescott (в системе кодовых имён Intel) с TDP, равным 130 Вт, и на ядрах San Diego’s (в системе кодовых имён AMD) с TDP, равным 89 Вт. Особенностями процессоров Intel Core 2 являются EM64T (поддержка архитектуры EM64T), технология поддержки виртуальных x86 машин Vanderpool (en), NX-бит и набор инструкций SSSE3. Кроме того, впервые реализованы следующие технологии: LaGrande Technology, усовершенствованная технология, SpeedStep (EIST) и Active Management Technology (iAMT2).

Вскоре Wolfdale стал преемником двухъядерного процессора Conroe, созданный по 45 нанометровому процессу и основанный на микроархитектуре Penryn. Процессоры Intel Core 2 Duo серий Е7ххх и Е8ххх основаны именно на этом дизайне ядер. Процессоры Pentium Dual-Core серий Е5ххх и Е6ххх построены на дизайне ядер Wolfdale-2М и имеют 2Мб L2 кеша. А Yorkfield — преемником четырёхъядерного Kentsfield. Создан по 45 нанометровому процессу и так же как и Kentsfield, представляет по сути два размещенных в одном сокете корпуса Wolfdale(45 нанометровый потомок Conroe). Yorkfield располагает 6 или 12 МБ L2 разделённой кэш-памяти, по 3 или 6 МБ на каждую пару ядер соответственно. Скорости шины (подключение к северному мосту) до 1333 МГц или более (1600 Мгц в некоторых редакциях Extreme Edition), как и для большинства процессоров скорость ограничена полосой пропускания шины на материнской плате. Процессоры Yorkfield выпускаются под именами: Intel Core 2 Quad (Q9300, Q9450, Q9550, Q9650) и Intel Core 2 Extreme (QX9650, QX9770).

В 2008 году Intel представляет новую процессорную микроархитектуру Nehalem, созданную на основе микроархитектуры Intel Core, но имеющую множество отличий от своего предшественника, такие как интерфейс QuickPath Interconnect (QPI) или Direct Media Interface (DMI) в бюджетных решениях, первый позволяет повысить пропускную способность до 25Гб/сек против 12,5Гб/сек у Intel Core, поддержка модернизированной технологии Hyper-Threading, носящей название Simulation Multi-Threading (SMT), позволяющая задействовать два потока на одно ядро, интегрированный контроллер оперативной памяти стандарта DDR3 SDRAM или даже полностью интегрированный северный мост набора системной логики в более поздних решениях, поддержка технологии Turbo Boost, позволяющая повысить тактовую частоту на пять пунктов множителя одного, наиболее загруженного ядра и т. д. Первые процессоры основанные на этой микроархитектуре, имеющие дизайн ядер Bloomfield вышли в открытую продажу 17 ноября 2008 года.

Дизайн Bloomfield обладает четырьмя физическими ядрами и находится на одной кремниевой подложке изготовленной с соблюдением норм 45-нм. Он уступает дизайну Yorkfield по количеству транзисторов, 731 млн против 820 млн, но несмотря на это у него больше площадь, 263 кв. мм против 214 кв. мм. Поддержка технологии Simulation Multi-Threading обеспечивает до 8 потоков одновременно. Так же особенностью дизайна можно назвать технологию Turbo Boost. Системная шина QuickPath Interconnect использующаяся для связи с северным мостом имеет два стандарта 4.8ГТ/с и 6.4ГТ/с и пропускную способность 19 200Мбайт/с и 25 600Мбайт/с соответственно. В нём используется впервые, за всю историю процессоростроения, поддержка трехканальной оперативной памяти стандарта DDR3 SDRAM. Интеграция контроллера памяти — переходное решение от традиционно отдельного северного моста до его полной интеграции начиная с решения Lynnfield. Для него требуется разъем LGA1366 и набор системной логики Intel X58. Процессоры под торговой маркой Intel Core i7 вышли в продажу в конце 2008 года. Более экономичная и упрощенная версия дизайна Bloomfield, в которой удалены такие характеристики, как трехканальный контроллер оперативной памяти, системная шина QuickPath Interconnect и поддержка Simulation Multi-Threading в бюджетных моделях. Вместо этого в процессор интегрирован двухканальный контроллер памяти с поддержкой DDR3 1333МГц и системная шина Direct Media Interface, однако её пропускная способность остается в пределах 2 ГБ/с, что очень мало по сравнению с 25 ГБ/с, которые обеспечивает шина QPI в случае использования Bloomfield. Но несмотря на это, процессор не испытывает проблем с быстродействием, за счет интегрированных контроллеров PCI Express 2.0 и оперативной памяти. Этот дизайн не имеет связи с северным мостом, так как в наборе системной логики P55 Express фактически отсутствует северный мост. Ведь северный мост представляет собой сочетание контроллеров оперативной памяти, PCI Express 2.0 и интерфейса с процессором, но все это находится непосредственно в самом дизайне ядер, а скорости 2 ГБ/с хватает для полноценной связи с южным мостом. Благодаря интеграции северного моста в дизайн ядер уровень производительности повышается, и старшие модели по производительности близки к младшим моделям Bloomfield. Благодаря некоторым доработкам техпроцесса уровень энергопотребления не будет превышать отметку 95 Вт. Этот дизайн также обладает четырьмя ядрами на одной подложке, 8Мб общего кеша третьего уровня и поддержкой SMT в дорогих моделях. Для него требуется разъем LGA1156. Первые продукты на основе этого дизайна — Intel Core i5 750 с частотой 2667МГц, Intel Core i7 860 и 870 с частотами 2800МГц и 2933МГц соответственно, вышли в открытую продажу 8 сентября 2009 года.

\subsection{Комплекс EULER}

Программный комплекс EULER - передовая технология инженерного анализа динамики механических систем, разработанная российским предприятием "АвтоМеханика".

При использовании EULER Вам не нужно выводить уравнения движения, заниматься написанием и отладкой программ. Вы просто рисуете на экране компьютера механическую систему, указываете шарниры, силовые элементы, задаете характеристики этих связей и описываете воздействие внешней среды. Все это Вы делаете в удобной и понятной для инженера форме. Затем Вы нажимаете кнопку "Пуск" - и нарисованная Вами система начинает двигаться на экране в соответствии с законами механики. При этом Вы можете наблюдать значения ускорений, скоростей, расстояний, углов и сил, возникающих в системе в процессе движения. Эти характеристики могут быть представлены по Вашему выбору в виде числовых значений, таблиц, графиков или визуализируемых векторов. В программном комплексе EULER задачи решаются в трехмерном пространстве в общей нелинейной постановке с учетом нелинейных характеристик всех элементов механической системы.

Программный комплекс EULER может использоваться при проектировании, отработке, испытаниях и доводке изделий в различных областях техники, а также при проведении научных и прикладных исследований.

Внедрение технологии автоматизированного динамического анализа, реализованной в программном комплексе EULER, позволяет вывести решение задач динамического анализа на новый качественный уровень. В области динамического анализа функционирования изделий это подобно переходу конструкторских служб от выпуска чертежей на бумаге к использованию автоматизированных систем проектирования. Технология автоматизированного динамического анализа позволяет упростить и ускорить решение задач математического моделирования и, в конечном итоге, существенно повысить эффективность разработки новой научно-технической продукции.

Основные особенности EULER:

Удобный и понятный для инженера пользовательский интерфейс под Windows.

Автоматическое формирование математической модели динамики движения механической системы по ее инженерному описанию.

Нелинейные характеристики и учет больших перемещений частей механической системы.

Встроенная параметризация, которая автоматически работает в процессе описания механической системы.

Визуализация функционирования механической системы и значений ее характеристик.

Сборка общей модели механической системы из моделей агрегатов и подсистем.

Широкие возможности управления движением механической системы:

Движение отдельных частей механической системы по заданным законам.

Моделирование работы системы управления.

Преобразования структуры механической системы в процессе ее движения.

Гибкие возможности задания и использования функций:

Аналитические и условные выражения.

Табличное задание.

Использование любых функций для задания характеристик силовых воздействий, геометрических линий и поверхностей, законов движения.

Результаты исследований можно оперативно вывести на принтер, перенести в текстовый редактор или оформить в виде компьютерного фильма.

Использование программного комплекса позволяет уже на ранних стадиях проектирования получить достоверную информацию о динамическом поведении создаваемых изделий и возникающих при этом силовых нагрузках, а также оперативно проводить исследования нештатных ситуаций, возникающих в процессе эксплуатации существующих изделий.

Программный комплекс EULER официально зарегистрирован в Российском агентстве по патентам и товарным знакам (РОСПАТЕНТ) как программа для ЭВМ (свидетельство № 2000610718).

Программный комплекс EULER сертифицирован в системе ГОССТАНДАРТа России (сертификат соответствия № POCC RU.ME20.H00451).

Для проверки точности расчетов программного комплекса EULER было решено большое количество различных задач по теоретической механике. Решение этих задач показало, что практически всегда точность, получаемая в EULER, при соответствующем задании параметров численного решения, составляет не менее шести значащих цифр (относительная погрешность результата менее 1.e-6). Это значительно выше точности, которая обычно требуется при проведении инженерных расчетов.

\subsection{OpenMP}

OpenMP (Open Multi-Processing) - открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Описывает набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью. Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной техники и программного обеспечения, чья работа регулируется некоммерческой организацией, называемой OpenMP Architecture Review Board (ARB). Детальная спецификация OpenMP находится на странице http://openmp.org/wp/

OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» (master) поток создает набор подчиненных (slave) потоков и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами (количество процессоров не обязательно должно быть больше или равно количеству потоков). Задачи, выполняемые потоками параллельно, также как и данные, требуемые для выполнения этих задач, описываются с помощью специальных директив препроцессора соответствующего языка — прагм. Количество создаваемых потоков может регулироваться как самой программой при помощи вызова библиотечных процедур, так и извне, при помощи переменных окружения.

\newpage
\def\thesection{\S\arabic{section}}
\section{Постановка задачи}
\def\thesection{\arabic{section}}

В настоящее время, в связи с развитием многопроцессорности, операционные системы, такие как Windows Vista и Windows 7, уже на уровне опрерационной системы распараллеливают приложение между ядрами процессора. Однако, как показывает практика, это оказывается не дает существенную производительность в сравнении с распараллеливанием кода программы. Программный комплекс EULER начал разрабатываться в середине 1990х, который изначально не предполагал наличие параллельного кода. С развитием программного комплекса и развитием многопроцессорности на пользовательском уровне, появилась необходимость распараллелить некоторые части программного комплекса EULER ввиду того, что объем проводимых вычислений некоторыми частями кода занимал значительное вычисление по времени.

Для начала было решено рассмотреть эффективность расспараллеливания метода Гаусса для разреженных матриц. Изначально испытания были проведены для перемножения и метода Гаусса для плотных матриц. Экспериметр проводился на двух компьютерах:

CPU Core 2 Duo P7350 (Core/Threads:2/2; 2.0 GHz), GC GF9300GS, RAM 4Gb, Windows XP/7 without  Aero

CPU Core i7 860 (Core/Threads:4/8; 2.8 GHz), GC GFGTX260, RAM 4Gb, Windows XP


\subsection{Распараллеливание перемножения плотных матриц}

Для данного испытания были взяты две квадратных матрицы, которые были всюду заполнены значениями. Производилось перемножение матриц с размерностью от 100 до 2000.

TimeSeq - последовательное перемножение 2 матриц

TimePar(block) - разделение 2х матриц на 8 подматриц и перемножение соответствующих

TimePar(2) - параллельное перемножение 2 матриц, принудительное задание ОС на программном уровне 2х параллельных потоков

TimePar(4) - параллельное перемножение 2 матриц, принудительное задание ОС на программном уровне 4х параллельных потоков

TimePar(8) - параллельное перемножение 2 матриц, принудительное задание ОС на программном уровне 8 параллельных потоков

TimePar(16) - параллельное перемножение 2 матриц, принудительное задание ОС на программном уровне 16 параллельных потоков

TimePar(Dynamic) - параллельное перемножение 2 матриц, параллельные потоки выделяются ОС динамически

На Рис. (\ref{test1-p7350}) и (\ref{test1-860}) отображены результаты

\begin{figure}[h]
    \centering{\includegraphics[totalheight=0.28\textheight]{test1_p7350.jpg}}
    \caption{Распараллеливание перемножения плотных матриц на Core 2 Duo P7350}\label{test1-p7350}
\end{figure}

\begin{figure}[h]
    \centering{\includegraphics[totalheight=0.28\textheight]{test1_860.jpg}}
    \caption{Распараллеливание перемножения плотных матриц на Core i7 860}\label{test1-860}
\end{figure}

Вывод: В первом случае процессор не может отпределить, в каком режиме производительность выше, однако если брать в общем, то распараллеливание дает несущественный прирост. Во втором случае видно, что распараллеливание приносит почти 2х-кратный прирост по стравнению с последовательным перемножением, однако динамическое распараллеливание и распараллеливание в 8 и 16 потоков фактически имеют один и тот же потолоок ввиду ограничений со стороны аппаратного уровня.

\subsection{Распараллеливание метода Гаусса для плотных матриц}

Для данного испытания была взята диагональная матрица с "бородой" 2 (отступ от диагонали). В эксперименте использовалась матрица и векторы с размерностью от 100 до 2000.

TimeSeq - реализация последовательным методом

TimePar(2) - параллельный метод, принудительное задание ОС на программном уровне 2х параллельных потоков

TimePar(Dynamic) - параллельный метод, параллельные потоки выделяются ОС динамически

На Рис. (\ref{test2-p7350}) и (\ref{test2-860}) отображены результаты

\begin{figure}[h]
    \centering{\includegraphics[totalheight=0.28\textheight]{test2_p7350.jpg}}
    \caption{Распараллеливание метода Гаусса для плотных матриц на Core 2 Duo P7350}\label{test2-p7350}
\end{figure}

\begin{figure}[h]
    \centering{\includegraphics[totalheight=0.28\textheight]{test2_860.jpg}}
    \caption{Распараллеливание метода Гаусса для плотных матриц на Core i7 860}\label{test2-860}
\end{figure}

Вывод: В обоих случаях получились примерно равные результаты, в первом случае удается достигнуть 1,5-кратного прироста, во втором - 3х-кратного прироста.

\subsection{Распараллеливание метода Гаусса для разреженных матриц}

В данном случае был использован код, используемый в программном комплексе EULER. Для задания матрицы используется специальный класс SMatrix, а для векторов -- NVector. Каждая строка разреженной матрицы заносится в отдельный массив. Также используется массив с адресами начала строк в матрице. Учитывая тот факт, что данный код использовал вызовы в другие классы, а также специфику реализации метода Гаусса с помощью списков, в данном направлении до сих пор еще ведутся исследования.

\newpage
\def\thesection{\S\arabic{section}}
\section{Выводы}
\def\thesection{\arabic{section}}

Использование многопоточности со стандартом распараллеливания OpenMP дает существенную выгоду при параллельном программировании для однопоточного приложения. Однако нельзя забывать о факторах инициализации при входе в параллельную область и синхронизации после параллельной области, которые существенно тормозят общий прирост производительности.


\end{document}
