在 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()})
    
    /* ... */
}

abc 是 2D std::vectors

我已经能够为二维 C 样式数组实现缓冲区,但我已经尝试了多个文档和答案,但 none 似乎与这个特定用例相匹配。

没有。 vector<vector<T>> 不会创建连续的内存块。您需要使用 vector<T> 并将其解释为二维数据块。