<?xml version='1.0' standalone='no' ?>
<journal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="JournalArticulus.xsd">
    <operCard>
        <operator>ИПМ им. М.В.Келдыша РАН|Publicator</operator>
        <date>2026-04-08 19:58:03</date>
        <cntArticle>1</cntArticle>
        <cs>0</cs>
    </operCard>
    <titleid>32018</titleid>
    <issn>2071-2901</issn>
    <codeNEB>20712901</codeNEB>
    <journalInfo lang="RUS">
        <title>Препринты ИПМ им. М.В.Келдыша</title>
    </journalInfo>
    <issue>
        <volume/>
        <number>61</number>
        <altNumber/>
        <part/>
        <dateUni>2023</dateUni>
        <issTitle/>
        <pages>1-28</pages>
        <articles>
            <article>
                <pages>1-28</pages>
                <artType>RAR</artType>
                <authors>
                    <author num="001">
                        <authorCodes>
                            <orcid>0000-0001-7887-8700</orcid>
                        </authorCodes>
                        <individInfo lang="RUS">
                            <surname>Милюкова</surname>
                            <initials>Ольга Юрьевна</initials>
                            <orgName>Институт прикладной математики им. М.В.Келдыша РАН</orgName>
                            <email>olgamilyukova@mail.ru</email>
                        </individInfo>
                        <individInfo lang="ENG">
                            <surname>Milyukova</surname>
                            <initials>O.Y.</initials>
                            <orgName>Keldysh Institute of Applied Mathematics RAS</orgName>
                        </individInfo>
                    </author>
                </authors>
                <artTitles>
                    <artTitle lang="RUS">Параллельная реализация метода сопряженных градиентов с предобусловливателем IC1 на основе использования переупорядочения узлов сетки</artTitle>
                    <artTitle lang="ENG">Parallel implementation of the conjugate gradient method with the IC1 preconditioner based on the use of grid node reordering</artTitle>
                </artTitles>
                <abstracts>
                    <abstract lang="RUS">В работе предлагается способ применения MPI+OpenMP технологии для построения и обращения предобусловливателя неполного треугольного разложения Холецкого первого порядка IC1(τ) для решения системы линейных алгебраических уравнений с произвольной симметричной положительно определенной матрицей на небольшом числе процессоров. Способы применения MPI и MPI+OpenMP технологии основаны на использования упорядочений узлов сетки, согласованных с разбиением области расчета. При построении матрицы предобусловливания IC1(τ) с использованием MPI производится отсечение по позициям в некоторых ее строках. Применение OpenMP технологии при построении и обращении предобусловливателя осуществляется для большинства строк матрицы. Проводится сравнение времени решения задач методом сопряженных градиентов с предобусловливателем IC1(τ) с использованием MPI и гибридной MPI+OpenMP технологии на примере модельной задачи и ряда задач из коллекции разреженных матриц SuiteSparse.</abstract>
                    <abstract lang="ENG">The paper proposes a method for using MPI+OpenMP technology for constructing and inverting a first-order incomplete triangular Cholesky expansion preconditioner IC1(τ) for solving system of linear algebraic equations with an arbitrary symmetric positive definite matrix on a small number of processors. Methods of using MPI and MPI+OpenMP technologies are based on the use of grid node orderings consistent with the division of the calculation area. When constructing the preconditioning matrix IC1(τ) using MPI, cutting is performed at positions in some of its rows. The use of OpenMP technology in the construction and inversion of the preconditioner is carried out for most rows of the matrix. The time taken to solve problems using the conjugate gradient method with the IC1(τ) preconditioner using MPI and hybrid MPI+OpenMP technology is compared using the example of a model problem and a number of problems from the SuiteSparse collection of sparse matrices.</abstract>
                </abstracts>
                <text lang="RUS">   
   1. Введение 
    Рассмотрим задачу приближенного решения системы линейных алгебраических уравнений (СЛАУ) большого размера
                                                                                                                 (1.1)
с симметричной положительно определенной разреженной матрицей A общего вида 
                                                            .
    Проблема построения эффективных численных методов решения СЛАУ (1.1) сохраняет свою актуальность, так как во многих важных прикладных областях продолжают возникать новые постановки таких задач. При этом наблюдается тенденция к росту размера матриц n, а также к ухудшению их обусловленности. 
    В настоящей работе для решения СЛАУ (1.1) большого размера будем применять предобусловленный метод сопряженных градиентов (CG), итерации которого осуществляются до выполнения условия
                                      , где .                        (1.2)
    Для предобусловливания будем использовать неполное треугольное разложение Холецкого с отсечением по параметру первого порядка IC1() (Incomplete Cholesky). Здесь и далее 0&lt;&lt;&lt;1 – параметр отсечения. При этом используется факторизованная матрица предобусловливания
    , ,
