2025-11-10T02:34:56.080990

Verification Challenges in Sparse Matrix Vector Multiplication in High Performance Computing: Part I

Zhang
Sparse matrix vector multiplication (SpMV) is a fundamental kernel in scientific codes that rely on iterative solvers. In this first part of our work, we present both a sequential and a basic MPI parallel implementations of SpMV, aiming to provide a challenge problem for the scientific software verification community. The implementations are described in the context of the PETSc library.
academic

๊ณ ์„ฑ๋Šฅ ์ปดํ“จํŒ…์—์„œ์˜ ํฌ์†Œ ํ–‰๋ ฌ ๋ฒกํ„ฐ ๊ณฑ์…ˆ ๊ฒ€์ฆ ๊ณผ์ œ: Part I

๊ธฐ๋ณธ ์ •๋ณด

  • ๋…ผ๋ฌธ ID: 2510.13427
  • ์ œ๋ชฉ: Verification Challenges in Sparse Matrix Vector Multiplication in High Performance Computing: Part I
  • ์ €์ž: Junchao Zhang (Argonne National Laboratory)
  • ๋ถ„๋ฅ˜: cs.LO cs.DC cs.MS
  • ๋ฐœํ‘œ ํ•™ํšŒ: International Workshop on Verification of Scientific Software (VSS 2025)
  • ์ถœํŒ ์ •๋ณด: EPTCS 432, 2025, pp. 98โ€“105
  • ๋…ผ๋ฌธ ๋งํฌ: https://arxiv.org/abs/2510.13427

์ดˆ๋ก

ํฌ์†Œ ํ–‰๋ ฌ ๋ฒกํ„ฐ ๊ณฑ์…ˆ(SpMV)์€ ๋ฐ˜๋ณต ํ•ด๋ฒ•๊ธฐ์— ์˜์กดํ•˜๋Š” ๊ณผํ•™ ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ์ปค๋„์ด๋‹ค. ๋ณธ ์—ฐ๊ตฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ๋Š” ์ˆœ์ฐจ ๋ฐ ๊ธฐ๋ณธ MPI ๋ณ‘๋ ฌ SpMV ๊ตฌํ˜„์„ ์ œ์‹œํ•˜์—ฌ ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•œ ๋„์ „ ๋ฌธ์ œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌํ˜„์€ PETSc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งฅ๋ฝ์—์„œ ์„ค๋ช…๋œ๋‹ค.

์—ฐ๊ตฌ ๋ฐฐ๊ฒฝ ๋ฐ ๋™๊ธฐ

๋ฌธ์ œ ์ •์˜

๋ณธ ์—ฐ๊ตฌ๋Š” ๊ณ ์„ฑ๋Šฅ ์ปดํ“จํŒ…(HPC)์—์„œ ํฌ์†Œ ํ–‰๋ ฌ ๋ฒกํ„ฐ ๊ณฑ์…ˆ(SpMV)์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ๊ณผ์ œ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. SpMV๋Š” ํฌ์†Œ ์„ ํ˜• ๋ฐฉ์ •์‹๊ณ„ Ax=b๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์—ฐ์‚ฐ์ด๋ฉฐ, ํŠนํžˆ ๋Œ€๊ทœ๋ชจ Krylov ๋ถ€๋ถ„๊ณต๊ฐ„ ๋ฐฉ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐ˜๋ณต ํ•ด๋ฒ•๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณผํ•™ ๊ณ„์‚ฐ ์ฝ”๋“œ์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.

