![](/img/trans.png)
[英]OpenMP offloading with Intel oneAPI DPC++ compiler to NVIDIA GPU
[英]How to reduce the time cost of parallel_for in DPC++?
我在 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()中優化上述代碼? 很感謝!
如果您在不同的設備上運行,那么所有隊列將並行執行。
如果要在單個設備上運行,則需要為每個隊列創建一個上下文,然后它將以並行方式執行。
context c1{};
queue q1{c1,gpu_selector()};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.