где U – верхнетреугольная матрица. Одним из первых алгоритмов, в котором за основу построения матрицы предобусловливания берется точный алгоритм треугольной факторизации, а на его определенных этапах вносится отсечение возникающих элементов матриц малых относительно порога, зависящего от , опубликован в работе [1]. Заметим, что предобусловливание IC1() имеет ограниченную область применимости [2].
    Основная трудность распараллеливания алгоритмов построения и обращения неявного предобусловливателя неполного треугольного разложения связана с рекурсивным характером вычислений. Одним из способов ее преодоления является использование переупорядочений узлов сетки и соответствующих перестановок строк и столбцов матрицы, например, использование упорядочений, связанных с разбиением области расчета DDO (Domain Decomposition ordering) [3]. Применению такого подхода для крупнозернистого распараллеливания, когда область расчета разбивается на подобласти и расчеты в каждой подобласти производятся на своем процессоре, посвящено много работ, например [4-8]. Однако в этих работах используются предобусловливатели, в которых в качестве критерия заполнения не используется параметр отсечения по значению, большая часть этих работ посвящена распараллеливанию вычислений при проведении расчетов задач на ортогональных сетках.
    В работе [9] предлагается использовать упорядочение узлов сетки типа DDO для построения параллельного варианта метода стабилизированного неполного треугольного разложения второго порядка сопряженных градиентов (IC2S()-CG) [10]. При этом производится отсечение по позициям для некоторых элементов матрицы предобусловливания.
    В работах [11, 12, 13] предложен альтернативный подход, который позволяет преодолеть проблему распараллеливания рекурсивных вычислений при построении и обращении предобусловливателя при решении задачи на многопроцессорной вычислительной системе. В этих работах предложены параллелизуемые предобусловливатели, представляющие собой блочную версию предобусловливания неполного обратного треугольного разложения BIIC [14] в сочетании с неполным треугольным разложением второго порядка IC2() [10] – BIIC-IC2() [11], IC2S() – BIIC-IC2S() [12] и  первого порядка IC1() – BIIC-IC1() [13]. Для построения этих предобусловливателей специальным образом строятся блоки с налеганием, а внутри блоков используется приближенное треугольное разложение IC2(), IC2S(), IC1(). 
    Проблеме использования высокоуровнего параллелизма (мелкозернистого или распараллеливания алгоритма на потоки) при построении и обращении неявного факторизованного предобусловливателя посвящен ряд работ. Среди них следует отметить работы, в которых для мелкозернистого распараллеливания используется переупорядочение узлов сетки типа DDO. В работах [15, 16] предложены два безытерационных способа применения MPI+OpenMP технологии построения и обращения предобусловливателя блочного Якоби в сочетании с неполным треугольным разложением Холецкого без заполнения IC(0) [17], IC1() и IC2S(). Один из них основан на переупорядочении узлов сетки типа DDO [9] внутри каждой подобласти, полученной для крупнозернистого распараллеливания. 
    В работе [13] предлагается использовать MPI+OpenMP технологии для параллельной реализации методов BIIC-IC1()-CG и BIIC-IC2S()-CG, причем число блоков в предобусловливателях кратно числу используемых процессоров и числу используемых потоков. В работе [18] рассматривается способ применения MPI+OpenMP технологии для параллельной реализации построения и обращения предобусловливателя BIIC-IC1() [13] (способ 1) и предлагается способ 2 использования MPI+OpenMP технологии. В способе 2 для мелкозернистого распараллеливания применяется упорядочение узлов сетки типа DDO [9]. Расчеты показали, что при использовании способа 2 время счета тестовых задач с сильно разреженной матрицей было, как правило, немного меньше, чем при использовании способа 1. Заметим, что, как показали расчеты тестовых задач, использование переупорядочения узлов сетки типа DDO для мелкозернистого распараллеливания построения и обращения предобусловливателя BIIC-IC2S() неэффективно. 
    В работе [19] предложены два способа применения MPI и MPI+OpenMP технологии для построения и обращения предобусловливателя IC(0) [17] в предобусловленном методе сопряженных градиентов, которые отличаются способом вычисления матрицы предобусловливания. В этой работе упорядочение типа DDO [9] используется как для крупнозернистого, так и для мелкозернистого распараллеливания. В работе [20] предложен способ применения MPI+OpenMP технологии для параллельной реализации построения и обращения варианта предобусловливателя неполного разложения Холецкого без заполнения VIC [21]. При этом для крупнозернистого и мелкозернистого распараллеливания используется упорядочение узлов сетки типа DDO [9]. 
    С помощью расчетов тестовых задач в работах [13, 15, 16, 18- 20] показано, что применение MPI+OpenMP технологии позволяет существенно ускорить вычисления по сравнению с применением только MPI для не слишком большого числа узлов суперкомпьютерной системы. В частности, для тестовых задач, рассмотренных в настоящей работе, в работах [15, 16] удалось существенно ускорить вычисления при использовании не более 10–20 процессоров, а в работах [13, 18-20] – не более 10 процессоров.
    В формуле (1.1) предполагается, что матрица A уже переупорядочена, а вместо  стоит A (), где P – матрица перестановок, а  – матрица коэффициентов исходной задачи. В настоящей работе применяются переупорядочения, уменьшающие среднюю ширину ленты матрицы, а именно предложенные в работе [22], являющиеся обобщением упорядочения [12]. Подход, предложенный в этих работах, позволяет одновременно произвести разбиение односвязной области расчета на подобласти. Будем также предполагать, что матрица A отмасштабирована, т.е. ее диагональные элементы равны единице. Это достигается с использованием формулы: , где – диагональная часть матрицы . Далее вместо  будем использовать обозначение , предполагая, что переупорядочение и масштабирование уже выполнены.
    В настоящей работе предлагается способ применения MPI+OpenMP технологии для построения и обращения предобусловливателя IC1() при решении СЛАУ (1.1) с произвольной симметричной положительно определенной матрицей на небольшом числе процессоров. В нем DDO упорядочение [9] используется как для крупнозернистого, так и для мелкозернистого распараллеливаний этапов построения и обращения предобусловливателя IC1(). При построении матрицы предобусловливания с использованием MPI производится отсечение по позициям в некоторых ее строках. Применение OpenMP технологии при построении и обращении предобусловливателя осуществляется для большинства строк матрицы. В работе проводится сравнение времени решения тестовых задач методом IC1()-CG с использованием MPI и MPI+OpenMP технологии на примере модельной задачи и ряда задач из коллекции разреженных матриц SuiteSparse  [23], а также сравнение скорости сходимости методов IC1()-CG,  IC(0)-CG, BIIC-IC1() и BIIC-IC2S() при решении ряда тестовых задач с использованием  MPI и MPI+OpenMP технологии. 
   
   2. Предобусловленный метод сопряженных градиентов
    Алгоритм предобусловленного метода сопряженных градиентов (см., например, [24]) имеет следующий вид:
    
    Алгоритм 1
     , ,  ,
для k=0,… пока   выполнять
     ,           ,
     ,     ,      , 
     ,           ,        ,
     
где , B – матрица предобусловливания (). Этот алгоритм использует операции умножения разреженных матриц на вектор, операции вычисления скалярных произведений, элементарные векторные операции, а также вычисление , . Принципиальная возможность эффективной MPI+OpenMP реализации всех операций, кроме вычисления , , не вызывает сомнений.  
   
   3. Алгоритм построения предобусловливателя IC1()
    Перед построением матрицы предобусловливания IC1() необходимо выполнить масштабирование матрицы , как описано во введении. Матричная схема метода предобусловливания IC1() имеет вид [1]
                                                       ,                                           
где  – верхнетреугольная матрица. Выбор элементов  матрицы погрешности E осуществляется так, чтобы «убрать» все «малые» значения , где  – элементы матрицы , j = i, …, n. Будем использовать алгоритм 2 [13]. Напомним, что после масштабирования .

       Алгоритм 2
1. Инициализация вспомогательной диагональной матрицы:
     for i=1,…, n
        
     end for
 Цикл по строкам  для вычисления строк : 
     for i=1,…,n 
