Можно ли установить, какие аргументы функции имеют модификаторы ‘global’ или ‘const’? Или как хотя бы проверить код сгенерированной функции для каждой функции (чтобы вставить ее вручную)?
Ближайшая вещь, которую я видел, была BOOST_COMPUTE_STRINGIZE_SOURCE
где вы пишете весь код ядра вручную, сохраняете его в строку, компилируете вручную, вызываете используя set_arg(argId, wrapedItems)
а также queue.enqueue_nd_range_kernel
это выглядит намного сложнее, чем:
BOOST_COMPUTE_CLOSURE(ftype, kick, (ftype beam), (__const voltage), {
return beam * sin(beam + voltage);
});
можно было бы надеяться.
BOOST_COMPUTE_CLOSURE()
создает функцию, которая может быть передана в функции Boost.Compute, такие как transform()
или же sort()
, По сравнению с BOOST_COMPUTE_FUNCTION()
, это позволяет захватывать переменные C ++ в области видимости. Он не создает объект ядра OpenCL, поэтому на самом деле нет необходимости указывать спецификатор адресного пространства, потому что он никогда не работает с указателями, только со значениями.
Однако, если у вас есть собственное ядро и вы хотите передать __constant
буфер в качестве аргумента, затем используйте constant_buffer_iterator
,
Других решений пока нет …