在 SYCL 中为 2D 创建缓冲区 std::vector
Creating buffer in SYCL for 2D std::vector
在 SYCL 中创建 2D std::vector
缓冲区的正确方法是什么?
我有一个接收参数的模板函数,如下所示:
template <typename T>
void MatrixMulParallelNaive(queue& q,
std::vector<std::vector<T>>& a,
std::vector<std::vector<T>>& b,
std::vector<std::vector<T>>& c){
// Is this a correct way?
buffer<T, 2> a_buf(a.data(), range<2>{a.size(), a[0].size()})
buffer<T, 2> b_buf(b.data(), range<2>{b.size(), b[0].size()})
buffer<T, 2> c_buf(c.data(), range<2>{c.size(), c[0].size()})
/* ... */
}
a
、b
和 c
是 2D std::vector
s
我已经能够为二维 C 样式数组实现缓冲区,但我已经尝试了多个文档和答案,但 none 似乎与这个特定用例相匹配。
没有。 vector<vector<T>>
不会创建连续的内存块。您需要使用 vector<T>
并将其解释为二维数据块。
在 SYCL 中创建 2D std::vector
缓冲区的正确方法是什么?
我有一个接收参数的模板函数,如下所示:
template <typename T>
void MatrixMulParallelNaive(queue& q,
std::vector<std::vector<T>>& a,
std::vector<std::vector<T>>& b,
std::vector<std::vector<T>>& c){
// Is this a correct way?
buffer<T, 2> a_buf(a.data(), range<2>{a.size(), a[0].size()})
buffer<T, 2> b_buf(b.data(), range<2>{b.size(), b[0].size()})
buffer<T, 2> c_buf(c.data(), range<2>{c.size(), c[0].size()})
/* ... */
}
a
、b
和 c
是 2D std::vector
s
我已经能够为二维 C 样式数组实现缓冲区,但我已经尝试了多个文档和答案,但 none 似乎与这个特定用例相匹配。
没有。 vector<vector<T>>
不会创建连续的内存块。您需要使用 vector<T>
并将其解释为二维数据块。