|
|
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Кстати в проектах Tiny.Library и BrainMM я освоил подход, когда Си/C++ код компилируется в obj файлы сразу под несколько платформ, и относительно легко линкуется в Delphi, FreePascal, C++Builder. Там есть уже набор утилит, скриптов, наборов опций, чтобы осуществлять всю эту рутину. Удаётся даже поддерживать register-соглашение, которого по умолчанию в Си/С++ нет. Это я к чему говорю. Если кто-то хочет использовать статически прилинкованный код, написанный на Си/С++, например для конвертации jpeg, png, для поддержки TLS того же самого - обращайтесь - я буду помогать чем смогу. - следующий! (С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 11:41 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, В твоём случае мимопроходящий ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 11:43 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Это понятно. Просто кроме jpeg есть и другие алгоритмы с потерей качества На видюхах они давно используются Более того, на них даже FPS больше, потому что меньше памяти тягается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 11:46 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, jpeg - формат, заточенный исключительно под фотографии. Для искусственно генерируемых растров, естественно, найдется что-то более эффективное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 12:02 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Почему искусственно? Огромное количество текстур срисовывается или сфотографируется с реальных объектов Так что не совсем согласен А что насчёт jpeg-а - он неплохо кодируется и CPU. Просто почему Delphi 7 делает это в разы быстрее Delphi XE 10 - отдельный вопрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 12:28 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Но если у библиотеки интерфейс на C++, т.е. нужно вызывать методы классов, то как ты её прилинкуешь? Например OpenCV последних версий. А для своего кода на Си по-моему удобнее dll, отлаживать проще. По теме сжатия картинок, забавно, что даже на CPU jpeg остаётся самым быстрым форматом сжатия (если не брать совсем уж примитив вроде RLE) за счёт хорошо вылизанных библиотек. Мне вот был бы интересен алгоритм сжатия БЕЗ потерь, который работал бы сопоставимо по скорости с libjpeg-turbo - а нет такого. Самый быстрый из тех, что я накопал называется ImageZero, и он всё равно в 2-3 раза медленнее. Хотя возможно это проблема эталонной реализации от автора, надо почитать описание и прикинуть, можно ли туда приспособить SIMD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 13:33 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky, Dll в миллиард раз проще разумеется Но если ты можешь прилинковать obj - автоматически снимается проблема развертывания, версии компонентов, конфликтов и прочей фигни Если код на С++ - есть возможность экспортировать Си-функции Если есть классы - можно делать обёртки Но основная проблема - это зависимости То есть стандартные функции типа malloc, вызов API, внутренние типа __chkstk_ms С этими зависимостями бороться сложно, но можно Та же библиотека jpeg, или zlib - хорошие примеры Я где-то видел OpenSSL в обьектниках. Но не для всех платформ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 14:15 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky По теме сжатия картинок, забавно, что даже на CPU jpeg остаётся самым быстрым форматом сжатия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 15:13 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, PNG это обычный zlib. Скорость от уровня сжатия зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 15:25 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Если код на С++ - есть возможность экспортировать Си-функции Если есть классы - можно делать обёртки А Clang на Винду ты ставил? У меня поставился только через msys2, а официальный инсталлятор при попытке что-то скомпилировать выдавал ошибку линкера. Я так понял - из-за того, что Clang отчасти использует заголовки и либы от gcc, и нужно их в стиле Линукса/msys2 ставить в одну папку. Соколинский Борис PNG по поим замерам быстрее раза в 3. Какая картинка, какая библиотека? rgreat PNG это обычный zlib. Скорость от уровня сжатия зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 15:45 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky Соколинский Борис PNG по поим замерам быстрее раза в 3. Какая картинка, какая библиотека? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 16:00 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Если со стандартным модулем jpeg сравнивал (или с jpeg из старого GDI+), или картинка была подходящая для Png, то может Png и был быстрее. SOFT FOR YOU, Смотрел TinyMove - ты там насочинял на ассемблере, а между тем всякий нормальный Си-компилятор (gcc/clang/icc) тебе что-то подобное сгенерирует сам из максимально тупого кода, можешь проверить в godbolt. Возможно, неидеально сгенерирует (напр. Clang тупит - перекладывает в 8-байтовом цикле по 1 байту), но для меня это компенсируется простотой кода и скоростью разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 16:11 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
rgreat Соколинский Борис, PNG это обычный zlib. Скорость от уровня сжатия зависит. Не обычный Мне кажется если чисто zlib-ом жать - получится быстрее Там разделение на чанки - я думаю, это замедляет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 16:15 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky SOFT FOR YOU Если код на С++ - есть возможность экспортировать Си-функции Если есть классы - можно делать обёртки А Clang на Винду ты ставил? У меня поставился только через msys2, а официальный инсталлятор при попытке что-то скомпилировать выдавал ошибку линкера. Я так понял - из-за того, что Clang отчасти использует заголовки и либы от gcc, и нужно их в стиле Линукса/msys2 ставить в одну папку. Я только под виндой и компилирую Но так как имею дело с низкоуровневым кодом без зависимостей - окружение не настраивал Ты прав, эта большая тема Я создавал тему на геймдеве, мне там немного помогли, но дело с мёртвой точки не сдвинулось: https://gamedev.ru/flame/forum/?id=243821 Более того, я нанимал чувака, чтобы он сделал то же самое - но до результата не дошло. Остались несколько статей на вики в моём внутреннем репозитории. Если интересно почитать или можешь продвинуться в вопросе - могу предоставить права, переходи в личку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 16:24 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky Смотрел TinyMove - ты там насочинял на ассемблере, а между тем всякий нормальный Си-компилятор (gcc/clang/icc) тебе что-то подобное сгенерирует сам из максимально тупого кода, можешь проверить в godbolt. Возможно, неидеально сгенерирует (напр. Clang тупит - перекладывает в 8-байтовом цикле по 1 байту), но для меня это компенсируется простотой кода и скоростью разработки. А я преимущественно низкоуровневый на Clang и пишу Очень удобно, условно один код, нажал скриптик - собралось сразу под 10 платформ: 5 операционных систем по 2 битности GCC такой штукой к сожалению не обладает И IDE не нужно - фигачу всё в годболте На ассемблер перехожу неохотно и исключительно вынуждено К сожалению Clang не всегда идеально оптимизирует код (и GCC кстати эквивалентный код выдаёт) Насчёт реализации: там ассемблер только под x86 и x64. Под ARM-ы только на Си Я сравнивал по производительности высокоуровневый вариант с ассемблером - было процентов на 20 медленнее Я 2 недели эту функцию писал, а за основу (на малых размерах) взял код Шарахова из стандартного Move для x86 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 16:32 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ладно, почитаю тему на Геймдеве, но сейчас нет настроения влезать в это с головой. В целом меня и msys2 устраивает, и кстати, там можно получить более новую версию gcc в сравнении с mingw на sourceforge. Кросс-компиляция интересна разве что между x86 и x64, а то приходится ставить отдельно 2 версии компилятора. Но это не такая большая проблема. По TinyMove, а 20% - это на больших или малых размерах? Если на малых, то большие мне кажется можно отдать на откуп компилятору. Простыню из (v)movups он должен сгенерировать без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 17:02 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky, А мне там вроде msys2 и посоветовали Но до результата не дошло - билд сервер не был настроен В любом случае будет желание посотрудничать по какому-либо направлению - милости прошу 20% было на размерах до 48 байт По сути это и есть самые ходовые размеры TinyMove - он ведь не для Си/С++ кода, он в первую очередь для Delphi/FreePascal, как аналог Move Делать медленнее стандартного Move не вижу смысла А так нормально получилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2020, 17:10 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Да я не спорю, что нормально. Но 20% дают табличные джампы на маленьких размерах, а на ассемблере у тебя написан длинный move, который вроде как ничего (?) в сравнении с высокоуровневой версией не даёт. То есть писать его на ассемблере было необязательно - вот это я хотел сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 14:40 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky, Не, там всё в комплексе Главный инсайт - это важность выравнивания кода на 16 и 64 байта. Если заметишь - у меня там много nop-ов. Каждый nop выверен ) Ещё важна очередность сравнений и джампов. Поменяешь два джампа местами - для некоторых кейсов производительность просаживается Для больших размеров стандартных 3 регистров не хватает - нужно пушить дополнительные. Но если это делать на высоком уровне - регистры пушатся в самом начале функции, а не на месте. Что раздувает код, жрет лишние такты Для больших кусков case может выполняться стандартно через массив указателей. А я этого избежал. Из того рассчета, что каждый movups со смещением занимает 4 байта. Поэтому для Win64 я сваплю Count в rax, иначе movups занимает 5 байт Кстати интересное наблюдение. movups даёт на выровненных данных такую же производительность, что и movaps ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 14:58 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky, Насчёт отдельно большого мува на высоком уровне Я замерял, есть разница Может даже в районе 5% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 15:00 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
У png нет настраиваемой степени сжатия. Всегда одно - сжатие без потерь по алгоритму Deflate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 15:14 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
KreatorXXI, Я думаю есть. Разные редакторы выдают идентичный png разного размера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 15:17 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Ну если не лень за 5% гоняться, то конечно. А у меня обычная практика - в большом проекте оптимизируешь какую-то часть на 50%, и результирующее улучшение как раз 5%. А если оптимизируешь на 5%, то это вообще незаметно. Для выравнивания кода на высоком уровне есть директивы: https://easyperf.net/blog/2018/01/18/Code_alignment_issues https://easyperf.net/blog/2018/01/25/Code_alignment_options_in_llvm movups на выровненных данных = movaps начиная с первых Core i (Nehalem). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 16:01 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
Sapersky, Это Move Святое дело - гоняться даже за 5% ) Насчёт ссылок. У меня выравнивание функций 16 стоит. Некоторые я специально выравниваю на 64. Надо делать локальное выравнивание в некоторых местах. А не везде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 16:11 |
|
||
|
Очень долгая распаковка Jpeg в Delphi 10
|
|||
|---|---|---|---|
|
#18+
KreatorXXI У png нет настраиваемой степени сжатия. Всегда одно - сжатие без потерь по алгоритму Deflate. Этим алгоритмом можно сжимать с уровнем от 0 (без сжатия) до 9: Deflate encoder/compressor авторDuring the compression stage, it is the encoder that chooses the amount of time spent looking for matching strings. The zlib/gzip reference implementation allows the user to select from a sliding scale of likely resulting compression-level vs. speed of encoding. Options range from 0 (do not attempt compression, just store uncompressed) to 9 representing the maximum capability of the reference implementation in zlib/gzip. А, например, вот у этой библиотеки libdeflate есть целых 12 уровней , чтобы каждый мог подобрать себе идеальное соотношение скорость/размер архива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2020, 17:59 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39984363&tid=2038118]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 517ms |

| 0 / 0 |
