работа с файлами и потоками через OpenCL (GPU)

Я хочу записать в файл из ядра OpenCL .. что-то вроде fwrite() в C ..

Есть ли такая функция .. или что мне нужно сделать, чтобы записать в файл с GPU?


person Omar Osama    schedule 05.07.2011    source источник


Ответы (2)


Это невозможно. Дело не только в синхронизации с сотнями потоков, ядро ​​работает на специальных устройствах вроде GPU или ускорителей. Эти карты не имеют дисков доступа и других IO.

Данные могут отправляться и приниматься только из памяти, а ЦП может выполнять сложный ввод-вывод.

В общем: GPU (устройство OpenCL) может только получать данные из памяти и что-то делать с ними локально. После того, как на ЦП поступает сигнал о том, что ядро ​​OpenCL завершено, данные извлекаются из графического процессора. Графический процессор является чистым ведомым устройством без какого-либо контроля над своей средой.

person Rick-Rainer Ludwig    schedule 06.07.2011
comment
Меня убедил ваш ответ, но у меня есть вопрос. Что делать, если процессор GPU хочет записать изображение или трехмерную модель? - person Omar Osama; 07.07.2011
comment
GPU не может этого сделать. Ядро завершает вычисление и сохраняет результат в глобальной памяти. Хост-процессор считывает память и записывает все на диск или куда угодно. - person Rick-Rainer Ludwig; 07.07.2011
comment
Хорошо, можно ли это сделать с помощью параллельных процессоров с ЦП.. Другими словами, может ли OpenCL с ЦП работать с файлами? - person Omar Osama; 08.07.2011
comment
Нет, спецификация OpenCL этого не поддерживает и код OpenCL компилируется специальным компилятором OpenCL. - person Rick-Rainer Ludwig; 08.07.2011
comment
пожалуйста, прочитайте этот вопрос .. :) При параллельной обработке, как заставить каждый процессор выполнять блок программы с помощью mathematica - person Omar Osama; 10.07.2011

Нет, это недоступно. Как бы вы безопасно обработали 1000 потоков, записывающих в один и тот же файл? Это сильно замедлит вычисления. Printf предназначен только для отладки.

Поэтому вам нужно отправить информацию на хост и позволить хосту выполнить правильную запись в файл. Лучший способ отправить данные обратно зависит от вашего ядра/алгоритма.

person Vincent.StreamComputing    schedule 05.07.2011
comment
Я принял во внимание проблему 1000 потоков. Я имею в виду, что каждый отдельный поток записывается в отдельный файл. Возможно ли это? - person Omar Osama; 07.07.2011