搜索

pdf文档 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 页请下载阅读 -
文档评分
请文明评论,理性发言.