<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <pub-date>
        <year>2002</year>
      </pub-date>
      <issue>3</issue>
      <fpage>463</fpage>
      <lpage>471</lpage>
      <abstract>
        <p>Обеспечение отказоустойчивых высокопроизводительных вычислений является одной из задач связанных с переходом на вычислительные системы Экзаскейл уровня. Ряд специалистов в этой области рассматривают интерфейс User Level Failure Mitigation (ULFM), как наиболее перспективное средство в решении задачи обеспечения отказоустойчивости. ULFM является дополнением разрабатываемого стандарта MPI, которое позволяет восстанавливать MPI среду и обрабатывать отказы в системе на уровне пользователя. Рассматривается алгоритм, обеспечивающий возможность проведение длительных вычислений на примере решения задачи моделирования процессов взаимодействия газовой смеси с металлической поверхностью с помощью метода молекулярной динамики. Предложена схема обеспечения отказоустойчивости, которая осуществляет сохранение контрольных точек в оперативную память вычислительных узлов, и реализован гибридный метод, сохраняющий как в оперативную память, так и в распределенную файловую систему. Моделирование отказов в системе осуществлялось с помощью разработанной библиотеки моделирования отказов, реализующей функции ULFM на основе MPI стандарта 3.0. Показано, что использование специальной схемы записи в оперативную память позволяет сократить до 15% времени вычислений по сравнению с гибридным методом сохранением контрольных точек. Ключевые слова: параллельное программирование, метод молекулярной динамики, ULFM, контрольные точки, моделирование отказов, отказоустойчивые вычисления.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Отказоустойчивая реализация метода
молекулярной динамики на примере одного приложения*
- алгоритмы, обеспечивающие, в случае отказа части оборудования, быстрое
автоматическое возобновление расчета на работоспособной части вычислительного поля.</p>
      <p>
        На данный момент ведутся разработки разнообразных средств обеспечения
отказоустойчивости: на уровне системы, основанные на BLCR [
        <xref ref-type="bibr" rid="ref5">6</xref>
        ]; на уровне пользователя (ярким примером
являются Charm++[
        <xref ref-type="bibr" rid="ref6">7</xref>
        ] и ULFM [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ]); средства, основанные на односторонних операциях обмена
[9]. Однако общепризнанных решений в настоящее время нет. Наиболее предпочтительным
выглядит делегирование ответственности за реализацию техник отказоустойчивости
пользователю, что позволит варьировать объем и содержание контрольных точек, в соответствии с
известной пользователю семантикой проводимых вычислений. На данный момент стандарт MPI,
позволяющий реализовывать методы обеспечения отказоустойчивости на уровне пользователя,
находится в разработке [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ]. Программная реализация этого стандарта развивается как
ответвление проекта Open MPI [
        <xref ref-type="bibr" rid="ref9">10</xref>
        ]. Однако сроки появления, пригодных к эксплуатации, реализаций
нового стандарта MPI в настоящее время не определены.
      </p>
      <p>Цель работы заключается в разработке методов обеспечения отказоустойчивости
длительных высокопроизводительных вычислений на примере моделирования динамики поведения
потока газа в ограниченном канале с помощью метода молекулярной динамики. Для
тестирования предлагаемых методов используется разработанная библиотека моделирования отказов.
2. Библиотека моделирования отказов</p>
      <p>Как уже было отмечено, для решения поставленной цели используется библиотека,
позволяющая моделировать, как сами отказы, так и работу функций расширения ULFM для
стандарта MPI. Использование спецификации ULFM вызвано естественным стремлением обеспечения
совместимости с разрабатываемым в настоящее время стандартом MPI 4.</p>
      <p>
        Разработана библиотека, содержащая модифицированные MPI функции обмена. Функции
