кілька пристроїв
Планування роботи пристроїв 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 автоматично обробляє зображення на центральному процесорі за замовчуванням. Ви можете забезпечити обробку графічним процесором, поставивши знак “+” на початку списку дозволених графічних процесорів. У цьому випадку darktable не використовуватиме центральний процесор, а призупинить обробку, поки не стане доступним наступний дозволений пристрій OpenCL.
За замовчуванням параметр darktable для “opencl_device_priority” – */!0,*/*/*
.
Будь-якому виявленому пристрою OpenCL дозволено обробляти зображення в центрі. Першому пристрою OpenCL (0) заборонено обробляти конвеєр попереднього перегляду. Як наслідок, якщо у вашій системі доступний лише один графічний процесор, конвеєр попереднього перегляду завжди буде оброблятися на центральному процесорі, зберігаючи ваш єдиний графічний процесор виключно для більш вимогливого центрального зображення. Це розумна установка для більшості систем. Жодні такі обмеження не застосовуються до конвеєрів експорту та мініатюр.
Це замовчування є хорошим вибором, якщо у вас лише один пристрій. Якщо у вас кілька пристроїв, це є розумною відправною точкою. Однак, оскільки ваші пристрої можуть мати різний рівень обчислювальної потужності, є сенс витратити трохи часу на оптимізацію списку пріоритетів.
Ось приклад. Припустимо, у нас є система з двома пристроями, швидким 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.