<!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>
      <title-group>
        <article-title>Parallel Substructuring Method With Memory Cost Limits?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Nikita Nedozhogin</string-name>
          <email>nedozhogin@inbox.ru</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sergey Kopysov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Alexander Novikov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Mechanics Udmurt Federal Research Center UB RAS</institution>
          ,
          <addr-line>Izhevsk</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Udmurt State University</institution>
          ,
          <addr-line>Izhevsk</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <fpage>50</fpage>
      <lpage>59</lpage>
      <abstract>
        <p>In decomposition methods, the memory costs for solving the interface problem are increasing signi cantly with the number of subdomains increasing. Using of the substructuring method allows you to reduce the number of iterations when the system is being solved. At the same time, the global boundary sti ness matrix takes up more memory in comparison with global sti ness matrix. This imposes restrictions on the maximum size of the problem for which you can apply this method. Di erent approaches to reduce the costs and limitations of memory on stage of the construction and solving of the interface system exist. A layer-by-layer approach to the partitioning of a triangulated multiply connected domain into connected subdomains without branching of inner boundaries was presented. This makes it possible to avoid con icts with concurrent operations of the assembly type without using synchronization and critical sections. Parallel algorithm of the construction global boundary sti ness matrix with distributed storage of the matrix are considered when implementing using OpenMP and MPI technologies. This approach allows not only to reduce the limits on the maximum size of the solved problem, but also to resolve con icts of shared memory access by increasing the number of independent parallel tasks.</p>
      </abstract>
      <kwd-group>
        <kwd>Parallel algorithms</kwd>
        <kwd>Decomposition method</kwd>
        <kwd>Substructur- ing method</kwd>
        <kwd>OpenMP</kwd>
        <kwd>MPI</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>The substructuring method is the non-overlapping domain decomposition [1].
However, the global boundary sti ness matrix has more nonzero elements with
smaller dimension in comparison with global sti ness matrix [2]. Due to these
properties, even the use of sparse matrix storage formats requires considerable
memory costs. Block [3] and hierarchical [4] methods with low-rank
approximation have received great development due to the current trends in reducing
the amount of memory per processor core. In this paper, parallel substructuring
method with distributed storage of the matrix is considered. The distributed
? The reported study was partially funded by RFBR according to the research project
17-01-00402-a.
construction makes it possible to apply this approach not only in the classical
substructuring method, but also in the hierarchical or block one, or in the case
of constructing a preconditioner on the based on the substructuring method.</p>
      <p>The second memory limit is the access speed. To accelerate calculations,
it is necessary the number of simultaneous accesses to the same memory area
both during reading and writing. To increase the parallelism of the method, it is
required to arrange the grid and elements in such a way that independent threads
simultaneously work with their own sections of memory without overlapping. In
this case, We propose using a layer-by-layer partitioning method. In the course
of this method, any unstructured mesh can be arranged.</p>
      <p>The paper presents the results of parallel version of the substructuring method
realized with the help of OpenMP and MPI technology. The potential for
parallelization with the help of CUDA technology for computation on graphic
accelerators is considered
2</p>
    </sec>
    <sec id="sec-2">
      <title>Layer-by-layer Partitioning</title>
      <p>We generalize the ordering of the 3D unstructured mesh T on a subdomains