данной библиотеки возвращают значения, не предусмотренные стандартом MPI 3.1,
позволяющие моделировать отказ в нормально функционирующей распределенной вычислительной
системе согласно спецификации [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ] расширения ULFM. Также в этой библиотеке с помощью
функций стандарта MPI 3.1 реализованы аналоги функций MPI_COMM_REVOKE,
MPI_COMM_SHRINK, MPI_COMM_FAILURE_ACK, MPI_COMM_FAILURE_GET_ACKED,
MPI_COMM_AGREE, что позволяет проводить тестирование на надежных вычислительных
системах различных техник отказоустойчивости.
      </p>
      <p>
        Обнаружение и обработка отказа происходит согласно спецификации ULFM [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ], а именно,
моделирование отказа осуществляется следующим образом: при вызове некоторой
MPIфункции один из участвующих процессов объявляется отказавшим, а в остальных
участвующих в коммуникации процессах функции обмена данными возвращают код ошибки,
свидетельствующий о наличии отказа в системе.
      </p>
      <p>
        Операция восстановления после отказов в системе может осуществляться различным
образом, например, с помощью функций Failure_ack, Failure_get_acked [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ]. Наиболее естественным
является проверка кода возврата и, в случае наличия отказа, вызов функции Revoke, которая
помечает коммуникатор, как не пригодный для обменов. Таким образом, все последующие
вызовы MPI функций на данном коммуникаторе возвращают код ошибки, свидетельствующий о
наличии отказа в системе. В программе, в ключевых местах кода, расположены условные
операторы, проверяющие наличие отказа в системе (осуществляется с помощью функции Agree).
При положительном ответе осуществляется вызов функции восстановления для всех не
отказавших процессов коммуникатора. Вызывается функция Shrink, создающая новый
коммуникатор без отказавших процессов, на котором осуществляется восстановление глобальной
контрольной точки и продолжается расчет.
      </p>
      <p>Заметим, что вызов Shrink приведет к сокращению числа MPI-процессов в программе. Для
алгоритмов, использующих метод коллективного решения, Shrink является естественным и
удобным способом восстановления. Для других методов распараллеливания сокращение числа
процессов требует дополнительных действий. В худшем случае может потребоваться
проведение перебалансировки задачи на оставшееся число MPI-процессов. Ввиду очевидно большой
трудоемкости выполнения перебалансировки предлагается использовать другой подход,
основанный на использовании предварительно зарезервированных процессорных узлов.
3. Моделирование процессов взаимодействия газовой смеси с
металлической поверхностью</p>
      <p>
        Постановка задачи моделирования динамики поведения газа и описание используемых
численных методов представлено в [
        <xref ref-type="bibr" rid="ref10">11</xref>
        ]. Далее приведено описание соответствующего
отказоустойчивого алгоритма. В основе программы численного моделирования [
        <xref ref-type="bibr" rid="ref10">11</xref>
        ] лежат принципы
геометрического и функционального параллелизма. В нашем случае расчетная область в целом
разбивается на локальные домены одинаковой мощности. Мощность домена измеряется в
количестве элементарных боксов, в каждом из которых молекулы обязательно взаимодействуют
друг с другом. Разбиение на домены производится в рамках топологии “трехмерная решетка”,
поскольку расчетная область является трехмерным параллелепипедом. Каждый расчетный
домен попадает на свой вычислитель, в качестве которого используется узел кластера или
суперкомпьютера. Взаимодействие процессов, выполняющихся на разных вычислительных узлах,
реализовано с помощью библиотеки MPI.
      </p>
      <p>Каждый вычислительный узел обрабатывает один расчетный домен, объединяющий
некоторое количество элементарных боксов, сгруппированных в трехмерную подрешетку. Такая
структура используется для дальнейшего распределения вычислений по тредам центральных
процессоров (ЦПУ), поскольку обмены внутри боксов имеют более высокую интенсивность,
чем между боксами. В итоге, межмолекулярные взаимодействия в боксах реализуются в
параллельном режиме за счет использования технологии OpenMP.</p>
      <p>Во избежание необходимости перебалансировки после использования Shrink предлагается
