提问人:PluginPenguin 提问时间:8/15/2023 最后编辑:PluginPenguin 更新时间:10/7/2023 访问量:201
以 std::span 的形式访问 std::mdspan 的一行
Accessing a row of a std::mdspan as std::span
问:
我正在尝试 Kokkos 参考 mdspan 实现,看看它是否可用于简化我们代码库中的一些代码。我直觉上认为可能的一件事是选择一行二维并将其分配给 ,例如有点像std::mdspan
std::span
float* data = ...
std::mdspan matrix (data, 2, 5);
std::span vector = matrix[0]; // <-- should be a std::span<float, std::dynamic_extent> viewing row 0 of matrix
经过一番研究,我没有找到一种明显直接的方法来实现这一目标,无论是使用 mdspan 的成员函数还是使用 std 库中的免费函数。目前我看到的唯一可能性是回到原始指针级别并编写自己的自由函数来做到这一点,这并不像我预期的那么优雅。我是否忽略了某些东西,或者这真的没有 mdspan 的功能?
答:
2赞
康桓瑋
10/7/2023
#1
您可以通过 C++26 std::submdspan()
将原始 2d- 切片为 1-d。mdspan
mdspan
由于结果的基础序列是连续的,因此可用于构造mdspan
std::span
float* data = ...;
std::mdspan matrix(data, 2, 5);
std::mdspan row0 = std::submdspan(matrix, 0, std::full_extent);
std::span vector0(row0.data_handle(), row0.size()); // row 0 of matrix
std::mdspan row1 = std::submdspan(matrix, 1, std::full_extent);
std::span vector1(row1.data_handle(), row1.size()); // row 1 of matrix
使用参考 mdspan
实现的演示。
评论
submdspan
可以提供帮助。std::span
5
matrix
mdspan
std::span<float, std::dynamic_extent>