января 21, 2019

darktable 2.4 > Специальные темы > Darktable и OpenCL > Использование OpenCL в нескольких устройствах - ручные настройки

ПРЕД.

10.2. Darktable и OpenCL

10.2.9. Использование OpenCL в нескольких устройствах – ручные настройки

В большинстве типичных систем использование устройств OpenCL может быть оптимизировано с помощью настройки профилей управления "Профиль планировщика OpenCL". Однако если ваша система оснащена различными графическими процессорами, вы можете установить относительный приоритет устройств вручную. Для этого необходимо выбрать профиль планировщика "По умолчанию" и выполнить настройки параметра конфигурации “opencl_device_priority”.

Важно понимать, как darktable использует устройства OpenCL. Каждая последовательность обработки изображения (от преобразования ввода в конечный результат согласно истории изменений) - выполняется в так называемом пиксельном конвейере. В darktable есть четыре разных типа пиксельных конвейера. Один тип отвечает за обработку изображения в центральной области приложения (или полноразмерного просмотра) в режиме "Обработка", другой пиксельный конвейер обрабатывает изображение предварительного просмотра (панель "Навигация"), расположенного вверху слева в режиме "Обработка". Каждый из этих двух пиксельных конвейеров может быть запущен параллельно. Кроме того, может быть несколько параллельных пиксельных конвейеров, выполняющих экспорт файлов, и может быть несколько параллельных пиксельных конвейеров, создающих миниатюры. Если доступно устройство OpenCL, darktable динамически выделяет его одному конкретному пиксельному конвейеру для одного запуска и освобождает его впоследствии.

Очерёдность на обработку во многом зависит от типа пиксельного конвейера. Изображения предварительного просмотра и создание миниатюр имеют низкое разрешение и могут быть обработаны быстро; изображение из центральной области более требовательное к разрешению и качеству, не говоря уже о пиксельном конвейере, выполняющем экспорт файла.

Параметр конфигурации "opencl_device_priority" содержит строку со следующей структурой:

a,b,c.../k,l,m.../o,p,q.../x,y,z...

Каждая буква представляет собой одно конкретное устройство OpenCL. В строке параметров есть четыре поля, разделенные косой чертой, которые представляют один тип пиксельного конвейера. "a, b, c .." определяют устройства, которым разрешено обрабатывать пиксельный конвейер изображения из центральной области. Аналогично, устройства "k, l, m ..." могут обрабатывать пиксельный конвейер изображений предварительного просмотра, устройства "o, p, q ..." пиксельный конвейер экспортируемых изображений и, наконец, устройства "x, y, z .." пиксельный конвейер создания миниатюр. Пустое поле означает, что ни одно устройство OpenCL не может обслуживать этот тип пиксельного конвейера.

Darktable имеет внутреннюю систему нумерации, где первое доступное устройство OpenCL получит номер "0". Все дальнейшие устройства нумеруются последовательно. Этот номер вместе с именем устройства отображается при запуске darktable с помощью команды "darktable -d opencl". Вы можете указать устройство либо по номеру, либо по имени (верхний/нижний регистр и пробелы не имеют значения). Если у вас несколько устройств - все с одинаковым именем, вам нужно использовать номера устройств, чтобы их отличить.

Указатель устройства может иметь префикс с восклицательным знаком "!", в этом случае устройство будет исключено из обработки этого пиксельного конвейера. Вы также можете указать звездочку "*" в качестве подстановочного символа, заменяя указание на все устройства, которые не были указаны явно ранее в этой группе.

Порядок последовательности в пределах группы имеет значение. Darktable будет читать список слева направо, и всякий раз, когда он пытается выделить устройство OpenCL пиксельному конвейеру, он будет сканировать устройства в этом порядке, беря первое свободное устройство, которое найдёт.

Если пиксельный конвейер должен быть запущен, а все графические процессоры в соответствующей группе заняты, то darktable по умолчанию автоматически обработает изображение на CPU. Вы можете принудительно обрабатывать на GPU, предварив список разрешенных устройств знаком плюс "+". Darktable не будет использовать центральный процессор и приостановит обработку до тех пор, пока не будет доступно следующее устройство OpenCL.

Значение параметра darktable по умолчанию для "opencl_device_priority":

*/!0,*/*/*

Любому обнаруженному устройству OpenCL разрешено обрабатывать изображение из центральной области. Первому устройству OpenCL (0) не разрешено обрабатывать пиксельный конвейер предварительного просмотра. Как следствие, если в системе существует только один графический процессор, предварительный просмотр пиксельного конвейера всегда обрабатывается на центральном процессоре, сохраняя ваш единственный GPU исключительно для более требовательного к ресурсам изображения из центральной области. Это разумная настройка для большинства систем. Для экспорта и миниатюр ограничений нет.

По умолчанию это хороший выбор, если у вас есть только одно устройство. Если же у вас несколько устройств, то это будет разумной отправной точкой. Однако, поскольку ваши устройства могут иметь совершенно разные вычислительные мощности, то имеет смысл обдумать это и оптимизировать ваш список приоритетов.

Вот пример. Предположим, у нас есть система с двумя устройствами: быстрый Radeon HD7950 и более старый и медленный GeForce GTS450. Darktable (запущенный командой "darktable -d opencl") будет сообщать о следующих устройствах:

[opencl_init] successfully initialized.
[opencl_init] here are the internal numbers and names of
OpenCL devices available to darktable:
[opencl_init] 0 "GeForce GTS 450"
[opencl_init] 1 "Tahiti"
[opencl_init] FINALLY: opencl is AVAILABLE on this system.

Таким образом, GeForce GTS 450 определяется как первое устройство; Radeon HD7950 ("Tahiti") как второе. Этот порядок обычно не изменяется, если не изменена конфигурация оборудования или драйвера. Но лучше использовать имена устройств, которые не могут измениться, а не номера.

Поскольку GTS450 работает медленнее, чем HD7950, оптимизированный параметр opencl_device_priority может выглядеть так:

!GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*

GTS450 явно исключается из обработки пиксельного конвейера центральной области; для обработки зарезервированы "все" другие устройства (например, HD7950/Tahiti). Для пиксельного конвейера предварительного просмотра значения противоположные. Здесь Tahiti исключается, так что только GTS450 будет разрешено выполнять эту работу.

Для экспорта файлов и создания миниатюр мы хотим использовать все доступные устройства. Тем не менее, darktable должен сначала определить, свободно ли устройство Tahiti, потому что оно быстрее. Если это не так, проверяются все остальные устройства - на самом деле только GTS450.

Комментариев нет:

Отправить комментарий