все множество запущенных MPI-процессов разделить на «рабочие», «дополнительные» и
«отказавшие». В начале работы все множество процессов разбивается на «рабочие»,
формирующие рабочее поле, и «дополнительные», которые простаивают, в ожидании вызова обработчика
отказа в системе. По мере возникновения отказов, часть «рабочих» переходит в «отказавшие», а
«дополнительные» восполняют соответствующую часть «рабочих». В результате, число
«рабочих» процессов остается постоянным. Начальное число необходимых «дополнительных»
процессов зависит от ожидаемой продолжительности расчета и оцениваемой частоты отказов в
системе.</p>
      <p>Основной алгоритм расчета выглядит следующим образом.
Этап 1. Инициализация элементов библиотеки моделирования отказов.</p>
      <p>Этап 2. Чтение данных (исходных/из контрольной точки) MPI-приложением и
инициализация структур данных каждым рабочим MPI-процессом.</p>
      <p>Этап 3. Основные вычисления в цикле по времени.</p>
      <p>Этап 4. Проверка нормального выхода из цикла, в случае необходимости запуск функции
восстановления и последующий переход на этап 2.</p>
      <p>Этап 5. Выполнение результирующих вычислений и завершение работы.</p>
      <p>Ключевым для первого этапа является разбиение множества процессов на «рабочие» и
«дополнительные», а так же создание соответствующих коммуникаторов.</p>
      <p>На втором этапе, в частности, выполняется определение числа молекул в расчетной
области, генерация их размещения, а также генерация равномерного по углам и максвелловского по
модулю распределения их импульсов и расчет стартовых сил.</p>
      <p>Отличием описанного подхода от других является использование структур данных,
опирающихся на элементарные боксы, размеры которых связаны с радиусом обрезания потенциалов
взаимодействия и параметрами кристаллической решетки металла. Такой подход является
достаточно затратным по объему необходимой оперативной памяти, однако значительно
экономит время при вычислениях. Дело в том, что обработка малого числа частиц в нескольких
смежных боксах, расположенных практически в одной или нескольких смежных страницах
оперативной памяти, выполняется максимально быстро и хорошо кэшируется. Фактически,
используется прием локализации памяти, при котором процессору при интенсивных
вычислениях не требуется переключаться между далеко отстоящими друг от друга страницами
оперативной памяти.</p>
      <p>Кроме того, удалось избежать дорогостоящей процедуры определения принадлежности
различных частиц к конкретным боксам, проводящейся в других кодах на каждом шаге по
времени. Еще один плюс от использования боксовой структуры заключается в том, что пересылка
частиц между узлами многопроцессорной вычислительной системы (МВС), связанная с
движением последних по расчетной области, интегрируется как с реализацией периодических
граничных условий, так и с обменами информацией между смежными по кубической решетке
MPI-процессами. Последнее достигается использованием теневых (виртуальных) боксов с
фиктивными частицами, взаимодействие с которыми основных частиц должно учитываться в
потенциальной энергии системы.</p>
      <p>В рамках цикла по времени реализована следующая последовательность действий. Сначала
вычисляются новые значения координат. Далее производится их коррекция с помощью
периодических граничных условий. После этого производится обмен частицами между конкретными
боксами, который осуществляется как внутри расчетных доменов, так и между расчетными
доменами с помощью функций MPI из библиотеки моделирования отказов. Осуществляется
проверка наличия отказа и, в случае положительного ответа, осуществляется переход на Этап 4.</p>
      <p>Далее происходит расчет сил, на основании которых производится коррекция скоростей
частиц и вычисляются все необходимые интегральные характеристики. При достижении
контрольных моментов времени необходимые данные сохраняются в контрольные точки.</p>
      <p>В случае наличия отказа в системе, на четвертом этапе запускается процедура
восстановления. Она заключается в запуске функции Shrink, и в последующем преобразовании
«рабочих» и «дополнительных» процессов, таким образом, чтобы дополнительные процессы
получили номера отказавших процессов. Это преобразование позволяет сделать процедуру чтения
контрольных точек проще, так как всем ранее «рабочим» процессам достаточно прочитать
данные из своей оперативной памяти. Чтение новыми рабочими процессами осуществляется в
зависимости от метода сохранения контрольных точек, средствами MPI, в случае хранения
данных в оперативной памяти узлов, или файловыми операциями, в случае использования общего
дискового массива. Переход на второй этап.
4. Вычислительный эксперимент</p>
      <p>В данной работе были разработаны две программы, в которых реализован алгоритм