์ค‘์š”์„ฑ

  1. ๊ธฐ์ดˆ์„ฑ: SpMV๋Š” ๊ณผํ•™ ๊ณ„์‚ฐ์˜ ๊ธฐ๋ณธ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, ๊ทธ ์ •ํ™•์„ฑ์€ ์ƒ์œ„ ๊ณ„์ธต ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹ ๋ขฐ์„ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค
  2. ๋ณต์žก์„ฑ: ์ˆ˜ํ•™์  ์ •์˜๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ(yi = ฮฃ(aijยทxj)), ์ €์žฅ ํ˜•์‹, ๋ฐ์ดํ„ฐ ๋ถ„ํฌ, ๋ณ‘๋ ฌํ™” ๋ฐ ์ตœ์ ํ™”๋กœ ์ธํ•ด ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง„๋‹ค
  3. ๊ฒ€์ฆ ๊ณผ์ œ: ๊ธฐ์กด์˜ ๋ณต์žกํ•˜๊ฒŒ ์ตœ์ ํ™”๋œ ๊ตฌํ˜„์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ์— ์ƒ๋‹นํ•œ ์–ด๋ ค์›€์„ ์•ผ๊ธฐํ•œ๋‹ค

๊ธฐ์กด ๋ฐฉ๋ฒ•์˜ ํ•œ๊ณ„

  • PETSc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ณ ๋„๋กœ ์ตœ์ ํ™”๋œ MPI ๋ณ‘๋ ฌ SpMV ๊ตฌํ˜„์ด ์กด์žฌํ•˜์ง€๋งŒ, ๊ทธ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ๊ฒ€์ฆ์ด ์–ด๋ ต๋‹ค
  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ํ‘œ์ค€ํ™”๋œ ๋„์ „ ๋ฌธ์ œ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค

์—ฐ๊ตฌ ๋™๊ธฐ

๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ตฌ์กฐํ™”๋œ ๋„์ „ ๋ฌธ์ œ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋‹จ์ˆœํ•œ ๊ฒƒ๋ถ€ํ„ฐ ๋ณต์žกํ•œ ๊ฒƒ๊นŒ์ง€์˜ SpMV ๊ตฌํ˜„์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ฒ€์ฆ ๋„๊ตฌ ๋ฐ ๋ฐฉ๋ฒ•์˜ ๊ฐœ๋ฐœ๊ณผ ํ‰๊ฐ€๋ฅผ ๋•๋Š”๋‹ค.

ํ•ต์‹ฌ ๊ธฐ์—ฌ

  1. ํ‘œ์ค€ํ™”๋œ ๊ฒ€์ฆ ๋„์ „ ๋ฌธ์ œ ์ œ๊ณต: ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด SpMV์˜ ํ‘œ์ค€ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์„ค๊ณ„ํ–ˆ๋‹ค
  2. ์„œ๋กœ ๋‹ค๋ฅธ ๋ณต์žก๋„์˜ ๋‘ ๊ฐ€์ง€ SpMV ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„:
    • ์ˆœ์ฐจ ๊ตฌํ˜„(seq.c)
    • ๊ธฐ๋ณธ MPI ๋ณ‘๋ ฌ ๊ตฌํ˜„(mpibasic.c)
  3. ์™„์ „ํ•œ ๊ฒ€์ฆ ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์ถ•: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, ์ •ํ™•์„ฑ ๊ฒ€์‚ฌ ๋ฐ ์˜ค๋ฅ˜ ๊ฐ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํฌํ•จ
  4. ๊ฒ€์ฆ ๋ชฉํ‘œ์˜ ๋ช…ํ™•ํ•œ ์ •์˜: ๊ฐ ๊ตฌํ˜„์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ฒ€์ฆ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ ๊ณผ์ œ ์ œ์‹œ

๋ฐฉ๋ฒ•๋ก  ์ƒ์„ธ ์„ค๋ช…

์ž‘์—… ์ •์˜

์ž…๋ ฅ:

  • ํฌ์†Œ ํ–‰๋ ฌ A (Mร—N, NNZ๊ฐœ์˜ 0์ด ์•„๋‹Œ ์›์†Œ), CSR ํ˜•์‹์œผ๋กœ ์ €์žฅ
  • ๋ฒกํ„ฐ x (N์ฐจ์›)
  • ์˜ˆ์ƒ ๊ฒฐ๊ณผ z = Ax (M์ฐจ์›)

