2016-08-24 13 views
0

Я прошел через несколько ресурсов: книгу OpenCL Khronos, учебник GATech, учебник NYU, и я мог бы пройти через все. Но я до сих пор не понимаю полностью. В чем разница между ядром и программным объектом?В чем разница между ядром и программным объектом?

До сих пор лучшее объяснение это для меня, но это не для меня достаточно, чтобы полностью понять: объектная программа: программный объект инкапсулирует некоторый исходный код (с потенциально нескольких функций ядра) и его последней успешной сборки. KERNEL: Объект ядра инкапсулирует значения аргументов ядра , используемых при запуске ядра.

Возможно, программный объект является кодом? И ядро ​​является скомпилированным исполняемым файлом? Это оно? Потому что я мог понять что-то подобное.

Заранее благодарен!

+0

Это объяснение также не имеет для меня смысла: ядра - это функции OpenCL, которые работают на устройствах OpenCL; Программные объекты - это исходный код программы и исполняемые файлы, которые реализуют ядра. Мое отсоединение состоит в том, что функции и исходный код означают для меня то же самое. –

+1

Я не уверен, почему это имеет значение для вас - кажется, вы одержимы терминологией. Практический аспект - это то, что важно, и это довольно ясно - ядро ​​- это скомпилированная функция, которую вы можете выполнить; программа скомпилированного кода, который содержит потенциально несколько ядер. Таким образом, это объекты на разных уровнях абстракций, точно такие же, как программа и функция/подпрограмма на любом языке программирования. –

+0

Получил! Это имеет смысл. Благодаря! –

ответ

3

Программа представляет собой набор из одного или нескольких ядер плюс опционально поддерживающие функции. Программа может быть создана из источника или из нескольких типов двоичных файлов (например, SPIR, SPIR-V, native). Некоторые программные объекты (созданные из источника или из промежуточных двоичных файлов) должны быть созданы для одного или нескольких устройств (с помощью clBuildProgram или clCompileProgram и clLinkProgram) до выбора из них ядер. Самый простой способ подумать о программах - это то, что они похожи на библиотеки DLL и экспортируют ядра для использования программистом.

Kernel - это исполняемый объект (не обязательно скомпилированный, поскольку вы можете иметь встроенные ядра, представляющие собой часть оборудования (например, ядра оценки видеороликов на оборудовании Intel)), вы можете связать свои аргументы и отправить их в разные очереди для выполнения.

+0

Большое вам спасибо, я думаю, что комбинация комментария от Lubo и вашего ответа дала мне богатое понимание, которого я не мог найти в книге/слайдах. Еще раз спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^