моделирования процессов взаимодействия газовой смеси с металлической поверхностью,
описанный в третьем параграфе статьи. Во время выполнения одной итерации из расчетного цикла
происходят обмены информации между процессами, в связи с чем необходимо использовать
координированный протокол, либо нескоординированный с методами логирования [12]. В
данной работе сохранение контрольных точек проходит по координированному протоколу.
Следует отметить, что сохранение контрольных точек осуществляется через определенные периоды
согласно [13], которые зависят от параметров, описывающих функционирование
вычислительной системы, работу программы и моделируемые отказы.</p>
      <p>
        В первой программе сохранение контрольных точек осуществляется в оперативную память
вычислительных узлов по схеме сохранения описанной в работе [
        <xref ref-type="bibr" rid="ref11">14</xref>
        ]. А именно, исходя из
параметров, описывающих работу программы и моделируемые отказы (время работы программы
без средств обеспечения отказоустойчивости, объем контрольной точки, размер оперативной
памяти на один MPI-процесс, ожидаемая частота отказа в системе), для каждого MPI-процесса
определяются номера MPI-процессов, которым следует передавать данные для сохранения.
      </p>
      <p>
        Во второй программе осуществляется гибридное сохранение контрольных точек как в
оперативную память, так и в распределенную файловую систему. Отметим, что для возможности
восстановления расчетов в первой программе необходимо дублирование локальных
контрольных точек, что реализуется с помощью специальной схемы сохранения [
        <xref ref-type="bibr" rid="ref11">14</xref>
        ]. А для второй
программы дублирование не требуется, так как через распределенную файловую систему все
локальные контрольные точки непосредственно доступны новым MPI-процессам, введенным в
расчетное поле. Отметим, что в случае отказа MPI-процесса, он заменяется на новый, который
считывает контрольную точку из файловой системы, а остальные процессы считывают свои
контрольные точки из оперативной памяти.
      </p>
      <p>Описание алгоритмов восстановления для первой и второй программы приведены в табл 1.
Основными отличиями являются место хранения контрольных точек, а также необходимость
определять глобальную контрольную точку для восстановления в первой программе (во второй
осуществляется только чтение последней) и, как следствие, возможный пересчет нескольких
итераций расчетного цикла. Получаем, что минусами для первой программы является больший
пересчет итераций при кратных отказах (отказывают несколько процессов одновременно); для
второй – накладные расходы на сохранение контрольных точек в распределенную файловую
систему.</p>
      <p>Таблица 1. Отличия в алгоритмах восстановления программ после отказа
Первая программа Вторая программа
 Восстановить MPI-среду;
 восстановить рабочее поле;
 определить последнюю достижимую
глобальную контрольную точку (она
расположена в оперативной памяти MPI-процессов  прочитать (из распределенной файловой
не пострадавших от отказа); системы) последнюю локальную
контрольную точку новыми рабочими
MPI передать (через MPI интерфейс) необходи- процессам;
мые локальные контрольные точки новым
рабочим MPI-процессам;
 затем осуществить восстановление работы прикладной программы с</p>
      <p>локальных контрольных точек.</p>
      <p>Моделируемая микросистема содержала пластинку никеля с размерами 288×288×24 ребер
(элементарной ячейки кристаллической решетки); число атомов никеля составляет 8128512;
бокс имеет размеры 96×96×8 ребер (элементарной ячейки кристаллической решетки), размер
контрольной точки был порядка 4 Мб. Время работы программы реализованной без средств
обеспечения отказоустойчивости составляет 225 минут. Первая и вторая программы
запускались на 256 MPI-процессах при разных значениях среднего времени между отказами  =
{30,60,90,120,150,180} (мин), соответствующее количество модельных отказов составило –
{7,4,2,2,1,1}. В данном примере моделировались одинарные отказы.</p>
      <p>Рис. 1. Времена выполнения программ, реализующих различные техники отказоустойчивости, при