2. Инициализация вектора v при помощи i-й строки A:
             for j=i+1,…, n
                  
             end for
 3. Сделать поправку к вектору v:
             for t=1,…,i-1 
                  for j=i+1,…,n
                      
                  end for
             end for
4. Вычисление : 
           
5. Вычисление элементов  при j&gt;i : 
            for j=i+1, …, n
                if  then
                       
                    else
                  
                 end if
            end for
6. Выполнение поправки к вспомогательной диагональной матрице
            for j=i+1,…, n
                  
            end for 
     end for (конец цикла по i)
     
Здесь и далее  – элементы вспомогательной диагональной матрицы. При написании программы для реализации алгоритма 2 необходимо обеспечить доступ по столбцам к элементам матрицы U. При вычислении  в п. 4 алгоритма 2 необходимо извлекать квадратный корень из числа, которое определяется в процессе вычислений. Это выражение может оказаться отрицательным. В этом случае следует для решения СЛАУ (1.1) уменьшить значение параметра  или использовать метод сопряженных градиентов с другим предобусловливателем.
   
4. Алгоритм реализации построения и обращения предобусловливателя IC1() с использованием MPI
    Пусть матрица A переупорядочена и отмасштабирована. Разобьем каким-либо образом произвольную (возможно, трехмерную) область расчета на p подобластей, где p – предполагаемое число используемых процессоров, выберем некоторую нумерацию подобластей и будем использовать упорядочение узлов сетки, предложенное в работе [9]. Для этого введем множество узлов разделителей – множество узлов сетки в подобластях, у которых имеются соседи из подобластей с бо?льшим номером. Остальные узлы сетки будем называть внутренними. Узел разделителя назовем узлом разделителя первого уровня, если в шаблоне этого узла нет узлов разделителей из других подобластей c номерами, бо?льшими, чем номер рассматриваемой подобласти. Узел разделителя назовем узлом разделителя второго уровня, если в шаблоне этого узла нет узлов разделителей более высокого, чем первый уровень, расположенных в подобластях с бо?льшим номером. Остальные узлы разделителей назовем узлами разделителей третьего уровня. 
    Используя определение узлов разделителей первого, второго и третьего уровней и доказательство от противного, получим, что в шаблонах узлов разделителей первого уровня могут быть только внутренние узлы из подобластей с тем же или бо?льшими номерами и узлы разделителей из той же подобласти и подобластей с меньшими номерами. В шаблонах узлов разделителей второго уровня могут быть внутренние узлы из подобластей с тем же или бо?льшими номерами, узлы разделителей первого уровня из подобластей с тем же или бо?льшими номерами, узлы разделителей более высокого уровня, чем первый, но только из рассматриваемой подобласти и подобластей с меньшими номерами. Используя доказательство от противного, можно доказать, что в шаблонах узлов разделителей первого уровня не может быть узлов разделителей первого уровня из других подобластей; в шаблонах узлов разделителей второго уровня не может быть узлов разделителей второго уровня из других подобластей. 
    Установим следующий порядок следования узлов сетки. Сначала идут все внутренние узлы подобластей в порядке следования номеров подобластей, причем сохраняется порядок следования узлов внутри каждой подобласти, введенный ранее. Затем идут узлы разделителей первого уровня в порядке следования номеров подобластей с сохранением порядка следования узлов внутри каждой подобласти, введенного ранее. Далее следуют узлы разделителей второго уровня в порядке следования номеров подобластей с сохранением ранее введенного порядка следования узлов внутри подобластей. И, наконец, идут узлы разделителей третьего уровня в порядке следования номеров подобластей и с сохранением ранее введенного порядка следования узлов внутри каждой подобласти. 
     На рис. 1 приведен вид структуры разреженности матрицы A, полученной после перестановки строк и столбцов в результате переупорядочения в случае разбиения области расчета на 4 подобласти. Использованы обозначения: l – число всех внутренних узлов сетки из всех подобластей, l1 – число всех внутренних узлов сетки из всех подобластей и всех узлов разделителей первого уровня из всех подобластей, l2 – число всех внутренних узлов сетки из всех подобластей и всех узлов разделителей первого и второго уровня из всех подобластей. Строки матрицы, содержащие блочно-диагональные части , соответствуют внутренним узлам сетки и хранятся в процессоре с номером s. Строки матрицы, содержащие блочно-диагональные части  и ,  соответствуют узлам сетки соответственно на разделителях первого и второго уровня из подобласти с номером s и хранятся в процессоре с номером s. Строки матрицы, соответствующие блочно-диагональной части , соответствуют узлам сетки на разделителях третьего уровня. 

    
Рис. 1. Вид структуры разреженности матрицы A, полученной после перестановки строк и столбцов в результате переупорядочения
    Способ применения MPI при построении и обращении предобусловливателя IC1() является аналогичным способу 1 применения MPI при построении и обращении предобусловливателей IC(0) [19] и IC2S() [9]. Перед вычислением элементов матрицы U необходимо произвести переупорядочение строк и столбцов матрицы A в соответствии с новым упорядочением узлов сетки и  положить  для i = 1, 2, …, n. 
    Определение элементов матрицы U начинается с вычисления ее элементов в строках, соответствующих внутренним узлам всех подобластей. Используя метод математической индукции, можно доказать, что в шаблонах внутренних узлов в матрице U не могут присутствовать внутренние узлы из других подобластей. Поэтому вычисление элементов матрицы  в строках, соответствующих внутренним узлам, может происходить во всех процессорах одновременно. При этом используется алгоритм, аналогичный алгоритму 2, в котором циклы по i и по t происходят по внутренним узлам соответствующих подобластей. 
    Перед переходом к вычислениям элементов матрицы  в строках, соответствующих узлам разделителей первого уровня, следует вычислить вспомогательную матрицу V, элементы которой  определяются с помощью алгоритма 3,  аналогичного алгоритму 2 из работы [9].
    
      Алгоритм 3
1. for s=1,…, p   
Вычислить   для  i=l+1,…,n, j=i+1,…,n:
      for i=l+1,…,n
   for j=i+1,…,n
       if  then 
                
             else
             for t=, …, 
                
             end for
                end if
             end for
           end for
          end for (конец цикла по s)
2. Вычислить  для  i=l+1,…,n, j=i+1,…,n: 
   for  i=l+1,…, n,
  for j=i+1,…, n  

            end for
         end for
    
