0

std::vector在 SYCL中创建 2D 缓冲区的正确方法是什么?我有一个模板函数,它接收如下所示的参数:

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::vectors

我已经能够为 2D C 风格的数组实现缓冲区,但是我尝试了多个文档和答案,但似乎没有一个与这个特定的用例相匹配。

4

1 回答 1

1

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

于 2020-10-18T05:38:26.350 回答