์ถœ๋ ฅ:

  • ๊ณ„์‚ฐ ๊ฒฐ๊ณผ y = Ax
  • ์ •ํ™•์„ฑ ๊ฒ€์ฆ: ||y-z||ยฒ๋Š” 0์ด์–ด์•ผ ํ•จ(๋ถ€๋™์†Œ์ˆ˜์  ๋ฐ˜์˜ฌ๋ฆผ ์˜ค์ฐจ ๋ฌด์‹œ)

์ œ์•ฝ ์กฐ๊ฑด:

  • ์••์ถ• ํฌ์†Œ ํ–‰(CSR) ํ˜•์‹ ์‚ฌ์šฉ
  • MPI ๋ณ‘๋ ฌ ๋ถ„์‚ฐ ๊ณ„์‚ฐ ์ง€์›

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„ค๊ณ„

CSR ํ˜•์‹ ํ‘œํ˜„

ํฌ์†Œ ํ–‰๋ ฌ A๋Š” ์„ธ ๊ฐœ์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋œ๋‹ค:

  • a[nnz]: 0์ด ์•„๋‹Œ ์›์†Œ ๊ฐ’ ์ €์žฅ
  • j[nnz]: 0์ด ์•„๋‹Œ ์›์†Œ์˜ ์—ด ์ธ๋ฑ์Šค ์ €์žฅ
  • i[m+1]: ํ–‰ ํฌ์ธํ„ฐ, ik๋Š” a์™€ j์—์„œ k๋ฒˆ์งธ ํ–‰์˜ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ด

๋ฐ์ดํ„ฐ ํƒ€์ž… ์ •์˜

// ์ˆœ์ฐจ ๋ฒ„์ „
typedef struct {
    int m, n;        // ํ–‰๋ ฌ ์ฐจ์›
    int *i, *j;      // CSR ํ˜•์‹ ์ธ๋ฑ์Šค
    double *a;       // 0์ด ์•„๋‹Œ ์›์†Œ ๊ฐ’
} Mat;

// MPI ๋ณ‘๋ ฌ ๋ฒ„์ „
typedef struct {
    int m, n, M, N;  // ๋กœ์ปฌ ๋ฐ ์ „์—ญ ์ฐจ์›
    int rstart, cstart; // ์‹œ์ž‘ ํ–‰ ์—ด ์ธ๋ฑ์Šค
    int *i, *j;
    double *a;
} Mat;

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

์ˆœ์ฐจ ๊ตฌํ˜„

for (i = 0; i < A.m; i++) {
    y.a[i] = 0.0;
    for (j = A.i[i]; j < A.i[i + 1]; j++)
        y.a[i] += A.a[j] * x.a[A.j[j]];
}

MPI ๋ณ‘๋ ฌ ๊ตฌํ˜„

  1. ๋ฐ์ดํ„ฐ ๋ถ„ํฌ ์ „๋žต:
    • ํ–‰๋ ฌ์„ ํ–‰ ๋ธ”๋ก์œผ๋กœ ๋ถ„ํฌ: m = M/size + (M%size > rank ? 1 : 0)
    • ๋ฒกํ„ฐ x๋ฅผ ์—ด ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ถ„ํฌ: n = N/size + (N%size > rank ? 1 : 0)
  2. ํ†ต์‹  ํŒจํ„ด:
    • MPI_Allgather ๋˜๋Š” MPI_Allgatherv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํ•œ ๋ฒกํ„ฐ x ์ˆ˜์ง‘
    • MPI_Allreduce๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ ๋ฒ”์ˆ˜ ๊ณ„์‚ฐ
  3. ๊ณ„์‚ฐ ํ๋ฆ„:
    • ๋กœ์ปฌ ํ–‰๋ ฌ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ(rstart, cstart)
    • ์ „์—ญ ๋ฐฐ์—ด์—์„œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
    • ๋ถ„์‚ฐ๋œ ๋ฒกํ„ฐ x๋ฅผ ๋กœ์ปฌ ์™„์ „ ๋ณต์‚ฌ๋ณธ X๋กœ ์ˆ˜์ง‘
    • ๋กœ์ปฌ SpMV ๊ณ„์‚ฐ ์ˆ˜ํ–‰
    • ๋กœ์ปฌ ์˜ค์ฐจ ๋ฒ”์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ์ „์—ญ ์ถ•์•ฝ