Здесь и далее ,  – номера первой и последней строк, соответствующих внутренним узлам в подобласти с номером s, используются две целочисленные функции  и ,  определенные на множестве узлов разделителей: , где  – номер подобласти, содержащей узел с номером i,  –   номер уровня разделителей для узла с номером  i. В отличие от алгоритма 4 из работы [19], в пункте 1 присутствует отсечение по позициям элементов матрицы V, что необходимо для лучшей параллелизуемости алгоритмов построения и обращения матрицы U. В работе [19] в этом нет необходимости, так как структура верхнетреугольного множителя матрицы предобусловливания IC(0) совпадает со структурой верхнетреугольной части матрицы A.
    Кроме вычисления элементов матрицы V производится суммирование по всем процессорам вычисленных там неокончательных значений  для j, соответствующих номерам узлов разделителей. Параллельная реализация этих этапов аналогична их параллельной реализации в случае использования предобусловливателя IC(0) и описана в работе [19]. 
    Остановимся на вычислении элементов матрицы U в строках, соответствующих узлам разделителей первого уровня.  Так как  и  для  i и  j, соответствующих узлам разделителей первого уровня, находящимся в разных подобластях,  то методом математической индукции можно доказать, что для этих значений ij . Следовательно, вычисление элементов матрицы U в узлах разделителей первого уровня может происходить во всех процессорах одновременно и независимо, каждый процессор будет производить вычисления в своей подобласти, используется алгоритм 4. Напомним, что перед началом вычисления матрицы U всем  было присвоено значение 0.

     Алгоритм 4
for s=1, …, p
1. Инициализация вспомогательной диагональной матрицы:
     for 
        
     end for
     for 
2. Инициализация вектора v при помощи i-ой строки A и i-ой строки V:
             for j=i+1,…, n
                  
             end for
3. Сделать поправку к вектору v: 
             for t=,…,i-1 
                  for j=i+1,…, n
                    
                  end for
             end for
4. Вычисление : 
           
5. Вычисление элементов  при j&gt;i : 
            for j=i+1, …, n
                if  then
                       
                    else
                  
                 endif
            end for
6. Выполнение поправки к вспомогательной диагональной матрице
            for j=i+1,…, n
                  
            end for 
     end for (конец цикла по i)
end for  (конец цикла по s)

В алгоритме 4  – номера первой и последней строк на разделителях первого уровня в подобласти с номером s. 
    Перед переходом к вычислению элементов матрицы U в строках, соответствующих узлам разделителей второго уровня, следует вычислить элементы вспомогательной матрицы , что осуществляется с использованием алгоритма, аналогичного алгоритму 3.  Кроме того, нужно произвести суммирование по всем процессорам вычисленных там значений  (изменений значений , полученных на этапе 6 алгоритма 4) для j, соответствующих номерам узлов разделителей второго и третьего уровня, и добавить  к вычисленным ранее неокончательным значениям . 
    Вычисление элементов матрицы U в строках, соответствующих узлам разделителей второго уровня, производится аналогично вычислению элементов этой матрицы в строках, соответствующих узлам разделителей первого уровня. При этом в п. 2 алгоритма 4 добавляется еще одно слагаемое: , где  – элементы матрицы . Затем вычисляются элементы вспомогательной матрицы , что делается аналогично вычислению элементов матриц V, , и   производится суммирование по всем процессорам вычисленных там значений  для номеров j, соответствующих узлам разделителей третьего уровня, и добавление  к вычисленным ранее неокончательным значениям . 
    Если блок  имеет блочно-диагональную структуру с нулевыми элементами вне блоков, то вычисление элементов матрицы U в строках, соответствующих узлам разделителей третьего уровня, производится аналогично. Если подматрица  не является блочно-диагональной с нулевыми элементами вне блоков, то при построении матрицы U будем производить отсечение элементов подматрицы  вне блоков по позициям. 
    На рис. 2 приведен вид структуры разреженности матрицы U.
    Итак, вычисление элементов матриц  в строках, соответствующих внутренним узлам, производится с отсечением только по значению, а вычисление элементов этих матриц в строках, соответствующих узлам на разделителях, производится с отсечением по значению и по позициям. Вычисление элементов матрицы U во внутренних узлах, в узлах разделителей каждого уровня производится во всех процессорах одновременно. 
    Обращение матрицы предобусловливания IC1() осуществляется так же, как обращение матрицы предобусловливания IC(0) в работе [19]. Перед обращением матрицы предобусловливания необходимо произвести переупорядочение элементов вектора , где k – номер итерации в методе сопряженных градиентов. Обращение матрицы предобусловливания  состоит из двух этапов:  и . На первом этапе будем использовать алгоритм обращения транспонированной матрицы, предложенный первоначально в работе [12], подробно описанный в работе [19]. Будем вычислять элементы вектора , где  –   диагональная   часть. 

     
    Рис. 2. Вид структуры разреженности матрицы U
     
матрицы U, а затем по элементам вектора z вычислять элементы вектора . Алгоритм параллельной реализации вычисления элементов векторов z и , соответствующих внутренним узлам сетки подобластей, а также слагаемых  элементов вектора z, соответствующих узлам разделителей, имеет вид:
    
    Алгоритм 5
   1. Вычислить первоначальные значения :
        for j=1,n
    
    end for
   for s=1,2, …, p
  2. Вычислить  для j=, …, , и слагаемые элементов  для j&gt;l:
        for  
          
      for  j=i+1,n
            
      end for
    end for   
3. Вычислить значение  для :
    for i= 
         
    end for
     end for (конец цикла по s).
   
