Is std::mdspan a Zero-overhead Abstraction? - Oleksandr Bakirov - CppCon
1.04 MB
75 页
0 下载
51 浏览
0 评论
0 收藏
所属分类:
后端开发 / C++
| 语言 | 格式 | 评分 |
|---|---|---|
英语 | .pdf | 3 |
| 摘要 | ||
文档讨论了std::mdspan是否为零开销抽象。std::mdspan是一种多维数组的视图,主要用于函数参数。演讲者分析了其实现中的复杂性,包括编译器如何处理循环展开和内存操作。通过Chandler Carruth的观点,文档指出没有零成本抽象,并以unique_ptr为例说明其实现细节。最后,演讲者展示了使用mdspan进行矩阵加法的示例,并批评了std::mdspan的局限性和设计上的不足。 | ||
| AI总结 | ||
《Is std::mdspan a Zero-overhead Abstraction?》是Oleksandr Bakirov在CppCon 2019上的演讲,主要探讨了C++标准库中的`std::mdspan`是否为零开销抽象这一问题。
### 核心观点总结:
1. **什么是`std::mdspan`?**
`std::mdspan`是一种多维数组的视图,主要用于函数参数,旨在提供对多维数组的高效访问。
2. **`std::mdspan`的零开销目标**
`std::mdspan`的设计目标是实现零开销(zero-overhead),即在性能上与直接访问数组元素无异。然而,其实现存在一些限制。
3. **`std::mdspan`的局限性**
- `std::mdspan`要求所有步长(strides)必须在编译时指定,这在某些场景中不够灵活。
- 由于设计目标的限制,`std::mdspan`无法同时支持任意组合的编译时和运行时步长,导致其灵活性不足。
4. **标准提案与权衡**
目前有一个提案(P2642)提出了`layout_right_padded`布局,但演讲者指出,这种方案过于复杂,无法满足设计目标。此外,尝试支持更灵活的布局会增加实现的复杂性。
5. **Chandler Carruth的观点**
Chandler Carruth曾指出:“没有零成本的抽象(There Are No Zero-Cost Abstractions)”。演讲者引用这一观点,强调虽然`std::mdspan`的目标是零开销,但其实现细节仍然需要关注。
6. **演讲中的案例与结论**
演讲通过矩阵加法的示例展示了`std::mdspan`的使用方式,表明其实现可以是高效的,但其设计过于 rigid,难以满足更复杂的使用场景。演讲者认为,`std::mdspan`的灵活性不足,且可能已经错过了改进的最佳时机。
### 总结:
`std::mdspan`作为一种多维数组视图,虽然目标是零开销,但其实现存在灵活性不足的问题。演讲者通过案例和标准提案的讨论,指出了其设计上的局限性,并认为这种设计可能无法满足更广泛的需求。 | ||
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
63 页请下载阅读 -
文档评分













