簡體   English   中英

SYCL DPC++自動檢測裝置

[英]SYCL DPC++ auto detect device

這個問題可能是微不足道的,不幸的是我還沒有找到我正在尋找的答案。

我使用dpct遷移工具將一些 cuda 代碼移植到英特爾 DPC++,然后我進一步優化了我需要的一切,最終擺脫了與dpct相關的一切,期待超級方便

dpct::get_current_device();

這基本上解決了我之前必須放置編譯選項來選擇合適的設備並使用 Makefile 等控制它們的所有痛苦。

有沒有辦法在不使用 dpct 的情況下做到這一點? 我查看了 dpct 是如何做到這一點的( 在這里),但它看起來非常不簡單,它依賴於其他內部函數。

有什么辦法可以避免這種情況嗎?

從您的問題中,我並不完全清楚您是要 1) 抓住設備的手柄還是 2) 選擇要在其上運行東西的設備,所以我會嘗試回答這兩個問題。 請注意, dpct::get_current_device()實際上並沒有選擇設備,它只是返回您在程序之前已經選擇的設備。

  1. 通常在使用 SYCL 時,我們從sycl::queue開始,我們使用它來提交內核、內存復制操作等。從sycl::queue可以訪問您的設備:
sycl::device d = q.get_device();
  1. 但似乎您可能會要求以最簡單的方式來選擇設備。 在這種情況下,最簡單的方法是使用 SYCL 提供的設備選擇器之一來構建隊列:
sycl::queue q{sycl::gpu_selector()};
sycl::queue q{sycl::cpu_selector()};
sycl::queue q{sycl::default_selector()};

請注意,最后一個選項( sycl::default_selector() )可能是dpct當前正在為您做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM