Как стать автором
Обновить

Комментарии 5

Флаги компилятора типа -mavx2 ведь передаются при сборке объектного файла, а не библиотеки целиком. Вы можете сделать отдельные .c/.cpp файлы для оптимизированных функций, и компилировать с оптимизацией только их, в основной же функции только проверять флаги и вызывать ускоренные, если процессор и флаги компиляции позволяют.
Спасибо, очень дельное замечание, так действительно будет намно проще. Причем даже не нужно разные файлы, можно один и тот же с разными опциями комплировать и давать объектным файлам разные имена. Осталост только понять, можно ли это как-то встроить в систему сборки setuptools.
Кстати, в убунте по-дефолту сборка имейджмейджика с Q=16 (что логично, двойная точность на время обработки, потом обратно 8-бит на канал в результате). Вы могли бы посравнивать с ним, или в PIL нету такого режима? И я понимаю, что для этого нужно будет понаписать ещё немножко кода на ассемблере :)
Я специально для тестов собрал последнюю версию ImageMagick, а не ту которая идет в пакетах, и специально собрал с Q8, чтобы сравнение было более честным. Из пакетов работала еще чуть медленее.

К сожалению, в Pillow сейчас нет режима 16-битного RGB, есть только 32-битный одноканальный режим. То есть теоретически можно было разбить картинку на 3 отдельных канала и обрабатывать их по отдельности, но такой режим сейчас не ускорен SIMD и на практике вряд ли кто-то так делает.
Не совсем понял вашу проблему с SIMD и gcc.

Ведь в gcc (начиная с 4.9) можно указывать флаги оптимизации и target опции для куска исходного кода
с помощью `pragma`, а также можно указывать эти флаги для каждой функции отедльно, например так `static void calculate_sse(float *data, float scale, int size ) __attribute__ ((__target__ («no-avx»)));`
подробности можно найти здесь:

gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Attributes.html#Function-Attributes
gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Specific-Option-Pragmas.html

можно также просто как glibc делать — в нем есть всякие memcpy_avx каждый собран в отдельном единице трансляции.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.