Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
const char fileName[] = "../forTest.cl";
size_t source_size;
std::unique_ptr<char[]> source;
try {
std::ifstream stream;
stream.exceptions(std::ios_base::bad_bit | std::ios_base::fail_bit | std::iOS_base::eof_bit);
stream.open(fileName, std::ios_base::in);
stream.seekg(0, std::ios_base::end);
size_t source_size = stream.tellg();
stream.seekg(0, std::ios_base::beg);
source.reset(new char[source_size]);
stream.read(source.get(), source_size);
} catch (const std::exception& e) {
std::cerr << "Can't read kernel: " << e.what() << std::endl;
exit(1);
}
C-шные функции легко использовать из любого языка программирования в любой ситуации
но это не избавит от десятков clSetKernelArg подряд
//устанавливаем параметры запуска (кол-во потоков, очередь)
auto launcher = kernel.bind(queue, AlignUp(paramsCnt, 64), 64);
//вызываем ядро, передавая параметры как в обычную функцию
launcher(paramsBuffer, paramsCnt, resultsBuffer);
С другой стороны, если в качестве будущего OpenCL разработки собираются позиционировать этот ад: www.khronos.org/registry/sycl/specs/sycl-1.2.pdf, то это даже не такое и зло.
OpenCL. Как начать