CL / cl.h не найден в SYCL

#opencl #sycl

#opencl #sycl

Вопрос:

Я только что начал работать над SYCL и запустил ComputeCpp_info в своей системе, и отображаются следующие данные на 3 устройствах

Информация о ComputeCpp (CE 1.1.0)

SYCL 1.2.1 редакция 3

Устройство 1 ( GeForce GTX 1050 = НЕТ — устройство не поддерживает SPIR)

Устройство 2 (Intel (R) HD Graphics 630 = НЕПРОВЕРЕННОЕ — устройство, не протестированное на этой ОС)

Устройство 3 (процессор Intel (R) Core (TM) i7-7700HQ с частотой 2,80 ГГц = НЕПРОВЕРЕННЫЙ — устройство с непроверенным драйвером)

Теперь мой вопрос в том, могу ли я работать на этих устройствах, поскольку 2 не протестированы, а 1 невозможно? или мне не хватает некоторых драйверов?

Также я реализовал простой пример, но он выдает ошибку CL / cl.h не найден

 #include <CL/sycl.hpp>
#include <array>
#include <numeric>
#include <iostream>

int main() {

const size_t array_size = 1024 * 512;
std::array<cl::sycl::cl_int, array_size> in, out;
std::iota(begin(in), end(in), 0);

cl::sycl::queue device_queue;

cl::sycl::range<1> n_items{ array_size };

cl::sycl::buffer < cl::sycl::cl_int, 1> in_buffer(in.data(), n_items);
cl::sycl::buffer < cl::sycl::cl_int, 1> out_buffer(out.data(), n_items);

device_queue.submit([amp;](cl::sycl::handler amp;cgh) {

    constexpr auto sycl_read = cl::sycl::access::mode::read;
    constexpr auto sycl_write = cl::sycl::access::mode::write;

    auto in_accessor = in_buffer.get_access<sycl_read>(cgh);
    auto out_accessor = out_buffer.get_access<sycl_write>(cgh);

    cgh.parallel_for<class VecScalMul>(n_items,
        [=](cl::sycl::id<1> wiID) {
        out_accessor[wiID] = in_accessor[wiID] * 2;
    });
});

}
  

Ответ №1:

Инструмент computecpp_info показывает устройства, которые поддерживаются или не поддерживаются ComputeCpp в вашей системе. Вот объяснение выходных данных:

НИ ОДНО устройство не поддерживает SPIR: это означает, что устройство можно увидеть, но оно не поддерживает инструкции SPIR и поэтому не может поддерживаться ComputeCpp

НЕПРОВЕРЕННОЕ — устройство, не протестированное в этой ОС: это означает, что устройство можно увидеть и сообщает, что оно поддерживает инструкции SPIR. Он должен работать с ComputeCpp, но это конкретное устройство не было протестировано командой ComputeCpp

Ошибка отсутствия заголовка cl.h связана с тем, что у вас отсутствуют заголовки OpenCL. Их можно найти здесь, и вам нужно будет указать на них при компиляции вашего кода. Я бы предложил использовать Руководство по началу работы с образцом кода, а затем изменить пример hello world, чтобы протестировать ваш код. У этого есть существующий файл CMake, который предназначен для поиска всех необходимых вам зависимостей.

Комментарии:

1. Спасибо за подробный ответ. Я начну работать над руководством по началу работы

Ответ №2:

  1. (Это вопрос, специфичный для ComputeCpp, а не SYCL) НЕПРОВЕРЕННЫЕ платформы, вероятно, будут работать, но Codeplay не может этого гарантировать. По моему опыту, оба должны работать, возможно, некоторые ошибки драйвера OpenCL поразят вас на графическом процессоре Intel в зависимости от вашей конфигурации.
  2. Вам нужны заголовки OpenCL в вашей системе, поскольку спецификация SYCL 1.2.1 построена поверх OpenCL

Отказ от ответственности: Я сотрудник Codeplay, работающий в ComputeCpp!

Комментарии:

1. Спасибо за ответ, но у меня установлены драйверы cuda, поскольку я недавно работал над OpenCL 1.2. Должен ли я вручную связывать CL / cl.h в каталогах и библиотеке, как я делал для кода OpenCL, даже если я создал проект ComputeCpp?

2. Драйверы Cuda не поддерживают SPIR или SPIR-V и поэтому не могут использоваться с ComputeCpp. Однако вы можете скомпилировать с набором команд PTX, здесь есть некоторая информация об этом developer.codeplay.com/products/computecpp/ce/guides /…