После этого осуществляется пересылка значений слагаемых   для индексов j, соответствующих узлам сетки из соседних подобластей, расположенных на разделителях, в процессоры, в которых эти значения нужны для дальнейшего расчета, и сложение в соответствующем процессоре слагаемых ,  посчитанных в разных процессорах, аналогично описанному в работе [19]. 
    Далее происходит вычисление значений  в узлах разделителей первого уровня  с использованием алгоритма, аналогичного алгоритму 5, что осуществляется во всех процессорах одновременно и независимо. Затем осуществляются необходимые пересылки и необходимая коррекция значений . Вычисление значений  в узлах разделителей второго и третьего уровня происходит аналогично их вычислению в узлах разделителей первого уровня и осуществляется во всех процессорах одновременно.   Перед вычислением  в узлах разделителей третьего уровня осуществляются необходимые пересылки и необходимая коррекция значений .
    На этапе 2 обращения матрицы предобусловливания сначала с использованием матрицы  происходит вычисление значений  в узлах разделителей третьего уровня, затем второго и первого уровней, а далее во внутренних узлах подобластей. При вычислении  в узлах разделителей каждого уровня и во внутренних узлах все процессоры работают одновременно. После расчета на разделителях каждого уровня происходит пересылка найденных значений  этого уровня в процессоры, в которых эти значения нужны для дальнейшего расчета. После завершения вычисления вектора  следует произвести переупорядочение его элементов.
 5. Алгоритм реализации построения и обращения предобусловливателя IC1() с использованием MPI+OpenMP
    Способ применения MPI+OpenMP технологии при построении и обращении предобусловливателя IC1() является аналогичным способу 1 применения MPI+OpenMP технологии при построении и обращении предобусловливателя IC(0) [19]. Сначала произведем разбиение всей области расчета на p подобластей и переупорядочение всех узлов сетки типа DDO, как описано в предыдущем разделе. Затем в каждой получившейся подобласти с номером s (s = 1, 2, …, p) разобьём внутреннюю часть подобласти, состоящую из внутренних узлов, полученных при переупорядочении, произведенном для MPI реализации, на m подобластей, где m – предполагаемое число используемых потоков, c приблизительно равным числом узлов сетки. В настоящей работе разбиение осуществлялось в порядке следования внутренних узлов подобластей, установленном ранее, следующим образом. Пусть , где  – число узлов сетки в подобласти с номером s, первые m-1 «внутренних» подобластей содержат  узлов внутренних узлов, последняя «внутренняя» подобласть содержит  внутренних узлов.  Здесь и далее кавычки перед и после слова «внутренняя» означают, что речь идет о разбиении для мелкозернистого распараллеливания или распараллеливания на потоки.
    Произведем переупорядочение типа DDO [9] внутренних узлов сетки в подобластях, полученных при разбиении всей области расчета на p подобластей (), подробно описанное в предыдущем разделе. В результате будут определены «внутренние» узлы и узлы «разделителей». Здесь и далее кавычки перед и после слов внутренние и разделители означают, что речь идет о внутренних узлах и узлах разделителей при упорядочении для мелкозернистого распараллеливания. Множество узлов «разделителей» разобьем на множество узлов «разделителей» первого, второго и третьего уровней аналогично тому, как описано в предыдущем разделе. 
    Определим  – минимальное число «внутренних» узлов при разбиении множества внутренних узлов из подобласти c номером s на «внутренние» подобласти. Предполагается, что . Обозначим . Установим следующий порядок следования узлов сетки подобласти с номером s. Сначала идут  «внутренних» узлов первой «внутренней» подобласти, затем   «внутренних» узлов второй «внутренней» подобласти и т.д, наконец,  «внутренних» узлов m-й «внутренней» подобласти. Затем идут оставшиеся «внутренние» узлы «внутренних» подобластей в порядке следования номеров «внутренних» подобластей и в порядке следования узлов внутри «внутренних» подобластей, введенном ранее. Затем идут узлы «разделителей» первого уровня, далее узлы «разделителей» второго уровня, а затем узлы «разделителей» третьего уровня. При этом для каждого уровня «разделителей» узлы следуют с сохранением порядка следования «внутренних» подобластей и порядка следования узлов внутри подобластей, введенного ранее. Затем идут узлы разделителей первого, второго и третьего уровней при упорядочении для крупнозернистого распараллеливания в установленном для крупнозернистого распараллеливания порядке. Таким образом, при использовании MPI+OpenMP технологии производится дополнительное переупорядочение только узлов сетки, являющихся внутренними при упорядочении для использования MPI. 
    При использовании MPI+OpenMP применение OpenMP технологии в каждом процессоре с номером s осуществляется при построении первых M1 строк матрицы , где  – часть матрицы U, хранящаяся в процессоре с номером s. При этом используется цикл по k2 = 1, …, m, внутри которого осуществляется вычисление элементов строк искомой матрицы с локальными номерами 1, …, M1, все рекурсивные вычисления происходят внутри потоков. Для выполнения цикла по k2 в настоящей работе использовалась директива do с опцией schedule static. Затем без использования OpenMP технологии производится вычисление элементов оставшихся строк матрицы U с использованием только MPI. Если число узлов во всех «внутренних» подобластях достаточно велико, то для подавляющего большинства строк матрицы U вычисление ее элементов происходит с использованием OpenMP технологии. 
    При применении MPI+OpenMP технологии перед началом итерационного процесса в каждом процессоре с номером s строится матрица  размера , транспонированная к матрице , где матрица  содержит первые il0(s) строк и первые il0(s) столбцов матрицы . Здесь il0(s) – количество внутренних узлов в подобласти с номером s. Создадим также матрицы , элементы которых совпадают с элементами из первых il0(s) строк матрицы  с номерами столбцов с индексами, соответствующими узлам разделителей при упорядочении для крупнозернистого распараллеливания. 
    При обращении предобусловливателя, состоящем из двух этапов, указанных выше, перед началом вычислений в каждом процессоре с номером s производится переупорядочение элементов вектора  – части вектора , хранящейся в процессоре с номером s. Первый этап обращения матрицы предобусловливания () начинается с обращения нижнетреугольных матриц . В каждом процессоре с применением OpenMP технологии вычисляются M1 элементов  с локальными индексами i = 1, …,  (при новом упорядочении), в настоящей работе использовалась директива do с опцией schedule static. Далее без применения OpenMP технологии производится вычисление элементов  с локальными номерами i=M1+1, …, il0(s). Затем с использованием матриц  вычисляются слагаемые элементов  вектора z для значений j, соответствующих узлам разделителей. Используется алгоритм, аналогичный алгоритму 5.  
    После этого осуществляется пересылка значений слагаемых  для индексов j, соответствующих узлам сетки из соседних подобластей на разделителях, в процессоры, в которых эти значения нужны для дальнейшего расчета, и сложение в соответствующем процессоре слагаемых ,  посчитанных в разных процессорах. Вычисление  в узлах разделителей всех уровней осуществляется так же, как в случае применения только MPI. 
    На этапе обращения верхнетреугольных матриц вычисления происходят в обратном порядке с использованием матриц . Сначала происходит вычисление значений  в узлах разделителей третьего уровня, затем второго и первого уровня, что осуществляется так же, как при использовании только MPI. После расчета на разделителях каждого уровня происходит пересылка найденных значений  этого уровня в процессоры, в которых эти значения нужны для дальнейшего расчета. Потом происходит вычисление  во внутренних узлах сетки. При этом элементы искомого вектора с  локальными номерами i = M1, …, 1 (при новом упорядочении) вычисляются с использованием OpenMP технологии. В настоящей работе при этом использовалась директива do с опцией schedule static. После вычисления вектора  при новом упорядочении следует вернуться к первоначальному упорядочению для элементов этого вектора.
    
   6. Результаты расчетов
    Программы, реализующие применение метода IC1()-CG для решения СЛАУ (1.1), были написаны на языке FORTRAN 90 с использованием MPI и MPI+OpenMР технологии. Расчеты проводились на многопроцессорном вычислительном кластере К60, установленном в ЦКП ИПМ им. М.В. Келдыша РАН. Тестирование и сравнение методов производилось с помощью решения модельной задачи – разностной задачи Дирихле для уравнения Пуассона в единичном квадрате на равномерной ортогональной сетке, причем n = 1048576.  Использовалась стандартная пятиточечная аппроксимация лапласиана, имя матрицы 5_1048576. Для тестирования рассматриваемых параллельных методов использовались также некоторые матрицы из коллекции разреженных матриц SuiteSparse [23]. Перечислим имена используемых тестовых матриц и укажем источник их происхождения:
    apache2 – трехмерная конечно-разностная схема;
    parabolic_fem – уравнение диффузии-конвекции с постоянным переносом;
    ecology2 – приложение теории электрических цепей к задаче передачи генов;
    tmt_sym – моделирование задач электромагнетизма.
     В таблице 1 приведены некоторые свойства этих матриц, причем значения , где  – матрица системы уравнений после   масштабирования,  взяты  из  работы  [25],  Id  –  количество   строк   без диагонального преобладания, Ip – количество положительных внедиагональных элементов, NZA – число ненулевых элементов матрицы A, ,  – минимальное и максимальное числа ненулевых элементов в строках матрицы A, n – число неизвестных в системе уравнений (1.1).