๊ธฐ์ˆ ์  ํ˜์‹ ์ 

  1. ์ ์ง„์  ๋ณต์žก๋„ ์„ค๊ณ„: ๋‹จ์ˆœํ•œ ์ˆœ์ฐจ ๊ตฌํ˜„์—์„œ ๊ธฐ๋ณธ ๋ณ‘๋ ฌ ๊ตฌํ˜„์œผ๋กœ, ๊ฒ€์ฆ ๋„๊ตฌ์˜ ์ ์ง„์  ํ…Œ์ŠคํŠธ ์šฉ์ด
  2. ํ‘œ์ค€ํ™”๋œ ๊ฒ€์ฆ ์ธํ„ฐํŽ˜์ด์Šค: ํ†ต์ผ๋œ ์ž…์ถœ๋ ฅ ํ˜•์‹ ๋ฐ ์ •ํ™•์„ฑ ๊ฒ€์‚ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ œ๊ณต
  3. ์‹ค์ œ ์‘์šฉ ๋ฐฐ๊ฒฝ: PETSc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‹ค์ œ ๊ตฌํ˜„ ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ ์‹ค์งˆ์  ์˜๋ฏธ ๋ณด์œ 
  4. ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ: ํ–ฅํ›„ ๋” ๋ณต์žกํ•œ ์ตœ์ ํ™” ๋ฒ„์ „(Part II)์„ ์œ„ํ•œ ๊ธฐ์ดˆ ๋งˆ๋ จ

์‹คํ—˜ ์„ค์ •

๋ฐ์ดํ„ฐ ์„ธํŠธ

  • ํ–‰๋ ฌ ๊ทœ๋ชจ: 32ร—36 ํ–‰๋ ฌ, 50๊ฐœ์˜ 0์ด ์•„๋‹Œ ์›์†Œ ํฌํ•จ
  • ๋ฐ์ดํ„ฐ ์ƒ์„ฑ: ๋™๋ฐ˜ Python ์Šคํฌ๋ฆฝํŠธ csr.py๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ž…๋ ฅ: ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์— ์ง์ ‘ ๋‚ด์žฅ
  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅ์„ฑ: ์‚ฌ์šฉ์ž๋Š” Python ์Šคํฌ๋ฆฝํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€ ์ƒ์„ฑ ๊ฐ€๋Šฅ

ํ‰๊ฐ€ ์ง€ํ‘œ

  • ์ •ํ™•์„ฑ ๊ฒ€์ฆ: ||y-z||ยฒ์˜ ์ œ๊ณฑ ๋ฒ”์ˆ˜ ๊ณ„์‚ฐ
  • ์„ฑ๊ณต ๊ธฐ์ค€: ๋ฒ”์ˆ˜ โ‰ค 1e-6 (๋ถ€๋™์†Œ์ˆ˜์  ๋ฐ˜์˜ฌ๋ฆผ ์˜ค์ฐจ ๊ณ ๋ ค)
  • ๋ฐ˜ํ™˜ ์ฝ”๋“œ: ์ •ํ™•ํ•  ๋•Œ 0 ๋ฐ˜ํ™˜, ์˜ค๋ฅ˜ ์‹œ 0์ด ์•„๋‹Œ ๊ฐ’ ๋ฐ˜ํ™˜

๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด: C ์–ธ์–ด
  • ๋ณ‘๋ ฌ ํ”„๋ ˆ์ž„์›Œํฌ: MPI
  • ์ปดํŒŒ์ผ ์š”๊ตฌ ์‚ฌํ•ญ: C ์ปดํŒŒ์ผ๋Ÿฌ ๋˜๋Š” MPI ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ํ•„์š”
  • ์ฝ”๋“œ ๊ฐ€์šฉ์„ฑ: GitHub ์ €์žฅ์†Œ์— ๊ณต๊ฐœ ๋ฐฐํฌ

์‹คํ—˜ ๊ฒฐ๊ณผ

๊ฒ€์ฆ ๋ชฉํ‘œ