without branching of internal boundaries using layer-by-layer partitioning. We
de ne in T the some set of the cells T T , assuming L1 = T . We construct
the layers Lj = f 2 T j Lj T Lc 6= ? when j = c 1g, j 2 [2; m 1], according
to the Algorithm 1. Here m { number of the layers, - cell of the mesh T .</p>
      <p>Algorithm 1: Partitioning unstructured mesh T on layers.</p>
      <p>Input data: T | unstructured mesh of cells</p>
      <p>f g T .</p>
      <p>Result: fLj g | set of the layers of cells.
1 De ne the cells corresponding to the vertices of T ;
2 8 2 T nd cells having a common vertex;</p>
      <p>/* Form the layers of mesh cells
3 Let j = 1 and layer Lj = T ;</p>
      <p>while Pjc=1 jLcj &lt; jT j do
4 Construct layer Lj+1 of cells T ;
5 Let j j + 1;
2 T , T
| given set
*/</p>
      <p>The result of the Algorithm 1 is an ordered set of m layers Lj , in which the
layers adjacent to Lj have numbers j 1 and j + 1. The resulting layers are
discrete analogs of a domain of R3 of type (g; 2) : g &gt; 0. All the vertices of the
cells lie on the surface bounding the layer. In general, layer Lj consist of a set of
sublayers fL(c)g, where each sublayer L(c) is the set of cells in Lj having at least
j j
one intersection with the cell in Lj . If some layer Lj consists of one sublayer
L(jc), we assume that the layer Lj is connected.</p>
      <p>Thus, the problem of forming subdomains of an unstructured mesh
fTi : Si Ti = T g based on obtained partitioning on layers Lj is as follows:</p>
      <p>nd the union of the layers Lj in the set of subdomains fTig satisfying certain
restrictions. One of the conditions is the connectivity of the resulting subdomains
Ti. The number of layers included in the subdomain is bounded below by two
layers, which is a su cient condition for the existence of vertices in Ti that do
not belong to the boundary Ti.</p>
      <p>In order to construct connected union of layers in the subdomain of the mesh,
it is necessary to nd sublayers and their connections. The algorithm 2 provides
a search for sublayers and the de nition of their connections using a dual graph
Gd(V; E) of connected cells in Lj along the faces. Further, the connected
components Gd(V; E) are found. The set of the mesh cells corresponding the connected
components Gd(V; E) will be denoted as sublayers L(jc); c = 1; 2; : : : ; j , where
j = jfL(jc)gj | the number of the sublayers in layer Lj ,
= max j .</p>
      <p>j
Algorithm 2: The union of the layers fLig in linked subdomains fTlg.</p>
      <p>Input data: fLj g | set of the layers of cells.</p>
      <p>Result: fTig | set of the mesh T subdomains.</p>
      <p>/* Find sublayers in each layer Lj */
1 for Lj ; 8j 2 [1; m] do
2 Construct dual graph Gd(V; E) of the links of the cells of Lj along the faces;
3
4</p>
      <sec id="sec-2-1">
        <title>De ne connected components Gd(V; E);</title>
        <p>Assign sublayers L(jc) to the connected components Gd(V; E);
8
9
10
11</p>
      </sec>
      <sec id="sec-2-2">
        <title>5 Construct the graph of sublayers G(V; E);</title>
        <p>/* Form subgraphs Gl of th graph G(V; E):
6 i = 1, m = 1, mark(Lj ) = 0; 8 j 2 [1; m];
7 while m &lt; m do
/* Find an unmarked layer with j =
while &gt; 1 do</p>
        <p>Adjoin adjacent layers to the initial layer of the domain;
De ne | the number of the connected components Gi;
j j + 1;
12
i</p>
        <p>i + 1;
if v 2 VG ^ deg(v) = 1 ^ v , L(c) then</p>
        <p>j</p>
        <p>Adjoin fvg , Lj to Gj , Lj 1, j 2 [1; i].</p>
        <p>Partitioning/ordered mesh T , assuming Ti , Gi.
*/
*/</p>
        <p>The Algorithm 2 extends the partitioning on layers [5] on multi-connected
domains. Partitioning without branching on the basis of the neighborhood
relation reduces to the use of the Algorithm 1 for the layer-by-layer partitioning of
the triangulation T and the union layers Lj ; 8j 2 [1; m] by the Algorithm 2 in
th subdomains Ti.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Substructuring Method</title>
      <p>
        k(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ), and
k6np
= S
      </p>
      <p>
        k=1
ules np such that
Let the mesh domain be split into n non-overlapping subdomains
= i6Sn i(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ), where i(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) T j(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) = ;, when i 6= j. Formally unite the
subi=1
domains, preserving the structure of the decomposition (interior nodes remain
interior, boundary { boundary). We introduce the decomposition of the second
level with number of the subdomains equal number of the computational
modi6(k+1) nnp
      </p>
      <p>S
i=k nnp</p>
      <p>
        For decomposition the rst level, the system of equations is formed in such a
way that the unknowns corresponding to the interior and boundary nodes take
the form:
(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) =
k
i(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ).
0 1(A(I1I))
      </p>
      <p>0</p>
      <p>
        A(B1B)
1(A(I1B)) 1 0 1u(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) 1 0 1f (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) 1
      </p>
      <p>
        I I
2(A(I1B)) CCCA BB@ 2u(I1) CC = BB 2fI(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) CC :
      </p>
      <p>A @ A
uB
fB</p>
      <p>
        In this system, the unknowns stand for the boundary nodes are found from
the solution of the system S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )uB = f~B. Here
f~B =
i6n
X (fB
i=1
      </p>
      <p>
        i(A(B1I))i(A(I1I))(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )ifI(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ))
is the right-hand-side vector and S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) is the global boundary sti ness matrix
(also known as the Schur complement matrix [2]) and is the sum of the local
boundary sti ness matrices Si(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) = A(B1B) i(A(B1I))i(A(I1I))(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )i(A(I1B)) such that
i6n
S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) = P Si(i), where index i corresponds to subdomains of the rst level.
      </p>
      <p>i=1
