пілотної частини я розповів про завдання як можна докладніше. Розповідь вийшов довгим і безпредметним — в ньому не було ні одного рядка коду. Але без розуміння завдання дуже складно займатися оптимізацією. Звичайно, деякі техніки можна застосовувати, маючи на руках тільки код. Наприклад, кешувати обчислення, скорочувати розгалуження. Але мені здається, що деякі речі без розуміння завдання просто ніколи не зробити. Це і відрізняє людину від оптимізуючого компілятора. Тому ручна оптимізація все ще відіграє величезну роль: у компілятора є тільки код, а у людини є розуміння завдання. Компілятор не може прийняти рішення, що значення "4" досить випадково, а людина може.

Нагадаю, що мова піде про оптимізацію операції ресайза зображення методом згорток у реально існуючій бібліотеці Pillow. Я буду розповідати про тих змінах, що я робив кілька років тому. Але це не буде повторення слово-в-слово: оптимізації будуть описані в порядку, зручному для оповідання. Для цих статей я зробив в репозиторії окрему гілку від версії 2.6.2 — саме з цього моменту і буде йти розповідь.
Читати далі →

Як я зробив найшвидший ресайз зображень. Частина 0

Привіт, мене звати Саша, я написав найшвидший ресайз зображень для сучасних процесорів х86. Я так стверджую, оскільки всі інші бібліотеки, які я зумів знайти і протестувати, виявилися повільніше. Я зайнявся цим завданням, коли працював над оптимізацією ресайза картинок на льоту Uploadcare. Ми вирішили відкрити код і в результаті з'явився проект Pillow-SIMD. Будь-хто з легкістю може використовувати його в додатку на мові Python.
Будь-код виконується на конкретному залозі і гарну оптимізацію можна домогтися, лише розуміючи його архітектуру. Всього я планую випустити 4 або 5 статей, в яких розповім як застосовувати знання архітектури заліза для оптимізації реальної задачі. Своїм прикладом я хочу спонукати вас оптимізувати інші прикладні задачі. Перші дві статті вийдуть протягом тижня, решта — по мірі готовності.
Читати далі →

Як ми зробили конвертер і плеєр для CinemaDNG на CUDA

На Хабре у мене вже було дві статті (1 і 2), обидві вони стосувалися реалізації швидкого стиснення зображень у форматі JPEG на CUDA. Тепер я б хотів розповісти про інший, набагато більш масштабне завдання — як ми зробили конвертер відео плеєр для серій DNG зображень на CUDA. При цьому ми отримали дуже високу швидкість роботи, тому що вся обробка вихідних даних у форматі DNG тепер виконується на відеокарті NVIDIA.


Початкове зображення у форматі DNG взято з сайту blackmagicdesign.com

Незважаючи на те, що в світі вже є дуже велика кількість конверторів RAW, які працюють з форматом DNG, ми вирішили зробити ще один, але дуже швидкий, який можна було б використовувати в тому числі для відбракування і сортування. Відео плеєри DNG теж є, але вони зазвичай працюють зі зменшеним дозволом, тому переглянути тільки що знятий у форматі DNG матеріал на повному дозволі — це проблема. За допомогою нашого конвертера ми зробили спробу опрацювати картинки настільки швидко, щоб вміти переглядати серії DNG зображень в режимі реального часу при повному дозволі. Природно, що крім швидкості необхідно було отримати прийнятну якість обробки і шумозаглушення, і мені здається, що нам це вдалося.

Читати далі →