์ˆœ์ฐจ ๊ตฌํ˜„ ๊ฒ€์ฆ ์š”๊ตฌ ์‚ฌํ•ญ

๊ณ„์‚ฐ ๊ฒฐ๊ณผ y๊ฐ€ ๋‹ค์Œ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆ: yi = ฮฃ(aijยทxj), ์—ฌ๊ธฐ์„œ CSR ํ‘œํ˜„์—์„œ ์ €์žฅ๋˜์ง€ ์•Š์€ aij๋Š” 0์œผ๋กœ ๊ฐ„์ฃผ

MPI ๋ณ‘๋ ฌ ๊ตฌํ˜„ ๊ฒ€์ฆ ์š”๊ตฌ ์‚ฌํ•ญ

  1. ๋ ˆ์ด์•„์›ƒ ์ •ํ™•์„ฑ: ฮฃm = M, ฮฃn = N ๊ฒ€์ฆ
  2. ๋กœ์ปฌ ๊ณ„์‚ฐ ์ •ํ™•์„ฑ: ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ y๊ฐ€ ํ•ด๋‹น ๋กœ์ปฌ ๋ถ€๋ถ„ ํ–‰๋ ฌ๊ณผ ์™„์ „ํ•œ ๋ฒกํ„ฐ x์˜ ์ •ํ™•ํ•œ ๊ณฑ์…ˆ ๊ฒฐ๊ณผ์ธ์ง€ ๊ฒ€์ฆ

ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€

๋…ผ๋ฌธ์€ ๊ตฌ์ฒด์ ์ธ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค:

  • ์ž…๋ ฅ ํ–‰๋ ฌ: 32ร—36 ํฌ์†Œ ํ–‰๋ ฌ(50๊ฐœ์˜ 0์ด ์•„๋‹Œ ์›์†Œ)
  • ์ž…๋ ฅ ๋ฒกํ„ฐ: 36์ฐจ์› ๋ฒกํ„ฐ
  • ์˜ˆ์ƒ ์ถœ๋ ฅ: 32์ฐจ์› ๊ฒฐ๊ณผ ๋ฒกํ„ฐ
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ •์ˆ˜ ๋ฐ ๋ถ€๋™์†Œ์ˆ˜์  ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ์ œ๊ณต

๊ด€๋ จ ์—ฐ๊ตฌ

๊ด€๋ จ ์—ฐ๊ตฌ ๋ถ„์•ผ

  1. Krylov ๋ถ€๋ถ„๊ณต๊ฐ„ ๋ฐฉ๋ฒ•: SpMV๋Š” ๋ฐ˜๋ณต ํ•ด๋ฒ•๊ธฐ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ
  2. PETSc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ํ’๋ถ€ํ•œ Krylov ๋ฐฉ๋ฒ• ๋ฐ SpMV ๊ตฌํ˜„ ์ œํ’ˆ๊ตฐ ์ œ๊ณต
  3. ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ: ๊ณ ์„ฑ๋Šฅ ๊ณผํ•™ ๊ณ„์‚ฐ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ •ํ™•์„ฑ ๊ฒ€์ฆ

๋ณธ ๋…ผ๋ฌธ์˜ ์œ„์น˜

  • ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ‘œ์ค€ํ™”๋œ SpMV ๊ฒ€์ฆ ๋„์ „ ๋ฌธ์ œ ๋ถ€์กฑ ํ•ด๊ฒฐ
  • ๋ณต์žกํ•œ ์ตœ์ ํ™” ๊ตฌํ˜„์˜ ๊ฒ€์ฆ์„ ์œ„ํ•œ ๊ธฐ์ดˆ ์ฐธ๊ณ  ์ œ๊ณต
  • ์ด๋ก ์  ๊ฒ€์ฆ ๋ฐฉ๋ฒ•๊ณผ ์‹ค์ œ HPC ์‘์šฉ ์š”๊ตฌ ์‚ฌํ•ญ ์—ฐ๊ฒฐ

๊ฒฐ๋ก  ๋ฐ ๋…ผ์˜

