Skip to content

Commit 7d79a5d

Browse files
committed
mdspan: aligned_accessor概要 P2897R7(#1380)
1 parent 6f2372b commit 7d79a5d

File tree

7 files changed

+101
-15
lines changed

7 files changed

+101
-15
lines changed

lang/cpp26.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
115115
- [`std::mdspan`](/reference/mdspan/mdspan.md)から部分ビューを取り出す[`std::submdspan()`](/reference/mdspan/submdspan.md)を追加
116116
- [`std::mdspan`](/reference/mdspan/mdspan.md)に対する[`std::dextents`](/reference/mdspan/extents.md)指定の冗長さを解決する[`std::dims`](/reference/mdspan/extents.md)を追加
117117
- [`std::mdspan`](/reference/mdspan/mdspan.md)のレイアウトとして、[`std::layout_left_padded`](/reference/mdspan/layout_left_padded.md)[`std::layout_right_padded`](/reference/mdspan/layout_right_padded.md)を追加
118-
- [`<mdspan>`](/reference/mdspan.md)に、ポインタのアライメントをしながらアクセスする[`std::aligned_accessor`](/reference/mdspan/aligned_accessor.md.nolink)を追加
118+
- [`<mdspan>`](/reference/mdspan.md)に、要素アクセスにアライメント保証を与える[`std::aligned_accessor`](/reference/mdspan/aligned_accessor.md)を追加
119119
- [`std::span`](/reference/span/span.md)に、以下を追加
120120
- [`std::initializer_list`](/reference/initializer_list/initializer_list.md)をとるコンストラクタ
121121
- インデックスアクセスのための[`at()`](/reference/span/span/at.md)メンバ関数
@@ -357,6 +357,7 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
357357
- [`<typeinfo>`](/reference/typeinfo.md)ヘッダの以下の機能
358358
- [`std::bad_cast`](/reference/typeinfo/bad_cast.md)クラスの`what()`メンバ関数
359359
- [`std::bad_typeid`](/reference/typeinfo/bad_typeid.md)クラスの`what()`メンバ関数
360+
- [<memory>](/reference/memory.md)に、ポインタのアライメントを判定する[`std::is_sufficiently_aligned()`](/reference/memory/is_sufficiently_aligned.md)関数を追加。
360361

361362

362363
### デバッグ

reference/mdspan.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
| 名前 | 説明 | 対応バージョン |
3131
|------|------|-------|
3232
| [`default_accessor`](mdspan/default_accessor.md) | デフォルト要素アクセサ (class template) | C++23 |
33+
| [`aligned_accessor`](mdspan/aligned_accessor.md) | アライメント保証付き要素アクセサ (class template) | C++26 |
3334

3435

3536
## 多次元配列ビュー
@@ -65,3 +66,4 @@
6566
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
6667
- [P2630R4 Submdspan](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2630r4.html)
6768
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
69+
- [P2897R7 `aligned_accessor`: An mdspan accessor expressing pointer over-alignment](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2897r7.html)

reference/mdspan/AccessorPolicy.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ AccessorPolicyを満たす型`A`は
3232

3333
## `AccessorPolicy`に該当する型
3434

35-
- [`default_accessor`](default_accessor.md)
35+
- [`<mdspan>`](/reference/mdspan.md)ヘッダ
36+
- C++23 [`default_accessor`](default_accessor.md)
37+
- C++26 [`aligned_accessor`](aligned_accessor.md)
38+
- [`<linalg>`](/reference/linalg.md)ヘッダ
39+
- C++26 [`scaled_accessor`](/reference/linalg/scaled_accessor.md)
40+
- C++26 [`conjugated_accessor`](/reference/linalg/conjugated_accessor.md)
3641

3742

3843
## バージョン

reference/mdspan/LayoutMapping.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,14 @@ LayoutMappingを満たす型`M`は
9090

9191
## `LayoutMapping`に該当する型
9292

93-
- [`layout_left::mapping<E>`](layout_left/mapping.md)
94-
- [`layout_right::mapping<E>`](layout_right/mapping.md)
95-
- [`layout_stride::mapping<E>`](layout_stride/mapping.md)
96-
- [`layout_left_padded<S>::mapping<E>`](layout_left_padded/mapping.md)
97-
- [`layout_right_padded<S>::mapping<E>`](layout_right_padded/mapping.md)
98-
- [`layout_blas_packed<T,SO>::mapping<E>`](/reference/linalg/layout_blas_packed/mapping.md)
93+
- [`<mdspan>`](/reference/mdspan.md)ヘッダ
94+
- C++23 [`layout_left::mapping<E>`](layout_left/mapping.md)
95+
- C++23 [`layout_right::mapping<E>`](layout_right/mapping.md)
96+
- C++23 [`layout_stride::mapping<E>`](layout_stride/mapping.md)
97+
- C++26 [`layout_left_padded<S>::mapping<E>`](layout_left_padded/mapping.md)
98+
- C++26 [`layout_right_padded<S>::mapping<E>`](layout_right_padded/mapping.md)
99+
- [`<linalg>`](/reference/linalg.md)ヘッダ
100+
- C++26 [`layout_blas_packed<T,SO>::mapping<E>`](/reference/linalg/layout_blas_packed/mapping.md)
99101

100102

101103
## バージョン

reference/mdspan/LayoutMappingPolicy.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ LayoutMappingPolicyを満たす型`MP`は
3737
3838
## `LayoutMappingPolicy`に該当する型
3939
40-
- [`layout_left`](layout_left.md)
41-
- [`layout_right`](layout_right.md)
42-
- [`layout_stride`](layout_stride.md)
43-
- [`layout_left_padded<S>`](layout_left_padded.md)
44-
- [`layout_right_padded<S>`](layout_right_padded.md)
45-
- [`linalg::layout_blas_packed<T,SO>`](/reference/linalg/layout_blas_packed.md)
40+
- [`<mdspan>`](/reference/mdspan.md)ヘッダ
41+
- C++23 [`layout_left`](layout_left.md)
42+
- C++23 [`layout_right`](layout_right.md)
43+
- C++23 [`layout_stride`](layout_stride.md)
44+
- C++26 [`layout_left_padded<S>`](layout_left_padded.md)
45+
- C++26 [`layout_right_padded<S>`](layout_right_padded.md)
46+
- [`<linalg>`](/reference/linalg.md)ヘッダ
47+
- C++26 [`layout_blas_packed<T,SO>`](/reference/linalg/layout_blas_packed.md)
4648
4749
4850
## バージョン

reference/mdspan/aligned_accessor.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# aligned_accessor
2+
* mdspan[meta header]
3+
* class template[meta id-type]
4+
* std[meta namespace]
5+
* cpp26[meta cpp]
6+
7+
```cpp
8+
namespace std {
9+
template<class ElementType, size_t ByteAlignment>
10+
class aligned_accessor;
11+
}
12+
```
13+
14+
## 概要
15+
`aligned_accessor`は、多次元配列ビュー[`mdspan`](mdspan.md)を介した要素アクセスにおいて、メモリアドレスに対するアライメント保証を与える。それ以外の動作は[`default_accessor`](default_accessor.md)と等価である。
16+
17+
`ElementType`は抽象クラス型もしくは配列型のいずれでもない完全型であること。
18+
19+
`aligned_accessor`は[トリビアルコピー可能](/reference/type_traits/is_trivially_copyable.md)であり、[`semiregular`](/reference/concepts/semiregular.md)のモデルである。
20+
21+
`aligned_accessor`は[アクセサポリシー要件](AccessorPolicy.md)を満たす。
22+
23+
24+
## 適格要件
25+
- `ByteAlignment`は2のべき乗であること
26+
- `ByteAlignment >=` [`alignof`](/lang/cpp11/alignof.md)`(ElementType)`
27+
28+
29+
## メンバ変数
30+
31+
| 名前 | 説明 | 対応バージョン |
32+
|------|------|----------------|
33+
| `static constexpr size_t byte_alignment` | `ByteAlignment` | C++26 |
34+
35+
36+
## メンバ関数
37+
38+
| 名前 | 説明 | 対応バージョン |
39+
|------|------|----------------|
40+
| [`(constructor)`](aligned_accessor/op_constructor.md.nolink) | コンストラクタ | C++26 |
41+
| `(destructor)` | デストラクタ | C++26 |
42+
| [`operator default_accessor`](aligned_accessor/op_default_accessor.md.nolink) | [`default_accessor`](default_accessor.md)型への変換演算子 | C++26 |
43+
| [`access`](aligned_accessor/access.md.nolink) | 指定オフセット位置にある要素へアクセスする | C++26 |
44+
| [`offset`](aligned_accessor/offset.md.nolink) | 指定オフセット位置のハンドルを取得する | C++26 |
45+
46+
47+
## メンバ型
48+
49+
| 名前 | 説明 | 対応バージョン |
50+
|------|------|----------------|
51+
| `offset_policy` | [`default_accessor<ElementType>`](default_accessor.md) | C++26 |
52+
| `element_type` | `ElementType` | C++26 |
53+
| `reference` | `ElementType&` | C++26 |
54+
| `data_handle_type` | `ElementType*` | C++26 |
55+
56+
57+
## バージョン
58+
### 言語
59+
- C++26
60+
61+
### 処理系
62+
- [Clang](/implementation.md#clang): ??
63+
- [GCC](/implementation.md#gcc): ??
64+
- [ICC](/implementation.md#icc): ??
65+
- [Visual C++](/implementation.md#visual_cpp): ??
66+
67+
68+
## 関連項目
69+
- [`mdspan`](mdspan.md)
70+
- [`default_accessor`](default_accessor.md)
71+
72+
73+
## 参照
74+
- [P2897R7 `aligned_accessor`: An mdspan accessor expressing pointer over-alignment](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2897r7.html)

reference/memory/is_sufficiently_aligned.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace std {
2828
2929
3030
## この機能が必要になった背景・経緯
31-
この関数テンプレートは[`<mdspan>`](/reference/mdspan.md)ヘッダへの[`aligned_accessor`](/reference/mdspan/aligned_accessor.md.nolink)導入に伴って必要とされた機能である。
31+
この関数テンプレートは[`<mdspan>`](/reference/mdspan.md)ヘッダへの[`aligned_accessor`](/reference/mdspan/aligned_accessor.md)導入に伴って必要とされた機能である。
3232
一方で、ポインタ値のアライメント要件を検査するユースケースは一般的と考えられたため、汎用ユーティリティとして`<memory>`ヘッダに対して機能追加された。
3333
3434

0 commit comments

Comments
 (0)