我正在使用 Xilinx 的 triSYCL github 实现,https://github.com/triSYCL/triSYCL。
我正在尝试创建一个带有 100 个的cl::sycl::pipes
设计capacity= 6
。我将通过 SYCL 代码中的单独线程访问每个管道。
这是我尝试过的:
constexpr int T = 6;
constexpr int n_threads = 100;
cl::sycl::pipe<cl::sycl::pipe<float>> p { n_threads, cl::sycl::pipe<float> { T } };
for (int j=0; j<n_threads; j++) {
q.submit([&](cl::sycl::handler &cgh) {
// Get write access to the pipe
auto kp = p[j].get_access<cl::sycl::access::mode::write>(cgh);
// Get read access to the data
auto ba = A.get_access<cl::sycl::access::mode::read>(cgh);
cgh.single_task<class producer>([=] () mutable {
for (int i = 0; i != T; i++)
// Try to write to the pipe up to success
while (!kp.write(ba[i]));
});
};
该代码只是tests/pipe/pipe_producer_consumer.cpp
github 存储库中文件的副本。我刚刚for loop
在它上面添加了一个并行实例化多个线程。
我在这方面遇到了多个错误:error: no matching function for call to ‘cl::sycl::pipe<cl::sycl::pipe<float> >::pipe(<brace-enclosed initializer list>)’
cl::sycl::pipe<cl::sycl::pipe<float>> p { n_threads, cl::sycl::pipe<float> { T } };