์ฃผ์š” ๊ฒฐ๋ก 

  1. SpMV ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ์„ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ๋„์ „ ๋ฌธ์ œ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ์ถ•
  2. ์ ์ง„์  ๊ฒ€์ฆ ๋„๊ตฌ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ณต์žก๋„์˜ ๋‘ ๊ฐ€์ง€ ๊ตฌํ˜„ ์ œ๊ณต
  3. ์‹ค์ œ PETSc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ ์‹ค์งˆ์  ์‘์šฉ ๊ฐ€์น˜ ๋ณด์œ 

ํ•œ๊ณ„

  1. ๊ทœ๋ชจ ์ œํ•œ: ํ˜„์žฌ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€ ๊ทœ๋ชจ๊ฐ€ ์ž‘์Œ(32ร—36 ํ–‰๋ ฌ)
  2. ์ตœ์ ํ™” ๋ถ€์žฌ: ๊ธฐ๋ณธ MPI ๊ตฌํ˜„์ด ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๋ณต์žกํ•œ ์ตœ์ ํ™”๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Œ
  3. ๊ฒ€์ฆ ๋ฒ”์œ„: ๊ธฐ๋ณธ ์ •ํ™•์„ฑ๋งŒ ํฌํ•จํ•˜๋ฉฐ ์„ฑ๋Šฅ ๋ฐ ์ˆ˜์น˜ ์•ˆ์ •์„ฑ ๊ฒ€์ฆ ๋ฏธํฌํ•จ

ํ–ฅํ›„ ๋ฐฉํ–ฅ

  1. Part II ๊ฐœ๋ฐœ: ํ–ฅํ›„ ์ž‘์—…์—์„œ ๋” ๋ณต์žกํ•œ ์ตœ์ ํ™” MPI ๊ตฌํ˜„ ์ œ๊ณต ๊ณ„ํš
  2. ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€ ํ™•์žฅ: ๋” ํฐ ๊ทœ๋ชจ ๋ฐ ๋‹ค์–‘ํ•œ ํฌ์†Œ ํŒจํ„ด์˜ ํ…Œ์ŠคํŠธ ํ–‰๋ ฌ ์ถ”๊ฐ€
  3. ๊ฒ€์ฆ ๋„๊ตฌ ํ†ตํ•ฉ: ๊ธฐ์กด ๊ฒ€์ฆ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

์‹ฌ์ธต ํ‰๊ฐ€

์žฅ์ 

  1. ๋†’์€ ์‹ค์šฉ ๊ฐ€์น˜: ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์‹ค์ œ ์š”๊ตฌ ์‚ฌํ•ญ ํ•ด๊ฒฐ
  2. ํ•ฉ๋ฆฌ์ ์ธ ์„ค๊ณ„: ์ ์ง„์  ๋ณต์žก๋„ ์„ค๊ณ„๋กœ ๊ฒ€์ฆ ๋„๊ตฌ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ์šฉ์ด
  3. ๋†’์€ ํ‘œ์ค€ํ™” ์ˆ˜์ค€: ์™„์ „ํ•œ ์ž…์ถœ๋ ฅ ๊ทœ๋ฒ” ๋ฐ ์ •ํ™•์„ฑ ๊ฒ€์‚ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ œ๊ณต
  4. ๊ฐ•ํ•œ ์žฌํ˜„์„ฑ: ์ฝ”๋“œ ๊ณต๊ฐœ ๊ฐ€์šฉ, ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋‚ด์žฅ์œผ๋กœ ์žฌํ˜„ ์šฉ์ด
  5. ์‹ค์ œ ๋ฐฐ๊ฒฝ: ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” PETSc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ ์‘์šฉ ์˜๋ฏธ ๋ณด์œ 