различных значениях MTBF; время работы программы без сбоев и без средств обеспечения
отказоустойчивости
5. Заключение</p>
      <p>В результате тестовых расчетов было получено, что использование специальной схемы
сохранения в оперативную память позволяло сократить до 15% времени вычислений по
сравнению с гибридным методом сохранением контрольных точек. Однако координированный
протокол распределенного сохранения в оперативную память вычислительных узлов должен
столкнуться с проблемой уменьшения объема оперативной памяти на ядро при подходе к Экзаскейл
уровню. Отметим, что данная схема сохранения обобщается до распределенного сохранение
контрольных точек в различные средства хранения вычислительного узла HDD, SSD или
другие будущие устройства хранения. Возможность применения такого сохранения контрольных
точек также должна быть исследована. Но подобное тестирование на данный момент
затруднено, так как многие вычислительные системы либо не имеют дисков для каждого
вычислительного узла, либо не дают возможности пользователю работать с этими средствами хранения.
Литература
5. Elnozahy, E., Plank, J. Checkpointing for Petascale systems: a look into the future of practical
rollback-recovery. Dependable and Secure Computing, IEEE Transactions on 1, 2. Apr. 2004,
P. 97–108.
12. Elnozahy E.N., Alvisi L., Wang Y., Johnson D.B. A Survey of Rollback-Recovery Protocols in</p>
      <p>Message-Passing Systems // ACM Computing Surveys. — 2002. — Vol.34, No. 3 — P. 375–408.
13. Aupy G., Benoit A.,Herault T., Robert Y., Dongarra J. Optimal Checkpointing Period: Time
vs.Energy // High Performance Computing Systems. Performance Modeling, Benchmarking and
Simulation: 4th International Workshop, PMBS 2013, November 18, 2013, Denver, CO, USA,
Proceedings. Springer. 2014.
14. Бондаренко А.А. Якобовский М.В. Обеспечение отказоустойчивости
высокопроизводительных вычислений с помощью локальных контрольных точек // Вестник
ЮжноУральского государственного университета. Серия «Вычислительная математика и информатика».
2014. Том. 3, No. 3, С. 20–36.</p>
      <p>The fault-tolerant implementation of the method of
molecular dynamics on the example of one application</p>
    </sec>
    <sec id="sec-2">
      <title>A.A. Bondarenko, V.O. Podryga, S.V. Polyakov, M.V. Iakobovski</title>
    </sec>
    <sec id="sec-3">
      <title>Keldysh Institute of Applied Mathematics, Russian Academy of Sciences</title>
      <p>Fault-tolerant is one of problems which appear on the road to Exascale computing. HPC