Таблица 1
Свойства некоторых матриц из Флоридской коллекции

МатрицаnNZAIdIpapache2715176481787020480.12 E+7parabolic_fem525825367462501048576370.20 E+6ecology2999999499599111240350.63 E+8tmt_sym7267135080961724378149642390.25 E+9    
    Решалось уравнение , где A – матрица, полученная после переупорядочения, связанного с разбиением на подобласти для использования MPI с помощью алгоритма [22], и масштабирования исходной матрицы, с единичной правой частью (), начальное приближение . Счет продолжался до выполнения условия (1.2), где . 
    В таблицах 2–6 приведены числа итераций и время счета методом IC1()-CG тестовых задач при применении MPI и MPI+OpenMP технологии. Под временем вычислений в таблицах 2–6 подразумевается время счета в секундах итерационного процесса в сумме с временем вычисления предобусловливателя. При применении MPI+OpenMP технологии расчеты проводились с использованием 3, 4, 6, 8, 10 и 12 нитей. В таблицах 2–6 приведены оптимальные по числу нитей для каждого p c точки зрения времени вычислений результаты и соответствующие им значения числа использованных нитей, указанные в круглых скобках  В таблицах 2–6 приведены курсивом коэффициенты  ускорения счета задач благодаря использованию OpenMP технологии. В квадратных скобках в таблицах приведены числа итераций при решении соответствующих задач методом IC(0)-CG с применением только MPI способом 1 из работы [19].

Таблица 2 
Числа итераций и время счета методом IC1()-CG задачи с матрицей 5_1048576 на p процессорах без применения и с применением OpenMP технологии
p3456 MPI                                                                  
[it for IC(0)-CG]

MPI+OpenMP
        310, 5.33
[1125]

336, 2.65(6)
2.01314, 4.44
      [1022]

345, 2.11(6)
2.1332, 4.43
[1031]

357, 2.49(6)
1.77327, 3.27
 [1119]

351, 2.19(6)
1.49
Таблица 3
 Числа итераций и время счета методом IC1()-CG задачи с матрицей ecology2  на p процессорах без применения и с применением OpenMP технологии

p3456 MPI                                                                                         
[it for IC(0)-CG]

MPI+OpenMP
        565, 10.53
[2041]

609, 4.31(8)
2.44577, 9.25
[2136]

603, 3.63(6)
2.55583, 6.95
[2181]

630, 3.72(6)
1.87595, 7.39
[2022]

623, 3.65(4)
2.02
Таблица 4 
Числа итераций и время счета методом IC1()-CG задачи с матрицей parabolic_fem  на p процессорах без применения и с применением OpenMP технологии
p23456 MPI       
[IC(0)-CG]                                                                                     

MPI+OpenMP
            343, 3.9
[830]

372,1.27(12)
3.07342, 3.56
[874]
 
356,1.44(6)
2.47334, 2.5
[871]
 351,0.99(6)
2.52343, 3.33
[918]

346,1.62(4)
1.93333, 2.82
[905]

352, 1.52(3)
1.85 
Таблица 5
 Числа итераций и время счета методом IC1()-CG задачи с матрицей apache2
на p процессорах без применения и с применением OpenMP технологии

p23456 MPI               
[IC(0)-CG]
                                                                           
MPI+OpenMP
                  348,5.06
[953]

369, 1.99(8)
2.54387,4.54
[1297]

394,2.27(8)
2.00362, 3.91
[873]

374,1.72(10)
2.27369, 4.48
[871]

370, 2.67(4)
1.68381, 4.41
[]927]

394, 2.84(3)
1.55Таблица 6 
Числа итераций и время счета методом IC1()-CG задачи с матрицей tmt_sym на p процессорах без применения и с применением OpenMP технологии

p23456 MPI               
[IC(0)-CG]                                                                           

MPI+OpenMP
             564, 9.6
[1511]

587,2.84(12)
3.38544, 8.16
[1575]

582,2.79(8)
2.92547, 6.08
[1542]

578, 2.4(6)
2.53 559, 6.58
[1543]

592,3.77(8)
1.74551, 5.91
[1533]

583,2.43(4)
2.43    
    Заметим, что применение OpenMP технологии при использовании MPI+OpenMP технологии не позволяет ускорить вычисление матрицы предобусловливания  в  методе  IC1()-CG, так же  как  и в  методе   IC(0)-CG.