4</p>
    </sec>
    <sec id="sec-4">
      <title>Construct Global Boundary Sti ness Matrix</title>
      <p>
        Global boundary sti ness matrix S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) corresponding to these subdomains are
k np
supplemented by zeros up to size global matrix S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) in this S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) = P Sk(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ). Note
k=1
that, Matrices S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) do not depend on each other during the formation stage. This
k
excludes con icts when reading elements data and writing results of summing
of local matrices Si(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ).
      </p>
      <p>
        For reduce computational costs of RAM, each computational modules forms
one row l of the matrix S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) at the same time. The order of the construction
i
of rows is given by subdomains. Parallel algorithm of the construction for np
computational modules using OpenMP technology on the example of two
subdomains would be as follows (note that np 6 n ):
      </p>
      <p>
        Algorithm 3: Parallel algorithm of the global boundary sti ness
matrix construction S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) = Pnp
      </p>
      <p>
        k=1 Sk(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) for OpenMP
1
2
3
4
5
// Forming of S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )
      </p>
      <p>1
for i = 1 : : : n =np do</p>
      <p>Function of the inverse matrix
i(A(I1I)) 1 ;
// Parallelize loop by</p>
      <p>
        OpenMP
for l = 1 : : : nBi do
v = iA(B1I)(l; ) ;
v = v i(A(I1I)) 1 ;
S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )(l; ) = iA(B1B)(l; ) v iA(I1B) ;
      </p>
      <p>
        i
Record the S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )(l; ) elements
      </p>
      <p>
        i
in the corresponding row of
the matrix S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) ;
      </p>
      <p>
        1
// Forming of S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )
      </p>
      <p>2
for i = n =np : : : n do</p>
      <p>Function of the inverse matrix
i(A(I1I)) 1 ;
// Parallelize loop by</p>
      <p>
        OpenMP
for l = 1 : : : nBi do
v = iA(B1I)(l; ) ;
v = v i(A(I1I)) 1 ;
S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )(l; ) = iA(B1B)(l; ) v iA(I1B) ;
      </p>
      <p>
        i
Record the S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )(l; ) elements
      </p>
      <p>
        i
in the corresponding row of
the matrix S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) ;
      </p>
      <p>2</p>
      <p>
        Based on the computing experiment (See Table 1), run-time costs on each
subdomain have the following order (top-down):
1. Inverse of the matrix i(A(I1I)) (Step 1 of Algorithm 3);
2. Record the row l of the local matrix S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )(l; ) in the corresponding row of
i
the matrix S12 (Step 5 of Algorithm 3);
3. Operations of taking the row from the matrix, the matrix-vectors
multiplications and the di erence of the vectors (steps 2-4 of Algorithm 3, denote
by MatVec).
      </p>
      <p>Taking the row from the matrix, the matrix-vector multiplications and the
di erence of the vectors (see steps 2-4 of Algorithm 3) are parallelized using
OpenMP technology, that for these operations gave an acceleration close to
linear. Also, in the future, it is planned to parallelize these operations for use on
graphics accelerators using CUDA technology.</p>
      <p>
        Recording of the row l of the local matrix Si(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )(l; ) to the corresponding row
of the matrix S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) (see step 5 of Algorithm 3) largely depends on the matrix
k
storage formats used. Matrices S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) is formed in a compressed CSR format,
k
because of its large size. Using arrays of vectors (C++ container std::vector)
allows to reduce memory costs to a minimum, but the complexity of adding
new elements to such storage formats is O(nB), where nB is the number of
equations corresponding to the boundary nodes To reduce the costs of adding
new elements of the row, we use sorted associative containers (C++ container
std::map) and not sorted (C++ container std::unordered_map). In the sorted
container, the complexity of nding and adding a new element is O(ln nB) (due to
its red-black tree structure), but it signi cantly increase memory costs to store to
store additional two pointers. The non-sorted container, for these operations has
complexity form O(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) to O(nB) (depending on the hash function) and request
smaller memory sizes, compared to the container std::map, which is optimal for
use in the constructing of matrices Sk(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ).
      </p>
      <p>For a given non-singular matrix A there exists a decomposition on upper