scientists consider ULFM (User Level Failure Mitigation) as perspective tool for solving
fault-tolerant challenge. ULFM is a set of MPI interface extensions enabling Message
Passing programs to restore MPI and handle with faults on user level. We consider an algorithm
which simulates interaction of the gas mixture with a metal surface using the method of
molecular dynamics. For this algorithm we propose a resiliency scheme, that checkpointing
in the memory of the computing nodes and implement hybrid method of checkpointing both
in operative memory and in the distributed file system. For fault simulations we use special
library which realize some of the ULFM functions by MPI standard 3.0. Experiments show
that checkpointing in operative memory can reduce overhead to 15% compare to hybrid
checkpointing.
5. Elnozahy, E., Plank, J. Checkpointing for Petascale systems: a look into the future of practical
rollback-recovery. Dependable and Secure Computing, IEEE Transactions on 1, 2. Apr. 2004,
P. 97–108.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <article-title>Top 500 The List</article-title>
          . URL: http://top500.org/ (accessed:
          <fpage>25</fpage>
          .
          <fpage>11</fpage>
          .
          <year>2015</year>
          )
          <article-title>2</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <surname>Schroeder</surname>
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gibson</surname>
            <given-names>G. A.</given-names>
          </string-name>
          <article-title>Understanding failures in petascale computers</article-title>
          .
          <source>Journal of Physics: Conference Series</source>
          .
          <year>2007</year>
          . Vol.
          <volume>78</volume>
          , No 1.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. SFT: Scalable Fault Tolerance URL: http://hpc.pnl.gov/sft/ (accessed:
          <fpage>25</fpage>
          .
          <fpage>11</fpage>
          .
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Cappello</surname>
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Geist</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gropp</surname>
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kale</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kramer</surname>
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Snir</surname>
            <given-names>M</given-names>
          </string-name>
          .
          <source>Toward Exascale Resilience: 2014 update // Supercomputing frontiers and innovations</source>
          .
          <source>2014</source>
          . Vol.
          <volume>1</volume>
          , No. 1. P. 1-
          <fpage>28</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          6. Berkeley Lab Checkpoint/
          <article-title>Restart (BLCR) for LINUX URL</article-title>
          : http://crd.lbl.gov/departments/computer-science/CLaSS/research/BLCR/ (accessed:
          <fpage>25</fpage>
          .
          <fpage>11</fpage>
          .
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          7.
          <string-name>
            <given-names>Parallel</given-names>
            <surname>Languages</surname>
          </string-name>
          /Paradigms: Charm++ URL: http://charm.cs.illinois.edu/research/charm. (
          <source>accessed: 25.11</source>
          .
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          8. Fault Tolerance Research Hub URL: http://fault-tolerance.org/ulfm/ulfm-specification
          <source>(accessed: 25.11</source>
          .
          <year>2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <given-names>M.</given-names>
            <surname>Besta</surname>
          </string-name>
          ,
          <string-name>
            <surname>T.</surname>
          </string-name>
          <article-title>Hoefler "Fault Tolerance for Remote Memory Access Programming Models" //</article-title>
          <source>In Proceedings of the 23rd ACM International Symposium on High-Performance Parallel and Distributed Computing (HPDC'14)</source>
          , presented in Vancouver, Canada,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , Jun.
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          10. ULFM-
          <volume>1</volume>
          .1 Release URL: http://fault-tolerance.org/
          <year>2015</year>
          /11/14/ulfm-1-1-release/ (accessed:
          <fpage>25</fpage>
          .
          <fpage>11</fpage>
          .
          <year>2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          11.
          <string-name>
            <surname>Podryga</surname>
            <given-names>V.O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Polyakov</surname>
            <given-names>S.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Puzyr'kov D</surname>
          </string-name>
          .V.
          <article-title>Superkomp'yuternoe molekulyarnoe modelirovanie termodinamicheskogo ravnovesiya v mikrosistemakh gaz-metall [Supercomputer Molecular Modeling of Thermodynamic Equilibrium in Gas-Metal Microsystems]</article-title>
          .
          <source>Vychislitel'nye metody i programmirovanie</source>
          .
          <source>2015</source>
          . Vol.
          <volume>16</volume>
          , No. 3,
          <string-name>
            <surname>P.</surname>
          </string-name>
          123-
          <fpage>138</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          14.
          <string-name>
            <surname>Bondarenko</surname>
            <given-names>A.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yakobovskiy</surname>
            <given-names>M.V.</given-names>
          </string-name>
          <article-title>Obespechenie otkazoustoychivosti vysokoproizvoditel'nykh vychisleniy s pomoshch'yu lokal'nykh kontrol'nykh tochek [Fault Toler-ance for HPC by Using Local Checkpoints]. Vestnik Yuzhno-Ural'skogo gosudarstvennogo universiteta</article-title>
          .
          <source>Seriya «Vychislitel'naya matematika i informatika»</source>
          [Bulletin of South Ural State University. Series: Computational Mathematics and Software Engineering].
          <year>2014</year>
          . Vol.
          <volume>3</volume>
          , No. 3. P.
          <volume>20</volume>
          -
          <fpage>36</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>