linalg — 기본 선형대수 알고리즘

linalg — 기본 선형대수 알고리즘 (Basic linear algebra algorithms)

**기본 선형대수 알고리즘(basic linear algebra algorithms)**은 밀집(dense) BLAS(Basic Linear Algebra Subroutines)에 기반한 알고리즘이에요. BLAS 표준의 부분집합에 해당해요.

이 알고리즘들은 배열의 원소에 접근할 때 std::mdspan으로 벡터나 행렬을 표현해요. C++26에서 도입됐어요.

출처: cppreference

본문

BLAS 알고리즘은 세 가지 범주로 나뉘어요.

1. BLAS 1 — 벡터-벡터 연산

  • std::linalg::scale — 스칼라 곱
  • std::linalg::dot — 내적
  • std::linalg::vaxpy — 벡터 갱신 y = a*x + y

2. BLAS 2 — 행렬-벡터 연산

  • std::linalg::matrix_vector_product — 행렬·벡터 곱
  • std::linalg::rank1_update — 랭크-1 갱신

3. BLAS 3 — 행렬-행렬 연산

  • std::linalg::matrix_product — 행렬 곱
  • std::linalg::triangular_matrix_matrix_solve
#include <linalg>
#include <mdspan>
#include <vector>

// 행렬-벡터 곱
std::vector<double> data{1,2,3,4};
auto A = std::mdspan<double, std::extents<size_t,2,2>>(data.data());
std::vector<double> v{1,1};
std::vector<double> out(2);

std::linalg::matrix_vector_product(A, v, out);
// out = A * v

특징

  • mdspan 기반std::mdspan으로 벡터/행렬을 나타내, 연속 메모리·슬라이스·부분 행렬을 유연하게 다뤄요.
  • in-place / out-place 변형 — 결과를 덮어쓰거나 별도 버퍼에 출력할 수 있어요.
  • execution policy 지원 — 병렬 실행이 가능해요.
  • constexpr 및 오류 처리 — 크기 불일치 등은 실행 전 검사되는 곳이 많아요.
// BLAS 1: 스케일링
std::vector<double> x{1,2,3};
std::linalg::scale(2.0, x);   // x = 2*x

std::linalg는 과학 계산·엔진·머신러닝 등에서 행렬 연산을 표준적이고 이식성 있게 제공해요. C++26 신규 기능이라 최신 컴파일러/라이브러리 지원이 필요해요.

더 알아보기 (Learn more)

cppreference