Кілька пристроїв

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

Важливо розуміти, як Darktable використовує пристрої OpenCL. Кожна послідовність обробки зображення – для перетворення вхідних даних у кінцевий вихід за допомогою стека історії – виконується в конвеєрі. Існує п’ять різних типів конвеєрів у Darktable. Один тип відповідає за обробку зображення в центральній панелі (або повного перегляду) в режимі темної кімнати, інший обробляє зображення попереднього перегляду (вікно навігації, також необхідне для гістограм та інших внутрішніх речей, які стосуються правильного виведення повного перегляду). Для показу другого вікна темної кімнати знадобиться ще один конвеєр попереднього перегляду. Кожен із цих трьох конвеєрів може працювати в будь-який час, і конвеєри повного та попереднього перегляду можуть працювати паралельно. Крім того, може бути кілька паралельних конвеєрів, що виконують експорт файлів, а також кілька паралельних конвеєрів, що генерують мініатюри. Якщо пристрій OpenCL доступний, Darktable динамічно розподіляє його для одного конкретного конвеєра для одного запуску і звільняє після цього.

Обчислювальні вимоги значно варіюються в залежності від типу виконуваного конвеєра. Зображення попереднього перегляду та мініатюри мають низьку роздільну здатність і можуть бути швидко оброблені, тоді як обробка зображення в центральній панелі або в другому вікні є більш вимогливою. Повноцінний експортний конвеєр ще більш вимогливий.

Параметр конфігурації “opencl_device_priority” містить рядок із такою структурою:

a,b,c.../d,e,f.../g,h,i.../j,k,l...,m,n,o...

Кожна буква представляє один конкретний пристрій OpenCL. У рядку параметрів є п’ять полів, розділених скісною рискою, кожне з яких представляє один тип конвеєра. a,b,c... визначає пристрої, яким дозволено обробляти конвеєр центрального (повного) зображення. Аналогічним чином пристрої d,e,f... можуть обробляти конвеєри попереднього перегляду, пристрої g,h,i... конвеєри експорту, пристрої j,k,l...конвеєри мініатюр і, нарешті, пристрої m,n,o... конвеєри попереднього перегляду для другого вікна. Порожнє поле означає, що жоден пристрій OpenCL не може обслуговувати цей тип конвеєра.

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

Специфікатор пристрою може мати префікс із знаком оклику !, у цьому випадку пристрій виключається з обробки заданого конвеєра. Ви також можете використовувати зірочку * як знак, що представляє всі пристрої, які раніше явно не згадувались у цій групі.

Порядок послідовності в групі має значення – Darktable читає список зліва направо і при спробі виділити пристрій OpenCL для конвеєра сканує пристрої в такому порядку, беручи перший знайдений вільний пристрій.

Якщо процес конвеєра скоро почнеться, а всі графічні процесори у відповідній групі зайняті, Darktable автоматично обробляє зображення на центральному процесорі за замовчуванням. Ви можете забезпечити обробку графічним процесором, поставивши знак “+” на початку списку дозволених графічних процесорів. У цьому випадку Darktable не використовуватиме центральний процесор, а призупинить обробку, поки не стане доступним наступний дозволений пристрій OpenCL.

За замовчуванням параметр Darktable для “opencl_device_priority” – */!0,*/*/*/!0,*.

Будь-якому виявленому пристрою OpenCL дозволено обробляти зображення в центральній панелі. Першому пристрою OpenCL (0) заборонено обробляти обидва конвеєри попереднього перегляду. Як наслідок, якщо у вашій системі доступний лише один графічний процесор, конвеєри попереднього перегляду завжди будуть оброблятися на центральному процесорі, зберігаючи ваш єдиний графічний процесор виключно для більш вимогливого центрального зображення. Це розумна установка для більшості систем. Жодні такі обмеження не застосовуються до конвеєрів експорту та мініатюр.

Це замовчування є хорошим вибором, якщо у вас лише один пристрій. Якщо у вас кілька пристроїв, це є розумною відправною точкою. Однак, оскільки ваші пристрої можуть мати різний рівень обчислювальної потужності, є сенс витратити трохи часу на оптимізацію списку пріоритетів.

Ось приклад. Припустимо, у нас є система з двома пристроями, швидким Nvidia Quadro RTX 4000 і старшим і повільнішим GeForce GTX 1050. 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       'NVIDIA GeForce GTX 1050'
[opencl_init]           1       'NVIDIA CUDA Quadro RTX 4000'
[opencl_init] FINALLY: opencl is AVAILABLE on this system.

із канонічними іменами, показаними вище, як nvidiagforcegtx1050 і nvidiacudaquadrortx4000

Тут GeForce GTX 1050 виявлено як перший пристрій, а Quadro RTX 4000 – другий. Зазвичай цей порядок не змінюватиметься, якщо не буде змінено апаратне забезпечення або конфігурацію драйвера, але краще використовувати імена пристроїв, а не номери, щоб бути в безпеці.

Оскільки GTX 1050 працює повільніше, ніж RTX 4000, оптимізований “opencl_device_priority” може виглядати так:

!nvidiagforcegtx1050,*/!nvidiacudaquadrortx4000,*/nvidiacudaquadrortx4000,*/nvidiacudaquadrortx4000,*/!nvidiacudaquadrortx4000.

GTX 1050 явно виключається з обробки конвеєра центрального зображення; це зарезервовано для “всіх” інших пристроїв (тобто RTX 4000). І навпаки, для конвеєра попереднього перегляду RTX 4000 виключається, тому виконувати цю роботу може лише GTX 1050.

Для експорту файлів та генерації мініатюр нам потрібні всі руки. Однак Darktable має спочатку перевірити, чи вільний пристрій RTX 4000, оскільки він швидше. Якщо він зайнятий, тоді перевіряються всі інші пристрої – насправді лише GTX 1050.

translations