Как заставить SYCL default_selector выбрать графический процессор Intel, а не графический процессор NVIDIA?

В настоящее время я работаю над проектом, использующим SYCL для применения нерезкой маски к изображению. В моей машине есть NVIDIA и Intel GPU внутри. Я начинаю со следующего кода:

default_selector deviceSelector;
queue myQueue(deviceSelector);

Проблема в том, что строка кода «default_selector deviceSelector;» автоматически захватывает графический процессор NVIDIA внутри моей машины, это ломает весь последующий код, поскольку SYCL не работает с NVIDIA.

Поэтому мой вопрос: как я могу заставить "default_selector deviceSelector;" получить мой графический процессор Intel, а не графический процессор NVIDIA? Пожалуй, я могу сказать что-то вроде:

if (device.has_extension(cl::sycl::string_class("Intel"))) 
   if (device.get_info<info::device::device_type>() == info::device_type::gpu)
       then select this GPU;//pseudo code 

Таким образом, код пропускает графический процессор NVIDIA и гарантирует выбор моего графического процессора Intel.


person Kyle_Pearce    schedule 27.11.2019    source источник


Ответы (1)


Вы проверяете, что расширения содержат запись под названием «Intel», которой не будет. Расширения поддерживаются устройством, например SPIR-V. Вы можете просмотреть поддерживаемые расширения, вызвав clinfo из командной строки. Чтобы выбрать графический процессор Intel, вам необходимо проверить производителя устройства, чтобы выбрать правильный.

Итак, в примере кода для выбора пользовательского устройства https://github.com/codeplaysoftware/computecpp-sdk/blob/master/samples/custom-device-selector.cpp#L46

Вам нужно будет просто иметь что-то вроде

if (device.get_info<info::device::name>() == "Name of device") {
        return 100;
      }

Вы можете распечатать значение

device.get_info<info::device::name>

чтобы получить значение для проверки.

person Rod Burns    schedule 16.12.2019