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 신규 기능이라 최신 컴파일러/라이브러리 지원이 필요해요.