Я хочу записать в файл из ядра OpenCL .. что-то вроде fwrite() в C ..
Есть ли такая функция .. или что мне нужно сделать, чтобы записать в файл с GPU?
Я хочу записать в файл из ядра OpenCL .. что-то вроде fwrite() в C ..
Есть ли такая функция .. или что мне нужно сделать, чтобы записать в файл с GPU?
Это невозможно. Дело не только в синхронизации с сотнями потоков, ядро работает на специальных устройствах вроде GPU или ускорителей. Эти карты не имеют дисков доступа и других IO.
Данные могут отправляться и приниматься только из памяти, а ЦП может выполнять сложный ввод-вывод.
В общем: GPU (устройство OpenCL) может только получать данные из памяти и что-то делать с ними локально. После того, как на ЦП поступает сигнал о том, что ядро OpenCL завершено, данные извлекаются из графического процессора. Графический процессор является чистым ведомым устройством без какого-либо контроля над своей средой.
Нет, это недоступно. Как бы вы безопасно обработали 1000 потоков, записывающих в один и тот же файл? Это сильно замедлит вычисления. Printf предназначен только для отладки.
Поэтому вам нужно отправить информацию на хост и позволить хосту выполнить правильную запись в файл. Лучший способ отправить данные обратно зависит от вашего ядра/алгоритма.