Skip to content

Commit d3354b9

Browse files
committed
linalg: ヘッダ概要と関数/クラス一覧(#1233)
1 parent 49f9140 commit d3354b9

File tree

4 files changed

+131
-2
lines changed

4 files changed

+131
-2
lines changed

GLOBAL_QUALIFY_LIST.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
* <latch>[link /reference/latch.md]
129129
* <limits>[link /reference/limits.md]
130130
* std::numeric_limits[link /reference/limits/numeric_limits.md]
131+
* <linalg>[link /reference/linalg.md]
131132
* <list>[link /reference/list.md]
132133
* std::list[link /reference/list/list.md]
133134
* <locale>[link /reference/locale.md]

lang/cpp26.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
5959
- 並行処理におけるデータの参照・更新を行うRCU (Read Copy Update) のライブラリとして、[`<rcu>`](/reference/rcu.md.nolink)を追加
6060
- 並行処理において参照中のデータが更新されないよう保護するハザードポインタのライブラリとして、[`<hazard_pointer>`](/reference/hazard_pointer.md.nolink)を追加
6161
- デバッグサポートのライブラリとして[`<debugging>`](/reference/debugging.md.nolink)を追加
62-
- 線形代数ライブラリとして[`<linalg>`](/reference/linalg.md.nolink)を追加
62+
- 線形代数ライブラリとして[`<linalg>`](/reference/linalg.md)を追加
6363

6464

6565
### コンテナ

reference.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@
149149
| [`<valarray>`](/reference/valarray.md) | 数値の配列 | |
150150
| [`<numeric>`](/reference/numeric.md) | 一般的な数値操作 | |
151151
| [`<numbers>`](/reference/numbers.md) | 数値 | C++20 |
152-
| [`<linalg>`](/reference/linalg.md.nolink) | 線形代数 | C++26 |
152+
| [`<linalg>`](/reference/linalg.md) | 線形代数 | C++26 |
153153

154154

155155
## <a id="debug" href="debug">デバッグライブラリ</a>

reference/linalg.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# linalg
2+
* linalg[meta header]
3+
* cpp26[meta cpp]
4+
5+
`<linalg>`ヘッダでは、線形代数(linear algebra)に関する基礎的な演算アルゴリズムを提供する。
6+
本ヘッダが提供するエンティティは、すべて名前空間`std::linalg`に属する。
7+
8+
1次元データであるベクトル(vector)や2次元データである行列(matrix)に対して、線形代数分野のデファクトスタンダードとなされる BLAS(Basic Linear Algebra Subprograms) 互換のアルゴリズム、および一部は LAPACK(Linear Algebra PACKage) 互換のアルゴリズム群が提供される。
9+
BLAS互換アルゴリズムは、演算対象データの次元数に応じて3段階に区分される。
10+
11+
- Level 1 BLAS : ベクトルーベクトルの演算
12+
- Level 2 BLAS : 行列ーベクトルの演算
13+
- Level 3 BLAS : 行列ー行列の演算
14+
15+
例えば、2個の一般行列の積を求める`std::linalg::matrix_product`はLevel 3 BLASルーチン`xGEMM`に対応する。
16+
(実際のBLASルーチン名は、浮動小数点型の単精度`S`/倍精度`D`とそれぞれの複素数版`C`,`Z`として、プレフィックス`x`部は4種類の文字のいずれかになる。)
17+
18+
また、多次元配列ビュー[`std::mdpan`](mdspan/mdspan.md)と組み合わせて利用する拡張機能が提供される。
19+
20+
21+
## `std::mdspan`向け機能拡張
22+
23+
| 名前 | 説明 | 対応バージョン |
24+
|------|------|----------------|
25+
| `layout_blas_packed` | BLAS互換の圧縮行列表現に対応する[レイアウトマッピングポリシー](mdspan/LayoutMappingPolicy.md) (class template) | C++26 |
26+
| `scaled` | 読み取り専用の要素値をスカラ倍した`std::mdspan`を作る (function template) | C++26 |
27+
| `scaled_accessor` | `scaled`関数用の[アクセサポリシー](mdspan/AccessorPolicy.md) (class template) | C++26 |
28+
| `conjugated_accessor` | `conjugated`関数用の[アクセサポリシー](mdspan/AccessorPolicy.md) (class template) | C++26 |
29+
| `conjugated` | 読み取り専用の複素共役ビュー`std::mdspan`を作る (function template) | C++26 |
30+
| `layout_transpose` | `transposed`関数用の[レイアウトマッピングポリシー](mdspan/LayoutMappingPolicy.md) (class template) | C++26 |
31+
| `transposed` | 2次元`std::mdspan`の転置ビューを作る (function template) | C++26 |
32+
| `conjugate_transposed` | 読み取り専用の複素共役転置ビュー`std::mdspan`を作る (function template) | C++26 |
33+
34+
35+
## BLAS 1アルゴリズム
36+
37+
| 名前 | 説明 | 対応バージョン |
38+
|------|------|----------------|
39+
| `setup_givens_rotation_result` | `setup_givens_rotation`の結果型 (class template) | C++26 |
40+
| `setup_givens_rotation` | xLARTG: ギブンス回転をセットアップする (function template) | C++26 |
41+
| `apply_givens_rotation` | xROT: ベクトルにギブンス回転を適用する (function template) | C++26 |
42+
| `swap_elements` | xSWAP: 2つのベクトル/行列の要素を交換する (function template) | C++26 |
43+
| `scale` | xSCAL: ベクトル/行列の要素にスカラ値を乗算する (function template) | C++26 |
44+
| `copy` | xCOPY: ベクトル/行列の要素をコピー代入する (function template) | C++26 |
45+
| `add` | xAXPY: 2つのベクトル/行列の要素を加算する (function template) | C++26 |
46+
| `dot` | xDOT, xDOTU: 2つのベクトルのドット積を求める (function template) | C++26 |
47+
| `dotc` | xDOTC: 2つのベクトルの複素共役ドット積を求める (function template) | C++26 |
48+
| `sum_of_squares_result` | `vector_sum_of_squares`の結果型 (class template) | C++26 |
49+
| `vector_sum_of_squares` | xLASSQ: ベクトル要素の平方和を求める (class template) | C++26 |
50+
| `vector_two_norm` | xNRM2: ベクトルのユークリッドノルム(Euclidean norm)を求める (class template) | C++26 |
51+
| `vector_abs_sum` | xASUM: ベクトル要素の絶対値和を求める (class template) | C++26 |
52+
| `vector_idx_abs_max` | xIAMAX: ベクトル要素のうち最大絶対値インデクスを返す (class template) | C++26 |
53+
| `matrix_frob_norm` | 行列のフロベニウスノルム(Frobenius norm)を求める (class template) | C++26 |
54+
| `matrix_one_norm` | 行列の1ノルム(One norm)を求める (class template) | C++26 |
55+
| `matrix_inf_norm` | 行列の無限大ノルム(Infinity norm)を求める (class template) | C++26 |
56+
57+
58+
## BLAS 2アルゴリズム
59+
60+
| 名前 | 説明 | 対応バージョン |
61+
|------|------|----------------|
62+
| `matrix_vector_product` | xGEMV: 一般行列とベクトルの積を求める (class template) | C++26 |
63+
| `symmetric_matrix_vector_product` | xSYMV: 対称行列とベクトルの積を求める (class template) | C++26 |
64+
| `hermitian_matrix_vector_product` | xHEMV: ハミルトニアン行列とベクトルの積を求める (class template) | C++26 |
65+
| `triangular_matrix_vector_product` | xTRMV: 三角行列とベクトルの積を求める (class template) | C++26 |
66+
| `triangular_matrix_vector_solve` | xTRSV: 三角行列を係数とする行列方程式を解く (class template) | C++26 |
67+
| `matrix_rank_1_update` | xGER, xGERU: 行列のRank-1更新 (class template) | C++26 |
68+
| `matrix_rank_1_update_c` | xGERC: 複素行列のRank-1更新 (class template) | C++26 |
69+
| `symmetric_matrix_rank_1_update` | xSYR: 対称行列のRank-1更新 (class template) | C++26 |
70+
| `hermitian_matrix_rank_1_update` | xHER: ハミルトニアン行列のRank-1更新 (class template) | C++26 |
71+
| `symmetric_matrix_rank_2_update` | xSYR2: 対称行列のRank-2更新 (class template) | C++26 |
72+
| `hermitian_matrix_rank_2_update` | xHER2: ハミルトニアン行列のRank-2更新 (class template) | C++26 |
73+
74+
75+
## BLAS 3アルゴリズム
76+
77+
| 名前 | 説明 | 対応バージョン |
78+
|------|------|----------------|
79+
| `matrix_product` | xGEMM: 2つの一般行列の積を求める (class template) | C++26 |
80+
| `symmetric_matrix_product` | xSYMM: 対称行列と行列の積を求める (class template) | C++26 |
81+
| `hermitian_matrix_product` | xHEMM: ハミルトニアン行列と行列の積を求める (class template) | C++26 |
82+
| `triangular_matrix_product` | xTRMM: 三角行列と行列の積を求める (class template) | C++26 |
83+
| `triangular_matrix_left_product` | xTRMM: In-placeに三角行列と行列の積を求める (class template) | C++26 |
84+
| `triangular_matrix_right_product` | xTRMM: In-placeに三角行列と行列の積を求める (class template) | C++26 |
85+
| `symmetric_matrix_rank_k_update` | xSYRK: 対称行列のRank-k更新 (class template) | C++26 |
86+
| `hermitian_matrix_rank_k_update` | xHERK: ハミルトニアン行列のRank-k更新 (class template) | C++26 |
87+
| `symmetric_matrix_rank_2k_update` | xSYR2K: 対称行列のRank-2k更新 (class template) | C++26 |
88+
| `hermitian_matrix_rank_2k_update` | xHER2K: ハミルトニアン行列のRank-2k更新 (class template) | C++26 |
89+
| `triangular_matrix_matrix_left_solve` | xTRSM: 三角行列の連立一次方程式を解く (class template) | C++26 |
90+
| `triangular_matrix_matrix_right_solve` | xTRSM: 三角行列の連立一次方程式を解く (class template) | C++26 |
91+
92+
93+
## タグ型
94+
95+
| 名前 | 説明 | 対応バージョン |
96+
|------|------|----------------|
97+
| `column_major_t` | 列優先メモリレイアウトを表現するためのタグ型 (class) | C++26 |
98+
| `column_major` | 列優先メモリレイアウトを表現するためのタグ値 (variable) | C++26 |
99+
| `row_major_t` | 行優先メモリレイアウトを表現するためのタグ型 (class) | C++26 |
100+
| `row_major` | 行優先メモリレイアウトを表現するためのタグ値 (variable) | C++26 |
101+
| `upper_triangle_t` | 上三角行列を表現するためのタグ型 (class) | C++26 |
102+
| `upper_triangle` | 上三角行列を表現するためのタグ値 (variable) | C++26 |
103+
| `lower_triangle_t` | 下三角行列を表現するためのタグ型 (class) | C++26 |
104+
| `lower_triangle` | 下三角行列を表現するためのタグ値 (variable) | C++26 |
105+
| `implicit_unit_diagonal_t` | implicit unit diagonalを表現するためのタグ型 (class) | C++26 |
106+
| `implicit_unit_diagonal` | implicit unit diagonalを表現するためのタグ値 (variable) | C++26 |
107+
| `explicit_diagonal_t` | explicit diagonalを表現するためのタグ型 (class) | C++26 |
108+
| `explicit_diagonal` | explicit diagonalを表現するためのタグ値 (variable) | C++26 |
109+
110+
111+
## バージョン
112+
### 言語
113+
- C++26
114+
115+
### 処理系
116+
- [Clang](/implementation.md#clang): ??
117+
- [GCC](/implementation.md#gcc): ??
118+
- [ICC](/implementation.md#icc): ??
119+
- [Visual C++](/implementation.md#visual_cpp): ??
120+
121+
122+
## 関連項目
123+
- [`<mdspan>`](mdspan.md)
124+
125+
126+
## 参照
127+
- [P1673R13 A free function linear algebra interface based on the BLAS](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p1673r13.html)
128+
- [BLAS (Basic Linear Algebra Subprograms)](https://www.netlib.org/blas/)

0 commit comments

Comments
 (0)