【发布时间】:2022-08-22 14:20:26
【问题描述】:
我在 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.6s。
当用一个parallel_for 测试一个队列时,它花费了大约0.15s。
测试时发生了一件更连贯的事情
q[i].submit([&](auto &h) {h.memcpy(...);});
当复制的数组较小时,此命令几乎不消耗时间。
如何在run()中优化上述代码?很感谢!
-
你想达到什么目的?运行一个空内核不会告诉你很多任何事情。您所说的数组通常会影响内核的性能,因为将内存从 CPU 传输到 GPU 的成本会影响整体性能。与较大的内存传输相比,较小的内存传输对性能的影响较小。看看一些示例代码,特别是我可以推荐看看 SYCL Academy github.com/codeplaysoftware/syclacademy
标签: c++ parallel-processing hpc sycl dpc++