triangular matrix U and a lower triangular matrix L. If matrices A, U , L are
invertible, then A 1 = U 1L 1. In the construction L and U , products with
nonzero elements of the parent matrix were summed, since the factorization war
carried out for matrices stored in the CSR format. Only sequential
implementations of the LU-factorization on CPU was considered. This approach showed
the best results for small matrices. Features of this algorithm do not allow to
e ective use all the capabilities of the massively parallel GPU architecture.</p>
      <p>A parallel version of the Sherman-Morrison method implemented using
OpenMP technology was considered.</p>
      <p>Algorithm 4: Parallel algorithm of Sherman-Morrison method for
(A(I1I)) 1
1 x; y - vectors of dimension n ;
for k = 1 : : : n do</p>
      <p>// OpenMP
2
3
xT = A(I1I)(k; ) ek;
// OpenMP
y = xT Ainv;
// Loop of OpenMP on i
for i = 1 : : : n do
for j = 1 : : : n do</p>
      <p>Ainv(j; i) = Ainv(j; i)
4 (A(I1I)) 1 = Ainv ;
(yi</p>
      <p>Ainv(j; k)=(yk + 1)) ;</p>
      <p>
        LU-factorization is faster than the Sherman-Morrison method in sequential
implementations. In spite of it, LU-factorization does not parallelize well. Using
parallel version of the Sherman-Morrison method provided a parallel
acceleration about two times. To reduce the number of operations and the computational
load, matrix i(A(I1I)) 1 is stored in its entirety before the completion of the
constructing of S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) in the current subdomains, since it is not known how many
i
non-zero elements contain an inverse matrix. To solve the system of equations
on the inner subdomains nodes iA(I1I)iuI = ifI iA(I1B)uB Krylov subspace methods
[7] are used.
      </p>
      <p>
        In the future, parallelization on the GPU is planned. To increase the
parallelism, the order of the formation of the local boundary sti ness matrices will
be given by layer-by-layer partitioning. Thus, a block of parallel GPU threads
will process one row of the matrix S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ). In total it will be possible to generate
i
i blocks that are able to write in di erent places of the same array without
overlap and con icts due to layer-by-layer ordering.
5
      </p>
      <p>~</p>
      <p>
        Solving the S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )uB = fB System
Implementation of conjugate gradients method for solving the system
S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )uB = f~B on one of np computing node is shown in Algorithm 5. Here the
np
system matrix is represented in the form S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) = P Sk(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ). Index k corresponding
k=1
to the number of computational module is omitted.
Algorithm 5: Algorithm of the preconditioned conjugate gradient
method for distributed matrix
1 u; r; p; q; z 2 RnB ;
2 i = 0;
10
11
12
13
14
15
16
17
3 r0 = f~B ;
4 u0 0 ;
5 z0 = M r0 ; // M (S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )) 1 -- preconditioner
6 p0 = z0 ;
7 0 = (r0; z0) ; // sync point
      </p>
      <p>
        while jjrijj2=jjf jj2 &gt; " do
8 Assembly pi ; // Using MPI::Allreduce
9 qi = S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )pi ; // k independent operations on each MPI
process
i = (ri; zi)=(qi; pi) ; // MPI::Allreduce lead to sync point
ui+1 = ui + ipi;
ri+1 = ri iqi;
zi+1 = M ri+1 ; // M (S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )) 1 -- preconditioner
i+1 = (ri+1; zi+1) ; // MPI::Allreduce lead to sync point
i+1 = i+1= i;
pi+1 = ri+1 + i+1pi;
i = i + 1 ;
      </p>
      <p>
        In a matrix-vector product (See steps 8-9 of Algorithm 5) operation
qi = S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )pi is performed in two steps. First, the assembly of the vector pi from
all MPI processes, then np independent operations (qk)i = S(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )pi. The result of
knp
products is the set of vectors qk such that qk 2 RnB and q = P qk. Summed of
k=1
vector q are not required. Vector is stored by parts on various compute nodes.
      </p>
      <p>
        Parallelization of the operations with vectors is realized as follows: operands
are parts of vectors consisting of components corresponding to mesh nodes of the
subdomain k(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) for each parallel MPI process. The result vector assembly are
not required, each MPI process jobs with its local vectors, and synchronization
occurs when the scalar products (r; z), (q; p), (r; r) are computed. Scalar
products are performed in two steps. First, local scalar products for the part vectors
in parallel MPI processes, then summation of the local sums (on this step,
implicit synchronization occurs). Inside the MPI process, vectors operations are
parallelized using OpenMP technology with number of the thread equal number
of the CPU cores on computational nodes.
      </p>
      <p>To parallelize the GPU, it is planned to use an approach similar to that
