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

It is important to understand how Ansel uses OpenCL devices. Each processing sequence of an image – to convert an input to the final output using a history stack – is run in a pixelpipe. There are four different types of pixelpipe in Ansel. One type is responsible for processing the center image view (or full view) in darkroom mode, another pixelpipe processes the preview image (navigation window). There can be one of each of these two pixelpipes running at any time, with the full and preview pixelpipes running in parallel. In addition there can be multiple parallel pixelpipes performing file exports as well as multiple parallel pixelpipes generating thumbnails. If an OpenCL device is available, Ansel dynamically allocates it to one specific pixelpipe for one run and releases it afterwards.

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

Параметр конфігурації “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 не може обслуговувати цей тип конвеєра.

Ansel has an internal numbering system, whereby the first available OpenCL device receives the number 0. All further devices are numbered consecutively. This number, together with the device name, is displayed when you start Ansel with Ansel -d opencl. You can specify a device either by number or by name (upper/lower case and whitespace do not matter). If you have more than one device with the same name you need to use the device numbers in order to differentiate them.

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

Sequence order within a group matters – Ansel will read the list from left to right and whenever it tries to allocate an OpenCL device to a pixelpipe it will scan the devices in that order, taking the first free device it finds.

If a pixelpipe process is about to be started and all GPUs in the corresponding group are busy, Ansel automatically processes the image on the CPU by default. You can enforce GPU processing by prefixing the list of allowed GPUs with a plus sign +. In this case Ansel will not use the CPU but rather suspend processing until the next permitted OpenCL device is available.

Ansel’s default setting for “opencl_device_priority” is */!0,*/*/*.

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

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

Here is an example. Let’s assume we have a system with two devices, a fast Radeon HD7950 and an older and slower GeForce GTS450. Ansel (started with Ansel -d opencl) will report the following devices:

1[opencl_init] successfully initialized.
2[opencl_init] here are the internal numbers and names of
3                          OpenCL devices available to Ansel:
4[opencl_init]           0       'GeForce GTS 450'
5[opencl_init]           1       'Tahiti'
6[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.

For file export and thumbnail generation we want all hands on deck. However, Ansel should first check whether the Tahiti device is free, because it’s faster. If it is not free, then all other devices – in fact only the GTS450 – are checked.