#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:
- (Это вопрос, специфичный для ComputeCpp, а не SYCL) НЕПРОВЕРЕННЫЕ платформы, вероятно, будут работать, но Codeplay не может этого гарантировать. По моему опыту, оба должны работать, возможно, некоторые ошибки драйвера OpenCL поразят вас на графическом процессоре Intel в зависимости от вашей конфигурации.
- Вам нужны заголовки 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 /…