presented in paper [2].</p>
    </sec>
    <sec id="sec-5">
      <title>Results</title>
      <p>Numerical experiments were carried out on the test problem of the theory of
elasticity. The computational domain had the form of a parallelepiped. Mesh
consisted of 539000 hexagonal cells. 8 threads of the OpenMP are running
inside each MPI process. In Table 2, the result of experiment are presented for
dimension on 512 and 1024 subdomains with using 2, 4, 6 MPI processes. The
presented results are obtained on 6 computational nodes, each of which contains
two processors Intel Xeon E5-2609 and 64GB RAM. For n = 512, this problem
took approximately 100GB of RAM, for n = 1024, problem took approximately
80GB of RAM.</p>
      <p>
        The considered algorithm allows to signi cantly reduce the memory limits
for the substructuring method. The partitioning of the matrix S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) and its
distributed storage makes it possible to realize coarse-grained parallelism at the
formation stage of global boundary sti ness matrix, to reduce exchanges and to
exclude synchronous access to one memory cell during the local matrices
addition. At the same time, an increase in the number of involved computational
modules permits achieving an acceleration close to linear at the stage of matrix
construction. At the solver stage, the distributed storage of the matrix S(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )
allows solving systems with a dimension proportional to the memory size of the
involved computational modules. Scalability is limited to assembling the results
of scalar products of vectors and depends only on the restrictions on the speed
to data exchange over the network.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Toselli</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Widlund</surname>
            <given-names>O.B.</given-names>
          </string-name>
          :
          <article-title>Domain Decomposition Methods | Algorithms</article-title>
          and Theory. Springer Series in Computational Mathematics, Vol.
          <volume>34</volume>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Kopysov</surname>
            <given-names>S.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuzmin</surname>
            <given-names>I.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nedozhogin</surname>
            <given-names>N.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Novikov</surname>
            <given-names>A.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sagdeeva</surname>
            <given-names>Y. A.</given-names>
          </string-name>
          :
          <article-title>Hybrid Multi-GPU solver based on Schur complement method</article-title>
          .
          <source>Lecture Notes in Computer Science</source>
          , vol.
          <volume>7979</volume>
          , pp.
          <fpage>65</fpage>
          -
          <lpage>79</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Amestoy</surname>
            <given-names>P.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Buttari</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>L'Excelent J-Y.</surname>
          </string-name>
          ,
          <string-name>
            <surname>Mary</surname>
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>On the Complexity of the Block Low-Rank Multifrontal Factorization</article-title>
          .
          <source>SIAM Journal on Scienti c Computing</source>
          , vol.
          <volume>39</volume>
          (
          <issue>4</issue>
          ), pp.
          <fpage>A1710</fpage>
          -
          <lpage>A1740</lpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Chen</surname>
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pouransari</surname>
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rajamanickam</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Boman</surname>
            <given-names>E.G.</given-names>
          </string-name>
          , Darve E.:
          <article-title>A distributedmemory hierarchical solver for general sparse linear systems</article-title>
          .
          <source>Parallel Computing</source>
          , vol.
          <volume>74</volume>
          , pp.
          <fpage>49</fpage>
          -
          <lpage>65</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Novikov</surname>
            <given-names>A.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piminova</surname>
            <given-names>N.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kopysov</surname>
            <given-names>S.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sagdeeva</surname>
            <given-names>Y.A.</given-names>
          </string-name>
          :
          <article-title>Layer-by-layer ordering in parallel nite composition on shared-memory multiprocessors</article-title>
          .
          <source>IOP Conf. Ser.: Mater. Sci. Eng</source>
          ., vol.
          <volume>158</volume>
          (
          <issue>1</issue>
          ), p.
          <volume>158</volume>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Sherman</surname>
            <given-names>J.</given-names>
          </string-name>
          , Morrison W.J.:
          <article-title>Adjustment of an Inverse Matrix Corresponding to a Change in One Element of a Given Matrix</article-title>
          . Ann. Math. Statist., vol.
          <volume>21</volume>
          (
          <issue>1</issue>
          ), pp.
          <fpage>124</fpage>
          -
          <lpage>127</lpage>
          (
          <year>1950</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Saad</surname>
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Iterative Methods for Sparse Linear System</article-title>
          , Boston: PWS Publiching company, p.
          <volume>447</volume>
          (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>