Ускорение решения СЛАУ происходит исключительно благодаря ускорению счета итерационного процесса, причем время счета итерационного процесса составляет основную часть времени решения СЛАУ с этими матрицами. Поэтому хорошая эффективность распараллеливания алгоритма будет наблюдаться главным образом в случае плохо обусловленных матриц. 
    Как видно из таблиц 2–6, числа итераций при решении тестовых задач методом IC1()-CG с применением MPI в несколько раз меньше, чем при их решении   методом   IC(0)-CG.   Такая    же    картина    наблюдается    и    при использовании MPI+OpenMP технологии для решения этих задач. Числа итераций при решении этих задач предложенным в настоящей работе методом на небольшом числе процессоров, как правило, меньше чисел итераций при их решении методом сопряженных градиентов с предобусловливателями BIIC-IC1() и BIIC-IC2S() (см. [13], [18]). В таблице 7 в качестве примера приведены числа итераций при решении 4 тестовых задач методами IC1()-CG, 
BIIC-IC1()-CG  и  BIIC-IC2S()-CG   на   4   процессорах.    При   этом   для  

Таблица 7
 Числа итераций при решении тестовых задач на 4 процессорах методами IC(0) CG, BIIC-IC1()-CG, BIIC-IC2S()-CG с использованием MPI и MPI+OpenMP технологии
     
имя матрицыIC1()-CG
MPI, MPI+OpenMPBIIC-IC1()-CG
MPI, MPI+OpenMPBIIC-IC2S()-CG
MPI,MPI+OpenMP5_1048576  314, 345 (6)401, 444(4)343, 421(6)ecology2577, 603(6)721, 798(4)608, 698(6)parabolic_fem334, 351(6)418, 453(4)323, 368(6) apache2362, 374(10)501, 611(4)418, 509(6)MPI+OpenMP параллельной реализации используется число блоков, кратное числу используемых процессоров и числу используемых потоков, результаты взяты из работы [13]. В скобках приведено число используемых нитей.[АС1][оМ2]
    На рисунках 3–7 приведены графики зависимости времени счета тестовых задач методом IC1()-CG от числа процессоров p в логарифмическом масштабе с использованием только MPI (сплошные линии), а также с использованием MPI+OpenMP технологии (штриховые линии).
     

Рис. 3. Время счета задачи с матрицей 5_1048576 методом IC1()-CG с использованием MPI и MPI+OpenMP технологии 
          

Рис. 4. Время счета задачи с матрицей  ecology2 методом IC1() -CG с использованием MPI и MPI+OpenMP технологии



 Рис. 5. Время счета задачи с матрицей parabolic_fem методом IC1()-CG с использованием MPI и MPI+OpenMP технологии


  
Рис. 6. Время счета задачи с матрицей apache2 методом IC1()-CG с использованием MPI и MPI+OpenMP технологии

             
Рис. 7. Время счета задачи с матрицей tmt_sym методом IC1()-CG с использованием MPI и MPI+OpenMP технологии

     Как видно из таблиц 2–6 и рисунков 3–7, применение MPI+OpenMP технологии для решения всех тестовых задач позволило значительно ускорить их решение по сравнению с применением только MPI на небольшом числе процессоров. 
      На рисунках 8, 9 приведены графики зависимости ускорения счета от числа процессоров при решении тестовых задач с использованием только MPI и MPI+OpenMP технологии по сравнению со временем решения этих задач на 2 или 3 процессорах с использованием только MPI. Заметим, что на ускорение счета влияет также изменение числа итераций с ростом числа процессоров и числа потоков, которое может иметь немонотонный характер, что связано с особенностями разбиения области расчета.
     Как видно из рисунков 8, 9, применение MPI+OpenMP технологии позволяет решать задачи с матрицами 5_1048576, ecology2 со сверхлинейным ускорением по сравнению с их решением с использованием только MPI на 3 процессорах при всех использованных значениях p. Как видно из рисунка 9, применение MPI+OpenMP технологии позволяет решать задачи с матрицами apache2, parabolic_fem со сверхлинейным ускорением по сравнению с их решением с использованием только MPI на 2 процессорах при p &lt; 5, а задачу с матрицей tmt_sym – при всех использованных значениях p.
     

Рис. 8. Ускорение счета задач с матрицами 5_1048576, ecology2 при использовании MPI и MPI+OpenMP по сравнению со счетом на 3 процессорах с использованием MPI 

Рис. 9. Ускорение счета задач матрицами parabolic_fem, apache2, tmt_sym при использовании MPI и MPI+OpenMP по сравнению 
со счетом на 2 процессорах с использованием MPI 
   
   7. Заключение
     В работе предложен способ применения MPI+OpenMP технологии для построения и обращения предобусловливателя IC1() при решении СЛАУ (1.1) с произвольной симметричной положительно определенной матрицей методом сопряженных градиентов на небольшом числе процессоров. Способ применения MPI при построении и обращении предобусловливателя основан на использовании переупорядочения строк и столбцов матрицы в соответствии с использованием упорядочения узлов сетки всей области расчета типа DDO. При построении предобусловливателя IC1() в строках матрицы, соответствующих узлам разделителей, производится отсечение по параметру и по позициям. При применении MPI+OpenMP технологии проводится дополнительное переупорядочение строк и столбцов матрицы в соответствии с дополнительным переупорядочением внутренних узлов сетки. При построении и обращении матрицы предобусловливания OpenMP технологии применяются для большинства строк матрицы. 
    С помощью расчетов модельной задачи и четырех задач из коллекции SuiteSparse на небольшом числе процессоров показано, что использование OpenMP технологии позволяет значительно ускорить вычисления. Использование предобусловливателя IC1() позволяет сильно уменьшить число итераций предобусловленного метода сопряженных градиентов по сравнению с использованием предобусловливателя IC(0) при параллельной реализации на основе упорядочения типа DDO. Число итераций при решении 4 тестовых задач методом IC1()-CG при параллельной реализации с использованием DDO на небольшом числе процессоров меньше или сопоставимо с числом итераций при их решении методом сопряженных градиентов с предобусловливателями BIIC-IC1() и BIIC-IC2S().