๋ถ€์กฑํ•œ ์ 

  1. ์ด๋ก ์  ๋ถ„์„ ๋ถ€์กฑ: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„ ๋ถ„์„ ๋˜๋Š” ์ด๋ก ์  ์„ฑ์งˆ ๋…ผ์˜ ๋ฏธ์ œ๊ณต
  2. ์ œํ•œ๋œ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€: ๋‹จ์ผ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋งŒ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์–‘์„ฑ ๋ถ€์กฑ
  3. ๊ฒ€์ฆ ๊นŠ์ด: ๊ธฐ๋Šฅ ์ •ํ™•์„ฑ์— ์ฃผ๋กœ ์ดˆ์ ์„ ๋งž์ถ”๋ฉฐ ์ˆ˜์น˜ ์ •๋ฐ€๋„ ๋ฐ ๊ฒฝ๊ณ„ ์กฐ๊ฑด ๋ถ„์„ ๋ถ€์กฑ
  4. ์„ฑ๋Šฅ ๊ณ ๋ ค: ์„ฑ๋Šฅ ๊ฒ€์ฆ ๊ด€๋ จ ๊ณผ์ œ ๋ฏธํฌํ•จ

์˜ํ–ฅ๋ ฅ

  1. ๋ถ„์•ผ ๊ธฐ์—ฌ: ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ํ‘œ์ค€ํ™” ํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ ์ œ๊ณต
  2. ์‹ค์šฉ ๊ฐ€์น˜: ๊ฒ€์ฆ ๋„๊ตฌ ๊ฐœ๋ฐœ ๋ฐ ํ‰๊ฐ€์— ์ง์ ‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  3. ํ™•์žฅ์„ฑ: ํ–ฅํ›„ ๋” ๋ณต์žกํ•œ ๊ตฌํ˜„์„ ์œ„ํ•œ ๊ธฐ์ดˆ ํ”„๋ ˆ์ž„์›Œํฌ ๋งˆ๋ จ
  4. ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ€์น˜: HPC ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ„ ๊ต๋ฅ˜ ํ˜‘๋ ฅ ์ด‰์ง„

์ ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ๊ฒ€์ฆ ๋„๊ตฌ ๊ฐœ๋ฐœ: ๋„๊ตฌ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์œ„ํ•œ ํ‘œ์ค€ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋กœ ์‚ฌ์šฉ
  2. ๊ต์œก ์‘์šฉ: ๋ณ‘๋ ฌ ๊ณ„์‚ฐ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ์˜ ๊ต์œก ์‚ฌ๋ก€๋กœ ์ ํ•ฉ
  3. ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ: SpMV ๊ตฌํ˜„ ์ •ํ™•์„ฑ์˜ ์ฐธ๊ณ  ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  4. ์—ฐ๊ตฌ ํ”Œ๋žซํผ: ๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ์ตœ์ ํ™” ์—ฐ๊ตฌ๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ํ™” ํ”Œ๋žซํผ ์ œ๊ณต

์ฐธ๊ณ  ๋ฌธํ—Œ

  1. S Balay et al. (2025): PETSc/TAO Users Manual. Technical Report ANL-21/39 - Revision 3.23, Argonne National Laboratory
  2. Yousef Saad (2003): Iterative Methods for Sparse Linear Systems, second edition. Society for Industrial and Applied Mathematics

์ข…ํ•ฉ ํ‰๊ฐ€: ๋ณธ ๋…ผ๋ฌธ์€ ์‹ค์šฉ์„ฑ์ด ๋งค์šฐ ๋†’์€ ์ž‘์—… ๋…ผ๋ฌธ์œผ๋กœ, ์ด๋ก ์  ํ˜์‹  ์ธก๋ฉด์—์„œ์˜ ๊ธฐ์—ฌ๋Š” ์ œํ•œ์ ์ด์ง€๋งŒ ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ ˆ์‹คํžˆ ํ•„์š”๋กœ ํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋„์ „ ๋ฌธ์ œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋…ผ๋ฌธ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ๊ตฌํ˜„์ด ์™„์ „ํ•˜๋ฉฐ ์šฐ์ˆ˜ํ•œ ์žฌํ˜„์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์–ด HPC ์†Œํ”„ํŠธ์›จ์–ด ๊ฒ€์ฆ ๋ถ„์•ผ์˜ ๋ฐœ์ „์„ ์ถ”์ง„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ๊ฐ€์น˜๋ฅผ ์ง€๋‹Œ๋‹ค.