Есть ли какой-нибудь пример использования clEnqueueNativeKernel в OpenCL? Таким образом, можно написать ядро на языке c или C++. Остальные команды остаются неизменными?using clEnqueueNativeKernel в OpenCL
1
A
ответ
4
Native C++ «ядра» - это, по сути, просто функции, которые вы хотите выполнить в командной строке, чтобы сохранить порядок команд.
AFAIK они не поддерживаются на GPU. Если вы хотите выполнять функции C++ на всех устройствах, вам следует использовать обратные вызовы cl_event (когда status == CL_COMPLETE).
Предположим, у вас есть буферный объект, который вы хотите прочитать с устройства, и перейти к вашей функции C++. Кроме того, вы хотите, чтобы передать некоторое целое значение, а (я использую C++ OpenCL обертку):
// First of all, we should define a struct which describes our arguments list.
struct Arguments
{
int integer;
void* buffer_host;
};
// Define C/C++ function you want to call.
void CFunction(void *args)
{
Arguments args = reinterpret_cast<Arguments*>(args);
// Do something with args->integer and args->buffer_host.
}
// ...
Arguments args = {.integer = 0, .buffer_host = NULL};
// First, we should define Buffer objects in arguments.
std::vector<cl::Memory> buffers_dev;
buffers_dev.push_back(a_buffer);
// Then we should define pointers to *pointer in args* which will be set
// when OpenCL read data from buffers_dev to the host memory.
std::vector<const void*> buffers_host;
buffers_host.push_back(&args.buffer_host);
// Finally, set integer
args.integer = 10;
queue.enqueueNativeKernel(CFunction,
std::make_pair(&args, siezof(Arguments)),
&buffers_dev,
&buffers_host);
// At this point args were copied by OpenCL and you may reuse or delete it.
Смежные вопросы
- 1. Euclidean distance using OpenCL
- 2. OpenCL: using struct как аргумент ядра
- 3. Intel OpenCL Vs. Khronos OpenCL
- 4. Реализация в OpenCL
- 5. Cloo OpenCL C# Задача
- 6. OpenCL/CPU. Проверьте, доступна ли среда OpenCL
- 7. Имитация OpenCL 1.1 с OpenCL 1.2
- 8. Ошибка компилятора OpenCL C4996
- 9. Ввод файлов в OpenCL?
- 10. форматирование строк в OpenCL?
- 11. Глубина резкости в OpenCL
- 12. Поддержка HyperQ в OpenCL
- 13. Строка в OpenCL
- 14. Самоуправляющий указатель в OpenCL
- 15. Преобразование типа в opencl
- 16. Использование clEnqueueNDRangeKernel в OpenCL
- 17. Выполнение сканирования в OpenCL
- 18. Программирование OpenCL в Charm ++
- 19. памяти в OpenCL
- 20. Матричная инверсия в OpenCL
- 21. реализация bitcount в opencl
- 22. Внедрить OpenCL в OpenGL
- 23. платформ в OpenCL
- 24. Аффинность процессора в OpenCL
- 25. OpenCl watchdog в linux
- 26. Сохранение данных в OpenCL
- 27. clReleaseMemObject в OpenCL
- 28. Задачи OpenCL вставляются в
- 29. 3D-массивы в OpenCL
- 30. создание суббуфера в openCL
Не могли бы вы указать цель, которую вы хотите достичь. Вопрос слишком общий прямо сейчас. – Kentzo
Я хотел написать родное ядро C++. Поэтому я должен использовать команду clEnqueueNativeKernel. Я искал источник, чтобы прочитать о достоинствах и недостатках родных ядер, а также о том, как их можно использовать. Кажется, они не поддерживаются на всех платформах. – Damoon