</text>
                <codes>
                    <udk>519.63</udk>
                    <doi>10.20948/prepr-2023-61</doi>
                </codes>
                <keywords>
                    <kwdGroup lang="RUS">
                        <keyword>неполное треугольное разложение Холецкого</keyword>
                        <keyword>переупорядочение узлов сетки</keyword>
                        <keyword>параллельное предобусловливание</keyword>
                        <keyword>метод сопряженных градиентов</keyword>
                    </kwdGroup>
                    <kwdGroup lang="ENG">
                        <keyword>incomplete Cholesky factorization</keyword>
                        <keyword>Domain Decomposition ordering</keyword>
                        <keyword>parallel preconditioning</keyword>
                        <keyword>conjugate gradient method</keyword>
                    </kwdGroup>
                </keywords>
                <references>
                    <reference>Munksgaard N. Solving sparse symmetric sets of linear equations by preconditioned conjugate gradients // ACM Trans. Math. Software. 1980. № 6. P. 206-219.</reference>
                    <reference>Tuff A.D., Jennings A. An iterative method for lerge systems of linear structural equations  //  J. Numer. Methods Eng. 1973. №7. P.175-183.</reference>
                    <reference>Duff  I. S., Meurant G. A. The effect of ordering on preconditioned conjugate gradients // BIT. 1989. V. 29. P. 625-657.</reference>
                    <reference>Doi S. On parallelism and convergence of incomplete LU factorizations //Applied Numerical Mathematics: Transactions of IMACS. 1991. V.7. № 5, P. 417–436.</reference>
                    <reference>Notay Y. An efficient parallel discrete PDE solver // Parallel Computing. 1995. V. 21. P. 1725-1748.</reference>
                    <reference>Milyukova O. Yu. Parallel approximate factorization method for solving discreate elliptic equations // Parallel Computing. 2001. V. 27. № 10. P.1365-1379.</reference>
                    <reference>Милюкова О. Ю. Некоторые параллельные итерационные методы с факторизованными матрицами предобусловливания для решения эллиптических уравнений на треугольных сетках // Ж. вычисл. матем. и матем. физ. 2006. Т. 46. № 6. С. 1096-1112.</reference>
                    <reference>Magolu Monga Made M., van der Vorst H. A. Spectral analysis of parallel incomplete factorizations with implicit pseudo-overlap // Numer. Linear Algebra Appl. 2002. V. 9. № 1. P. 45–64.</reference>
                    <reference>Милюкова О. Ю.  Сочетание числовых и структурных подходов к построению неполного треугольного разложения второго порядка в параллельных методах предобусловливания // Журн. вычисл. матем. и матем. физ. 2016. Т. 56. № 5. С. 711-729.</reference>
                    <reference>Kaporin I. E. High quality preconditionings of a general symmetric positive definite matrix based on its   - decomposition // Numer. Lin. Alg. Appl. 1998. V. 5. № 6. P. 483-509.</reference>
                    <reference>Капорин И. Е., Коньшин И. Н. Параллельное решение симметричных положительно-определенных систем на основе перекрывающегося разбиения на блоки // Ж. вычисл. матем. и матем. физ. 2001. Т. 41. № 4. С. 515–528.</reference>
                    <reference>Капорин И. Е., Милюкова О.Ю. Массивно-параллельный алгоритм предобусловленного метода сопряженных градиентов для численного решения систем линейных алгебраических уравнений // Сб. трудов отдела проблем прикладной оптимизации ВЦ РАН (под ред. В.Г.Жадана) - М.: Из-во ВЦ РАН. 2011. С. 132-157.</reference>
                    <reference>Милюкова О. Ю. MPI+OpenMP реализация метода сопряженных градиентов с предобусловливателями блочного неполного обратного треугольного разложения второго и первого порядка // ВАНТ. Серия Математическое моделирование физических процессов. 2022. Вып.1. С. 48-61.</reference>
                    <reference>Kaporin I. E.  New convergence results and preconditioning strategies for conjugate gradient method // Numer. Linear Algebra and Appl. 1994. V. 1. № 2. P. 179-210.</reference>
                    <reference>Милюкова О. Ю. MPI+OpenMP реализация метода сопряженных градиентов с факторизованным предобусловливателем // Препринты ИПМ им. М.В. Келдыша. 2020. № 31. 22 с. https://doi.org/10.20948/prepr-2020-31.</reference>
                    <reference>Милюкова О. Ю. MPI+OpenMP реализация метода сопряженных градиентов с факторизованными неявными предобусловливателями // Математическое моделирование. 2021. T. 33. № 10. C. 19-39.</reference>
                    <reference>Meijering J.A., van der Vorst H.A. An iterative solution method for linear systems of which the coefficient matrix is a symmetric M-matrix // Math. Comp. 1977. V.31. P. 148-162.</reference>
                    <reference>Милюкова О. Ю. MPI+OpenMP реализация метода сопряженных градиентов с предобусловливателями блочного неполного обратного треугольного разложения первого порядка // Ж. вычисл. мет. и програм. 2022. T. 23. Bып. 3. C. 191-206.</reference>
                    <reference>Милюкова О. Ю. Способы MPI+OpenMP реализации метода сопряженных градиентов с предобусловливателем IC(0) на основе использования переупорядочения узлов сетки // Препринты ИПМ им. М.В.Келдыша. 2023. № 35. 32 с. https://doi.org/10.20948/prepr-2023-35.</reference>
                    <reference>Милюкова О. Ю. MPI+OpenMP реализация метода сопряженных градиентов с факторизованным предобусловливателем на основе использования переупорядочения узлов сетки // Препринты ИПМ им. М.В.Келдыша. 2023. № 18. 29 с. https://doi.org/10.20948/prepr-2023-18.</reference>
                    <reference>Kershow D. The Incomplete choleski-conjugate gradient method for the iterative solution of systems of linear equations // J. Comp. Phys. 1978. V. 26. P. 43-65.</reference>
                    <reference>Капорин И. Е., Милюкова О. Ю. Неполное обратное треугольное разложение в параллельных алгоритмах предобусловленного метода сопряженных градиентов // Препринты ИПМ им. М.В.Келдыша. 2017. № 37. 28 с. https://doi.org/10.20948/prepr-2017-37.</reference>
                    <reference>Davis T.,  Hu Y. F. University of Florida sparse matrix collection // ACM Trans. on Math.~Software. 2011. V. 38. № 1.</reference>
                    <reference>Axelsson O. Iterative solution methods. - New York: Cambridge Univ. Press. 1994.</reference>
                    <reference>Капорин И. Е. Использование полиномов Чебышева и приближенного обратного треугольного разложения для предобусловливания метода сопряженных градиентов // Ж. вычисл. матем. и матем. физики. 2012. T. 52. № 2. C. 179-204.</reference>
                </references>
                <files>
                    <furl>https://keldysh.ru/papers/2023/prep2023_61.pdf</furl>
                </files>
            </article>
        </articles>
    </issue>
</journal>
