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

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

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

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

Pillow-SIMD

Прискорення операцій у 2.5 рази порівняно з Pillow і в 10 порівняно з ImageMagick

Pillow-SIMD — це «форк-послідовник» бібліотеки роботи з зображеннями Pillow (яка сама є форком бібліотеки PIL, нині покійної). «Послідовник» означає, що проект не стає самостійною, а буде оновлюватися разом з Pillow і мати ту ж нумерацію версій, тільки з суфіксом. Я сподіваюся більш-менш оперативно випускати версії Pillow-SIMD відразу після виходу версій Pillow.
Чому SIMD
Є кілька способів поліпшення продуктивності обробки зображень (та і всіх інших речей, напевно, теж).
  1. Можна використовувати більш кращі алгоритми, які дають такий же результат.
  2. Можна зробити більш швидку реалізацію існуючого алгоритму.
  3. Можна підключити більше обчислювальних ресурсів для рішення тієї ж задачі: додаткові ядра CPU, GPU.

Читати далі →