我用DPC++编写了下面的代码来测试时间消耗。
// ignore sth for defining subdevices
cl::sycl::queue q[4] = {cl::sycl::queue{SubDevices1[0]}, cl::sycl::queue{SubDevices1[1]},
cl::sycl::queue{SubDevices2[0]}, cl::sycl::queue{SubDevices2[1]}};
void run(){
for(int i = 0; i < 4; i++){
q[i].submit([&](auto &h) {
h.parallel_for(
sycl::nd_range<2>(sycl::range<2>(1, 1), sycl::range<2>(1, 1)),
[=](sycl::nd_item<2> it){
// just empty
}
);
});
}
}它的价格大约是0.6秒。
当使用一个parallel_for测试一个队列时,它的开销约为0.15秒。
测试时发生了一件更复杂的事情
q[i].submit([&](auto &h) {h.memcpy(...);});当复制的数组很小时,此命令几乎不会占用时间。
如何在run()中优化上述代码?非常感谢!
发布于 2022-08-22 06:20:26
如果您在不同的设备上运行,那么所有队列都将并行执行。
如果要在单个设备上运行,则需要为每个队列创建上下文,然后以并行方式执行。
context c1{};
queue q1{c1,gpu_selector()};https://stackoverflow.com/questions/73253782
复制相似问题