<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="ru">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Двухуровневый параллельный алгоритм выполнения численной фазы разложения Холецкого для разреженных матриц *</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">С</forename><forename type="middle">А</forename><surname>Лебедев</surname></persName>
						</author>
						<author>
							<persName><forename type="first">И</forename><forename type="middle">Б</forename><surname>Мееров</surname></persName>
						</author>
						<author>
							<persName><forename type="first">Е</forename><forename type="middle">А</forename><surname>Козинов</surname></persName>
						</author>
						<author>
							<persName><forename type="first">Д</forename><forename type="middle">Р</forename><surname>Ахмеджанов</surname></persName>
						</author>
						<author>
							<persName><forename type="first">А</forename><forename type="middle">Ю</forename><surname>Пирова</surname></persName>
						</author>
						<author>
							<persName><forename type="first">А</forename><forename type="middle">В</forename><surname>Сысоев</surname></persName>
						</author>
						<title level="a" type="main">Двухуровневый параллельный алгоритм выполнения численной фазы разложения Холецкого для разреженных матриц *</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">ED3F82D9E863456DEE6C8D3025FDC3C5</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T04:05+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Нижегородский государственный университет им. Н.И. Лобачевского Рассматривается задача распараллеливания численной фазы разложения Холецкого для разреженных симметричных положительно определенных матриц. Предлагается новая схема распараллеливания мультифронтального метода для систем с общей памятью. Данная схема основана на сочетании двух подходов к организации параллелизма на разных уровнях дерева исключения. В нижней части дерева выполняется параллельная обработка узлов, хранящихся в приоритетной очереди. На верхних уровнях дерева узлы обсчитываются последовательно с использованием многопоточного BLAS. Результаты вычислительных экспериментов показывают сопоставимость выполненной реализации с решателями MUMPS и MKL PARDISO. * Работа выполнена при частичной поддержке гранта РФФИ №14-01-31455, гранта МОН РФ (соглашение от 27 августа 2013г. № 02.В.49.21.0003 между МОН РФ и ННГУ).</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="ru">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Введение</head><p>Системы линейных алгебраических уравнений (СЛАУ) с разреженной симметричной положительно определенной матрицей возникают при моделировании процессов во многих предметных областях. Огромная размерность таких систем (в современных приложениях -10 7 и выше) приводит к большим затратам памяти и процессорного времени, что без сомнения позволяет отнести их решение к области применения высокопроизводительных вычислений. Прямые методы, основанные на факторизации матрицы системы, активно применяются для решения больших разреженных СЛАУ. В настоящее время в этой области разработан целый ряд параллельных алгоритмов для систем с различной архитектурой и соответствующие программные пакеты <ref type="bibr" target="#b0">[1]</ref>, среди которых широко распространены MKL PARDISO, MUMPS, SuperLU, CHOLMOD и другие.</p><p>С 2011 года на факультете ВМК ННГУ разрабатывается прямой решатель разреженных СЛАУ с симметричной положительно определенной матрицей, основанный на методе Холецкого <ref type="bibr" target="#b1">[2]</ref>. В рамках данного решателя изучаются вопросы оптимизации соответствующих алгоритмов под современные многоядерные архитектуры. В данной работе рассматривается задача распараллеливания наиболее затратной по времени и памяти численной фазы разложения Холецкого. Несмотря на наличие множества алгоритмов и их реализаций, вопрос о развитии существующих методов построения масштабируемых алгоритмов и программных средств, ориентированных на системы с общей памятью, не потерял свою актуальность в связи с постоянным развитием многоядерных архитектур. Ранее в работе <ref type="bibr" target="#b2">[3]</ref> мы предложили способ распараллеливания мультифронтального метода, основанный на динамической схеме балансировки нагрузки. В данной статье предлагается модификация, состоящая в сочетании возможностей базовой схемы с использованием параллельного BLAS для решения «тяжеловесных» задач на верхних уровнях дерева исключения. Будет показано, что применение данной комбинированной схемы позволяет улучшить масштабируемость программной реализации.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Постановка задачи и метод решения</head><p>Дана система линейных уравнений , где -разреженная симметричная положительно определенная матрица, -плотный вектор, -вектор неизвестных. Необходимо найти решение системы .</p><p>Принцип работы прямых методов основан на факторизации матрицы системы с последующим решением треугольных систем. Для симметричных положительно определенных матриц факторизация выполняется методом Холецкого. Для этого в большинстве случаев используется двухфазный подход: вначале находится портрет фактора, т.е. расположение ненулевых элементов (символьное разложение), затем полученный портрет заполняется значениями (численное разложение). Необходимо отметить, что символьная фаза выполняется гораздо быстрее численной, поэтому множество усилий исследователей направлено на оптимизацию и распараллеливание численной фазы.</p><p>Существует несколько методов выполнения численной фазы разложения Холецкого. Среди них можно выделить три наиболее широко используемых на практике: ориентированный влево (left-looking) <ref type="bibr" target="#b3">[4]</ref>, ориентированный вправо (right-looking) <ref type="bibr" target="#b3">[4]</ref> и мультифронтальный (multifrontal) <ref type="bibr" target="#b4">[5]</ref>. Основное отличие между ними заключается в способе формирования результирующей матрицы , а также в способе хранения и размещении в памяти промежуточных результатов. Перечисленные методы показывают схожую производительность на различных тестовых наборах матриц, но с точки зрения многих исследователей мультифронтальный метод является наиболее перспективным для распараллеливания <ref type="bibr" target="#b5">[6,</ref><ref type="bibr" target="#b6">7]</ref>. По этой причине мультифронтальный метод используется в качестве базового в данной работе.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Краткое описание мультифронтального метода</head><p>Впервые мультифронтальный метод был представлен Даффом и Рейдом <ref type="bibr" target="#b7">[8]</ref> в 1983 г., а затем развит Лю <ref type="bibr" target="#b8">[9]</ref>, Амстоем и Даффом <ref type="bibr" target="#b9">[10]</ref>. К числу основных достоинств мультифронтального метода относят эффективное использование кэш-памяти всех уровней. При реализации с использованием подходящих структур данных основными становятся операции с плотными подматрицами, для выполнения которых может быть использован BLAS 3. Данный метод используется в одном из широко распространенных решателей c открытым исходным кодом MUMPS. К числу недостатков мультифронтального метода можно отнести высокие затраты памяти для представления промежуточных результатов и большое число операций с плавающей точкой, особенно для задач, полученных путем дискретизации трехмерного пространства <ref type="bibr" target="#b10">[11]</ref>. Приведем краткое описание метода.</p><p>Численная фаза разложения Холецкого применяется для заполнения уже сформированного шаблона фактора матрицы численными значениями. Для этого в мультифронтальном методе процесс факторизации разбивается на факторизацию небольших плотных подматриц, называемых фронтальными (frontal matrix). При этом порядок получения столбцов фактора определяется графом задач, который в случае симметричной положительно определенной матрицы является деревом и называется деревом исключения (elimination tree). Каждый узел дерева соответствует столбцу матрицы. Таким образом, мультифронтальный метод может быть представлен как обход дерева исключения от листьев к корню. При посещении очередного узла происходит построение фронтальной матрицы, в результате частичной факторизации которой алгоритм формирует соответствующий столбец фактора. Для построения фронтальной матрицы используются значения соответствующего столбца исходной матрицы, а также матриц обновления, ассоциированных с детьми рассматриваемого узла в дереве исключения. После выполнения частичной факторизации фронтальной матрицы формируется столбец фактора и матрица обновления, которая будет использована при построении фронтальной матрицы родителя. Высокоуровневое описание мультифронтального метода приведено ниже (алгоритм 1). Символом ⨁ обозначена операция расширяющего сложения (extend add) <ref type="bibr" target="#b4">[5]</ref>.</p><p>Процедуры init_frontal_matrix, assembly_frontal_matrix и form_update_matrix реализуются с помощью вызовов соответствующих функций BLAS. Более подробное описание метода можно найти в работах <ref type="bibr" target="#b4">[5,</ref><ref type="bibr" target="#b10">11]</ref>. Последовательная реализация мультифронального метода в решателе ННГУ описана в работе <ref type="bibr" target="#b11">[12]</ref>.</p><p>Недостатком базовой версии численной факторизации является неэффективное использование кэш-памяти. Для решения этой проблемы на практике используются так называемые суперноды (supernode). Супернодом называется группа столбцов фактора, имеющих одинаковый шаблон ниже плотной треугольной подматрицы. Супернодальный мультифронтальный подход впервые был предложен Эшкрафтом, Гримсом, Льюисом, Пейтоном и Симоном <ref type="bibr" target="#b12">[13]</ref> в 1987 г., а затем исследован Нг и Пейтоном <ref type="bibr" target="#b13">[14]</ref>. Суперноды позволяют формировать фактор по несколько столбцов за итерацию с использованием функций BLAS третьего уровня, что повышает эффективность использования кэш-памяти. Именно эта редакция мультифронтального метода используется в качестве базовой для данной работы.</p><formula xml:id="formula_0">Алгоритм 1. Высокоуровневое описание мультифронтального метода 1 foreach node i of elimination tree in topological order 2 init_frontal_matrix(F i ) 3 foreach son j of i do 4 U ← U ⨁ Uj 5 end for 6 assembly_frontal_matrix(F,U) 7 factorize(F) 8 form_update_matrix(U i ) 9 L i ←F (1,*) 10</formula><p>end for</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Схемы распараллеливания</head><p>В мультифронтальном методе могут быть использованы два способа организации параллелизма: применение параллельных функций BLAS и параллельное решение независимых друг от друга задач в соответствии со структурой дерева исключения. Рассмотрим перспективы применения этих методов.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1">Использование параллельного BLAS</head><p>Большая часть вычислений в мультифронтальном методе приходится на процедуры BLAS, такие как умножение плотных матриц и решение плотных систем линейных уравнений с треугольной матрицей. Поэтому использование существующих библиотек для высокопроизводительных вычислений, таких как, например, Intel MKL, является самым естественным способом распараллеливания численной фазы разложения Холецкого. К сожалению, эксперименты показывают, что применение этого подхода чаще всего приводит к разочаровывающим результатам. Этот факт объясняется тем, что большинство вспомогательных матриц, возникающих в ходе выполнения алгоритма, имеют маленькую размерность и поэтому накладные расходы, связанные с организацией параллелизма не компенсируются последующей параллельной обработкой. Таким образом, необходимую производительность можно получить, только если в качестве основного метода распараллеливания использовать распараллеливание по дереву исключения.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2">Распараллеливание по дереву исключения</head><p>Распараллеливание мультифронтального метода может быть выполнено на основе дерева исключения T, содержащего информацию о зависимостях по данным, возникающих в ходе вычислений. Пусть T[k] -часть дерева исключения с корнем в вершине k. Показано <ref type="bibr" target="#b10">[11]</ref>, что два столбца i и j фактора L могут быть вычислены параллельно тогда и только тогда, когда поддеревья T[i] и T[j] не пересекаются, то есть не имеют общих узлов. Этот результат является основной для построения алгоритмов параллельной факторизации. При этом в качестве единицы работы (задачи) можно рассматривать построение фронтальной матрицы, соответствующей очередному узлу дерева. Основная проблема, возникающая при разработке параллельной редакции метода, заключается в наличии существенного дисбаланса между вычислительной трудоемкостью возникающих задач. Решение данных задач предполагает выполнение операций над матрицами, размеры которых могут отличаться на порядки от узла к узлу при сохранении общей тенденции укрупнения матриц при перемещении от листьев к корню. Для решения про-блемы балансировки нагрузки могут использоваться как статические, так и динамические схемы.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.3">Статические схемы распараллеливания</head><p>Существует множество методов, использующих статическую схему распараллеливания, однако большинство из них были разработаны для систем с распределенной памятью. В последнее время предпринимаются усилия <ref type="bibr" target="#b14">[15]</ref> для переноса одного из наиболее эффективных методов статического распараллеливания -алгоритма Гейста-Нг <ref type="bibr" target="#b15">[16]</ref> для работы в системах с общей памятью. Идея алгоритма заключается в нахождении некоторого слоя в дереве исключения, то есть множества узлов, которые не обязательно находятся на одном уровне, но при этом не имеют общих потомков. Найденный слой должен обладать свойством сбалансированности, так чтобы количество операций, необходимых для обработки узлов поддеревьев с корнями в узлах найденного слоя, удовлетворяло заданному порогу и было примерно одинаковым. При реализации алгоритма свойство сбалансированности можно понимать как число операций с плавающей точкой, либо как оценку времени, необходимого для обработки узла.</p><p>На рисунке 1 приведен пример работы алгоритма. Найденный слой представляет срез дерева в узлах 6, 11, 14. Выделенные цветом поддеревья могут быть обработаны параллельно. Для формирования очереди задач используется алгоритм, который учитывает различные характеристики узлов дерева для достижения лучшей балансировки <ref type="bibr" target="#b2">[3]</ref>. Алгоритм обходит все узлы дерева в соответствии с топологической перестановкой, сформированной раннее, и на каждой итерации цикла добавляет рассматриваемый узел в очередь. Приоритет узла в очереди складывается из основного и второстепенного, где первый отвечает за правильный обход столбцов в параллельном мультифронтальном методе, а второй -за улучшение балансировки.</p><p>Основной приоритет равен количеству детей узла в дереве исключения, а второстепенный вычисляется как оценка трудоемкости решения соответствующих подзадач. Трудоемкость решения задачи оценивается как количество операций с плавающей точкой.</p><p>Представленная схема позволяет эффективно использовать вычислительные ресурсы на нижних уровнях дерева исключения, но при приближении к корню возможности для параллелизма по задачам становятся ограниченными, при этом размеры обрабатываемых матриц значительно увеличиваются. В этот момент целесообразно изменить схему распараллеливания таким образом, чтобы вычислительные потоки использовались внутри вызовов многопоточные реализации функций BLAS (алгоритм 2).  <ref type="bibr" target="#b16">[17]</ref>. Характеристики тестовых матриц представлены ниже (таблица 1). Все они являются симметричными положительно определенными. В качестве перестановок, уменьшающих заполнение фактора, использовался METIS <ref type="bibr" target="#b17">[18]</ref>, но также могут быть использованы другие переупорядочиватели <ref type="bibr" target="#b18">[19,</ref><ref type="bibr" target="#b19">20]</ref>.  В работе <ref type="bibr" target="#b2">[3]</ref> мы предложили использовать динамическую схему распараллеливания мультифронтального метода. Сравнивая ускорение с использованием различных схем распараллеливания (рисунок 3; справа) можно видеть, что для 4 из 6 матриц первой группы (Emilia923, audikw1, bone010, Hook_1498) использование параллельного BLAS дает лучшее ускорение в среднем в 1.7 раза. Тем не менее, для остальных матриц предпочтительнее использовать динамическую схему. Этот факт говорит о том, что комбинация указанных методов распараллеливания (алгоритм 2) может дать потенциально лучшее ускорение по сравнению с каждой схемой в отдельности, что в дальнейшем подтверждается вычислительными экспериментами.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.3">Выбор момента переключения между схемами распараллеливания</head><p>Важнейшим элементом алгоритма, влияющим на время работы численной фазы при использовании двухуровневой схемы распараллеливания, является критерий переключения между схемами (по узлам дерева; в рамках одного узла при помощи BLAS). Анализ параллельных запусков динамической схемы распараллеливания, использующей параллелизм на уровне логических задач в сочетании с последовательным BLAS, показал, что основным фактором, ограничивающим итоговое ускорение, является недостаток свободных задач, начиная с некоторого момента подъема по дереву исключения. В связи с этим предлагается использовать в качестве критерия сравнение числа необработанных задач с некоторым пороговым значением, выбирае-мым экспериментально. После срабатывания данного критерия происходит переход к последовательной обработке узлов дерева с использованием параллельного BLAS (алгоритм 2).</p><p>Для изучения вопроса о выборе порогового значения были выбраны 4 матрицы, представляющие 4 возможных класса: «небольшие разраженные» (parabolic_fem), «небольшие плотные» (pwtk), «большие разреженные» (G3_Circuit) и «большие плотные» (audikw_1).</p><p>Результаты приведены на диаграмме (рисунок 4). По горизонтальной оси отложено пороговое значение, а по вертикальной -время работы двухуровневого алгоритма, отнесенное к времени работы с использованием динамической схемы (в зависимости от матрицы). Во всех запусках использовалось 16 вычислительных ядер. Значения, меньшие единицы, соответствуют преимуществу двухуровневой схемы над обычной.</p><p>Для небольших более плотных матриц и больших сильно разреженных время работы при изменении порога не изменяется, кроме того оно практически совпадает с временем работы при распараллеливании с использованием динамической схемы, отношение времен колеблется около единицы. Для больших более плотных матриц наблюдается значительное ускорение относительно динамической схемы, причем оно наблюдается уже при небольших значениях параметра и в дальнейшем практически не меняется. Отдельного внимания заслуживает вопрос об объеме используемой памяти. Так, фронтальные матрицы на верхних уровнях дерева исключения имеют больший размер. В связи с этим, при использовании параллелизма на задачах для обработки узлов верхних уровней требуется хранение вспомогательных структур данных для каждого из 16 потоков, что приводит к большим затратам памяти. Напротив, в двухуровневой схеме фронтальные матрицы узлов верхних уровней обрабатываются потоками совместно, что позволяет значительно сократить размер вспомогательных структур данных. В частности, применение описанных методов позволило получить правильное решение для матрицы Hook_1498 при использовании 16 потоков, в отличие от базовой динамической схемы.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.4">Сравнение с известными решателями</head><p>Был проведен ряд экспериментов на тестовых матрицах с использованием следующих известных и широко распространенных решателей:</p><p> MKL PARDISO из Intel Math Kernel Library в составе Intel Parallel Studio XE 2013 SP1 <ref type="bibr" target="#b20">[21]</ref>;  MUMPS (лучшее время работы из двух актуальных версий ver. 4.10.0, ver 5.0.0) <ref type="bibr" target="#b21">[22]</ref>. Для всех пакетов использовались одинаковые перестановки, полученные с помощью METIS, а также функции BLAS и ScaLAPACK из библиотеки Intel MKL. Полученные результаты приведены на диаграмме (рисунок 6). Рассматривая результаты экспериментов для запусков решателей в 16 потоков можно видеть, что PARDISO сохраняет преимущество во времени работы и показывает лучшие результаты на 5 матрицах. Сравнивая двухуровневый алгоритм и MUMPS, нужно отметить преимущество первого на 6 матрицах (parabolic_fem, audikw_1, bone010_M, bone010, StocF-1465, Flan-1565). В свою очередь MUMPS также выигрывает на 6 матрицах (pwtk, msdoor, tmt_sym, ecology2, thermal2, G3_circuit). Однако, если обратиться к диаграмме (рисунок 5), можно видеть, что время работы на этих матрицах достаточно маленькое по сравнению с матрицами, на которых получен выигрыш. Сравнивая время работы двухуровневого алгоритма и PARDISO можно отметить, что ситуация во многом схожая: матрицы, на которых отставание наиболее заметно (pwtk, msdoor, ecology2, thermal2, G3_circuit), обрабатываются численно фазой достаточно быстро и по причинам, описанным в предыдущем разделе, дают худшее масштабирование. В остальных запусках время работы численной фазы обоих решателей в большей степени сопоставимо.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="7.">Заключение</head><p>Основным результатом работы является комбинированная схема распараллеливания мультифронтального метода. Данная схема сочетает лучшие свойства двух подходов к организации параллелизма при обработке дерева исключения. Так, большое число «легковесных задач», соответствующих нижним уровням дерева, решается в рамках парадигмы распараллеливания по задачам с динамической балансировкой нагрузки. При этом на верхних узлах дерева малое число «тяжеловесных задач» решается путем применения многопоточного BLAS. В работе сформулирован критерий переключения между схемами, показан выигрыш в производительности и памяти по сравнению с ранее подготовленной реализацией, выполнено сравнение с MKL PARDISO и MUMPS. В дальнейшем планируется рассмотреть возможность усовершенствования разработанных программных реализаций за счет сокращения накладных расходов на организацию параллелизма. В частности, представляют интерес перспективы применения разных реализаций приоритетных очередей. Другим направлением дальнейших исследованием является разработка гетерогенных реализаций, использующих для расчетов не только традиционные процессоры, но и ускорители вычислений.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Рис. 1 .Рис. 2 .</head><label>12</label><figDesc>Пример разбиения дерева исключения с использованием алгоритма Гейста-НГ. Разными цветами отмечены поддеревья, которые могут быть обработаны параллельно5. Двухуровневый параллельный алгоритмОдним из основных недостатков статических схем является невозможность достаточно точно оценить объем работы, необходимый для обработки каждого узла дерева исключения. Поэтому в данной работе предлагается другой способ балансировки нагрузки, основанный на динамической схеме. Пример работы мультифронтального метода на основе двухуровневой схемы распараллеливания В рамках динамической схемы строится пул задач и на каждом шаге алгоритма поток достает задачу из очереди и приступает к ее выполнению. Каждая задача соответствует вычислению соответствующего столбца фактора и состоит из четырех подзадач: вычисление матрицы узла, вычисление фронтальной матрицы, формирование из фронтальной матрицы столбца фактора, вычисление матрицы обновления. Пул задач организуется в виде приоритетной очереди.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Рис. 3 .</head><label>3</label><figDesc>Каждый многоугольник на рисунке соответствует запуску с определенным количеством потоков. По осям отложено время работы на соответствующей матрице. Для матрицы Hook_1498 указано время работы в 8 потоков (при работе в 16 потоков запуск завершается с ошибкой из-за нехватки памяти).Исходя из результатов запусков версии с параллельной библиотекой BLAS (рисунок 3; слева) можно сделать следующие выводы. Все тестовые матрицы можно разделить на 2 группы в зависимости от степени их заполненности. Для первой группы, где матрицы больше и плотность их выше (матрицы Flan_1565, Emilia923, audikw1, bone010, StocF-1465, Hook_1498), использование параллельной библиотеки BLAS позволяет получить ускорение до 6 раз при запуске в 16 потоков. Для второй группы, где матрицы либо маленькие, либо сильно разреженные (матрицы G3_circuit, pwtk, msdoor, parabolic_fem, tmt_sym, boneS10, bone010_M, ecology2, thermal2) ускорения при увеличении числа потоков BLAS практически не наблюдается. Также стоит отметить, что MKL BLAS имеет встроенный контроль размера матриц и не производит параллельную обработку, если размер матрицы слишком маленький. Таким образом, отсутствие ускорения на матрицах из второй группы можно считать хорошим результатом, так как при отсутствии подобного контроля за размером матрицы можно было бы наблюдать замедление. Сравнение ускорения численной фазы разложения Холецкого: при запуске с разным числом потоков BLAS (слева); при запуске в 16 потоков с использованием параллельного BLAS и динамической схемы (справа)</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Рис. 4 .</head><label>4</label><figDesc>Зависимость времени работы двухуровневого алгоритма от момента переключения между двумя параллельными схемами Этот факт говорит о том, что большая часть работы сосредоточена в небольшой окрестности корня дерева, где параллелизм по задачам ограничен, но есть ресурс для использования параллельных библиотек BLAS. Ниже этой окрестности фронтальных матриц больше, они имеют средний размер, и использование параллелизма по задачам и параллелизма BLAS дает схожий результат. Для матриц из последней группы ситуация выглядит противоположным образом. Размер фронтальных матриц настолько мал, что использование параллельного BLAS сразу же приводит к замедлению. Однако таким замедлением можно пожертвовать, так как абсолютное время работы составляет менее 1 секунды. Рис. 5. Сравнение времени работы мультифронтального метода при использовании динамической и двухуровневой схем На диаграмме (рисунок 5) приведено абсолютное время работы мультифронтального метода с использованием различных схем распараллеливания. Во всех запусках использовались 16 ядер. Значение порога переключения схем для всех матриц было выбранным одинаковым и равнялось 200. Можно видеть, что для всех представленных матриц, время работы на которых превышает 5 секунд, новый двухуровневый метод показывает лучшие результаты. Данный эффект проявляется наиболее явно на матрице bone010, где удалось получить ускорение в 3 раза.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Рис. 6 .</head><label>6</label><figDesc>Сравнение численных фаз решателей. По осям отложено время работы. За единицу взято время работы MKL PARDISO Из результатов можно сделать следующие выводы. Для запусков в 1 поток реализованный мультифронтальный метод показывает схожие результаты с MUMPS. Это объясняется тем фактом, что в обоих решателях в качестве метода численного разложения используется мультифронтальный метод. В тоже время оба решателя проигрывают PARDISO на 6 матрицах (msdoor, tmt_sym, ecology2, thernaml2, G3_circuit, parabolic_fem), на 4 матрицах (audikw_1, bone010, StocF-1465, Flan_1565) заметен выигрыш, в остальных случаях время работы сопоставимо. Наибольший выигрыш разработанного решателя по сравнению с PARDISO получен на матрице audikw_1 и составляет 14%, а наибольшее отставание, в 1.5 раза, на матрице ecology2.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0"><head></head><label></label><figDesc></figDesc><graphic coords="5,113.13,70.90,378.30,196.91" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0"><head></head><label></label><figDesc></figDesc><graphic coords="9,70.90,70.90,453.75,220.50" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>Результаты экспериментов получены с использованием узла кластера, содержащего два восьмиядерных процессора Intel Sandy Bridge E5-2660 2.2 GHz, 64GB RAM, работающего под управлением ОС Linux CentOS 6.4. Использовался компилятор Intel C++ Compiler и библиотека Intel MKL BLAS из пакета Intel® Parallel Studio XE 2013 SP1. Для проведения экспериментов были выбраны матрицы из коллекции университета Флориды</figDesc><table><row><cell>17</cell><cell>while(task_queue.hasTaskET())</cell></row><row><cell>18</cell><cell>#pragma omp critical (queue)</cell></row><row><cell>19</cell><cell>i←task_queue.get_task_with_highest_priority();</cell></row><row><cell>20</cell><cell>process_node(i)</cell></row><row><cell>21</cell><cell>#pragma omp critical (queue)</cell></row><row><cell>22</cell><cell>task_queue.increase_task_primary_priority(parent(i))</cell></row><row><cell>23</cell><cell>end while</cell></row><row><cell>24</cell><cell></cell></row><row><cell>25</cell><cell>while(task_queue.hasTask())</cell></row><row><cell>26</cell><cell>i←task_queue.get_task_with_highest_priority();</cell></row><row><cell>27</cell><cell>process_node(i)</cell></row><row><cell>28</cell><cell>task_queue.increase_task_primary_priority(parent(i))</cell></row><row><cell>29</cell><cell>end while</cell></row><row><cell>30</cell><cell>end procedure</cell></row><row><cell cols="2">6. Результаты вычислительных экспериментов</cell></row><row><cell cols="2">6.1 Тестовая инфраструктура</cell></row><row><cell cols="2">Алгоритм 2. Параллельный мультифронтальный метод на основе двухуровневой схемы</cell></row><row><cell>1</cell><cell>procedure process_node(node i of elimination_tree)</cell></row><row><cell>2</cell><cell>init_frontal_matrix(F i )</cell></row><row><cell>3</cell><cell>foreach son j of i do</cell></row><row><cell>4</cell><cell>U ← U ⨁ Uj</cell></row><row><cell>5</cell><cell>end for</cell></row><row><cell>6</cell><cell>assembly_frontal_matrix(F,U)</cell></row><row><cell>7</cell><cell>factorize(F)</cell></row><row><cell>8</cell><cell>form_update_matrix(U i )</cell></row><row><cell>9</cell><cell>L i ←F (1,*)</cell></row><row><cell>10</cell><cell>end procedure</cell></row><row><cell>11</cell><cell></cell></row><row><cell>12</cell><cell>procedure two-level_parallel_multifrontal</cell></row><row><cell>13</cell><cell>omp_set_num_threads(MAX_SYSTEM_THREADS);</cell></row><row><cell>14</cell><cell>blas_set_num_threads(1);</cell></row><row><cell>15</cell><cell></cell></row><row><cell>16</cell><cell>#pragma omp parallel</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>Наиболее простым способом распараллеливания мультифронтального метода является использование высокопроизводительных параллельных библиотек BLAS. Для этого не требуется изменять исходный код, необходимо лишь собрать его с соответствующей реализацией BLAS. На диаграмме (рисунок 3; слева) показано ускорение численной фазы разложения Холецкого при запуске с различным числом потоков BLAS.</figDesc><table><row><cell></cell><cell cols="3">Таблица 1. Характеристики тестовых матриц</cell></row><row><cell>Название матрицы</cell><cell>Порядок</cell><cell>Число ненулевых элементов</cell><cell>Число ненулевых элементов в факторе</cell></row><row><cell>Pwtk</cell><cell>217 918</cell><cell>5 926 171</cell><cell>49 025 872</cell></row><row><cell>Msdoor</cell><cell>415 863</cell><cell>10 328 399</cell><cell>51 882 257</cell></row><row><cell>parabolic_fem</cell><cell>525 825</cell><cell>2 100 225</cell><cell>25 571 376</cell></row><row><cell>tmt_sym</cell><cell>726 713</cell><cell>2 903 835</cell><cell>28 657 615</cell></row><row><cell>boneS10</cell><cell>914 898</cell><cell>28 191 660</cell><cell>266 173 272</cell></row><row><cell>Emilia_923</cell><cell>923 136</cell><cell>20 964 171</cell><cell>1 633 654 176</cell></row><row><cell>audkiw_1</cell><cell>943 695</cell><cell>39 297 171</cell><cell>1 225 571 121</cell></row><row><cell>bone010_M</cell><cell>986 703</cell><cell>12 437 739</cell><cell>363 650 592</cell></row><row><cell>bone010</cell><cell>986 703</cell><cell>36 326 514</cell><cell>1 076 191 560</cell></row><row><cell>ecology2</cell><cell>999 999</cell><cell>2 997 995</cell><cell>35 606 934</cell></row><row><cell>thermal2</cell><cell>1 228 045</cell><cell>4 904 179</cell><cell>50 293 930</cell></row><row><cell>StocF-1465</cell><cell>1 465 137</cell><cell>11 235 263</cell><cell>1 039 392 123</cell></row><row><cell>Hook_1498</cell><cell>1 498 023</cell><cell>31 207 734</cell><cell>1 507 528 290</cell></row><row><cell>Flan_1565</cell><cell>1 564 794</cell><cell>59 485 419</cell><cell>1 451 334 747</cell></row><row><cell>G3_circuit</cell><cell>1 585 478</cell><cell>4 623 152</cell><cell>90 397 858</cell></row><row><cell cols="3">6.2 Использование параллельных библиотек BLAS</cell><cell></cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" xml:id="foot_0">Суперкомпьютерные дни в России 2015 // Russian Supercomputing Days 2015 // RussianSCDays.org</note>
		</body>
		<back>
			<div type="annex">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Two-level parallel strategy for multifrontal sparse Cholesky factorization</head><note type="other">Sergey</note><p>In this paper we consider the problem of parallelization of Cholesky factorization numerical phase for sparse symmetric positive definite matrices. A new strategy for parallelization of the multifrontal method for shared-memory systems is suggested. This strategy combines two approaches to parallelism organization depending on the elimination tree level. At the bottom of the tree, parallel computing of nodes from a priority queue takes place. At the top levels of the tree, nodes are calculated sequentially, employing multithreaded BLAS procedures. Experimental results show that the implementation of the scheme described is commensurable with MUMPS and MKL PARDISO solvers.</p></div>			</div>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Direct Solvers for Sparse Matrices</title>
		<author>
			<persName><forename type="first">X</forename><surname>Li</surname></persName>
		</author>
		<ptr target="обращения:15." />
		<imprint>
			<date type="published" when="2015-06">06.2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<author>
			<persName><forename type="first">Е</forename><forename type="middle">А</forename><surname>Козинов</surname></persName>
		</author>
		<author>
			<persName><forename type="first">И</forename><forename type="middle">Г</forename><surname>Лебедев</surname></persName>
		</author>
		<author>
			<persName><forename type="first">С</forename><forename type="middle">А</forename><surname>Лебедев</surname></persName>
		</author>
		<author>
			<persName><forename type="first">А</forename><forename type="middle">Ю</forename><surname>Малова</surname></persName>
		</author>
		<author>
			<persName><forename type="first">И</forename><forename type="middle">Б</forename><surname>Мееров</surname></persName>
		</author>
		<author>
			<persName><forename type="first">А</forename><forename type="middle">В</forename><surname>Сысоев</surname></persName>
		</author>
		<author>
			<persName><forename type="first">С</forename><surname>Филиппенко</surname></persName>
		</author>
		<title level="m">Новый решатель для алгебраических систем разреженных линейных уравнений с симметричной положительно определенной матрицей // Вестник Нижегородского университета им</title>
				<editor>
			<persName><forename type="first">. -Н</forename><surname>Лобачевского</surname></persName>
		</editor>
		<editor>
			<persName><surname>Новгород</surname></persName>
		</editor>
		<imprint>
			<publisher>Изд-во</publisher>
			<date type="published" when="2012">2012</date>
			<biblScope unit="page" from="376" to="384" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Dynamic Parallelization Strategies for Multifrontal Sparse Cholesky Factorization //Parallel Computing Techologies</title>
		<author>
			<persName><forename type="first">S</forename><surname>Lebedev</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Akhmedzhanov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Kozinov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Meyerov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pirova</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Sysoyev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="s">Springer LNCS</title>
		<imprint>
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
	<note>принята к печати</note>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">Direct methods for sparse linear systems</title>
		<author>
			<persName><forename type="first">Davis</forename><surname>Timothy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename></persName>
		</author>
		<imprint>
			<date type="published" when="2006">2006</date>
			<biblScope unit="volume">2</biblScope>
			<pubPlace>Siam</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">The multifrontal method for sparse matrix solution: Theory and practice</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">W H</forename><surname>Liu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIAM review</title>
		<imprint>
			<biblScope unit="volume">34</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="82" to="109" />
			<date type="published" when="1992">1992</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Asynchronous approach to memory management in sparse multifrontal methods on multiprocessors</title>
		<author>
			<persName><forename type="first">A</forename><surname>Kalinkin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Arturov</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Applied Mathematics</title>
		<imprint>
			<biblScope unit="volume">4</biblScope>
			<biblScope unit="issue">12A</biblScope>
			<biblScope unit="page" from="33" to="39" />
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<title level="m" type="main">Multifrontal factorization of sparse SPD matrices on GPUs // Parallel &amp; Distributed Processing Symposium</title>
		<author>
			<persName><forename type="first">T</forename><surname>George</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Saxena</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Gupta</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Singh</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">R</forename><surname>Choudhury</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011">2011</date>
			<publisher>IPDPS</publisher>
			<biblScope unit="page" from="372" to="383" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">The multifrontal solution of indefinite sparse symmetric linear</title>
		<author>
			<persName><forename type="first">I</forename><forename type="middle">S</forename><surname>Duff</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">K</forename><surname>Reid</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Mathematical Software</title>
		<imprint>
			<biblScope unit="volume">9</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="302" to="325" />
			<date type="published" when="1983">1983</date>
		</imprint>
	</monogr>
	<note>TOMS)</note>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">The multifrontal method and paging in sparse Cholesky factorization</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">W</forename><surname>Liu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Mathematical Software</title>
		<imprint>
			<biblScope unit="volume">15</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="310" to="325" />
			<date type="published" when="1989">1989</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Vectorization of a multiprocessor multifrontal code</title>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">R</forename><surname>Amestoy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International Journal of High Performance Computing Applications</title>
		<imprint>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="41" to="59" />
			<date type="published" when="1989">1989</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">Y</forename><surname>L'excellent</surname></persName>
		</author>
		<title level="m">Multifrontal Methods: Parallelism, Memory Usage and Numerical Aspects // Ph</title>
				<imprint>
			<date type="published" when="2012">2012</date>
		</imprint>
		<respStmt>
			<orgName>Ecole normale superieure de lyon-ENS LYON</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">D. thesis</note>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<author>
			<persName><forename type="first">С</forename><forename type="middle">А</forename><surname>Лебедев</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Е</forename><surname>Козинов</surname></persName>
		</author>
		<title level="m">Разработка нового решателя разреженных систем линейных уравнений // Высокопроизводительные параллельные вычисления на кластерных системах: Материалы XIII Всероссийской конференции</title>
				<imprint>
			<publisher>Новгород</publisher>
			<date type="published" when="2013">2013</date>
			<biblScope unit="page" from="301" to="306" />
		</imprint>
	</monogr>
	<note>Изд-во</note>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Progress in sparse matrix methods for large linear systems on vector supercomputers</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">C</forename><surname>Ashcraft</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">G</forename><surname>Grimes</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">G</forename><surname>Lewis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">W</forename><surname>Peyton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">D</forename><surname>Simon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">E</forename><surname>Bjorstad</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International Journal of High Performance Computing Applications</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="10" to="30" />
			<date type="published" when="1987">1987</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">A supernodal Cholesky factorization algorithm for shared-memory multiprocessors</title>
		<author>
			<persName><forename type="first">E</forename><surname>Ng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">W</forename><surname>Peyton</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIAM Journal on Scientific Computing</title>
		<imprint>
			<biblScope unit="volume">14</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="761" to="769" />
			<date type="published" when="1993">1993</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<monogr>
		<title level="m" type="main">Introduction of shared-memory parallelism in a distributedmemory multifrontal solver</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">Y</forename><surname>L'excellent</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">W</forename><surname>Sid-Lakhdar</surname></persName>
		</author>
		<idno>RR-8227 &lt;hal-00786055&gt;</idno>
		<imprint>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
	<note type="report_type">Research Report</note>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Task scheduling for parallel sparse Cholesky factorization</title>
		<author>
			<persName><forename type="first">G</forename><surname>Geist</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Ng</surname></persName>
		</author>
		<ptr target="2015//RussianSCDays.org" />
	</analytic>
	<monogr>
		<title level="m">Суперкомпьютерные дни в России 2015</title>
				<imprint>
			<date type="published" when="1989">1989</date>
			<biblScope unit="volume">18</biblScope>
			<biblScope unit="page" from="291" to="314" />
		</imprint>
	</monogr>
	<note>/ Russian Supercomputing Days</note>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">The university of Florida sparse matrix collection</title>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">A</forename><surname>Davis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Hu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Mathematical Software</title>
		<imprint>
			<biblScope unit="volume">38</biblScope>
			<biblScope unit="issue">1</biblScope>
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">A Fast and Highly Quality Multilevel Scheme for Partitioning Irregular Graphs</title>
		<author>
			<persName><forename type="first">G</forename><surname>Karypis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIAM Journal on Scientific Computing</title>
		<imprint>
			<biblScope unit="volume">20</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="359" to="392" />
			<date type="published" when="1999">1999</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<title level="m" type="main">Scotch and libScotch 6.0 User&apos;s Guide // Tech</title>
		<author>
			<persName><forename type="first">F</forename><surname>Pellegrini</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
	<note type="report_type">LaBRI</note>
	<note>rep.</note>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">MORSy -a new tool for sparse matrix reordering</title>
		<author>
			<persName><forename type="first">A</forename><surname>Pirova</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Meyerov</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of an International Conference on Engineering and Applied Sciences Optimization</title>
				<meeting>an International Conference on Engineering and Applied Sciences Optimization</meeting>
		<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="1952" to="1963" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<ptr target="обращения15." />
		<title level="m">Intel Math Kernel Library Reference Manual</title>
				<imprint>
			<date type="published" when="2015-06">06.2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<monogr>
		<ptr target="вРоссии2015//RussianSupercomputingDays2015//RussianSCDays.org" />
		<title level="m">MUltifrontal Massively Parallel Solver (MUMPS 5.0.0) User&apos;s guide URL</title>
				<imprint>
			<date type="published" when="2015-06-15">обращения 15.06.2015</date>
		</imprint>
	</monogr>
	<note>Суперкомпьютерные дни</note>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
