Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
Вопрос простой, почему код ниже скомпилированный в delphi 7 выполняется за 2.125 секунды, а Delphi 10 за 22.703, более чем в 10 раз дольше. Simple.jpg картинка размером 10000 на 7000 (для примера).

  StartTime := GetTickCount;
    Picture:=TPicture.Create;
    bmp:=TBitmap.Create;

    Picture.LoadFromFile('c:\Simple.jpg');
    bmp.Assign(Picture.Graphic); //по сути всё время выполнения в данной строчке

    Picture.Free;

   StartTime := GetTickCount - StartTime;
   Label1.Caption := Format('Выполнено за %.2u mS', [StartTime]);


Сообщение было отредактировано: 22 июл 20, 22:45
22 июл 20, 22:46    [22172007]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
DimaBr
Member

Откуда:
Сообщений: 11808
F7 не даёт ответ ?
22 июл 20, 22:50    [22172010]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
DimaBr
F7 не даёт ответ ?

Все 22 секунды это:
bmp.Assign(Picture.Graphic);

Можно, конечно, внутрь залезть, но не думаю, что я там смогу понять, что да почему.
Во всех примерах в "интернетах" примерно так подгружают Jpeg, ну или сторонние библиотеки.
22 июл 20, 22:53    [22172011]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
rgreat
Member

Откуда:
Сообщений: 6068
Андрей Игоревич
Вопрос простой, почему код ниже скомпилированный в delphi 7 выполняется за 2.125 секунды, а Delphi 10 за 22.703, более чем в 10 раз дольше. Simple.jpg картинка размером 10000 на 7000 (для примера).

  StartTime := GetTickCount;
    Picture:=TPicture.Create;
    bmp:=TBitmap.Create;

    Picture.LoadFromFile('c:\Simple.jpg');
    bmp.Assign(Picture.Graphic); //по сути всё время выполнения в данной строчке

    Picture.Free;

   StartTime := GetTickCount - StartTime;
   Label1.Caption := Format('Выполнено за %.2u mS', [StartTime]);
10000 на 7000 - это почти 300 мегов. Что-то в memory manager-е?

64-битное приложение не пробовали?

Сообщение было отредактировано: 22 июл 20, 22:55
22 июл 20, 22:57    [22172012]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
rgreat
10000 на 7000 - это почти 300 мегов. Что-то в memory manager-е?


В Jpeg около 10 Мб, в BMP и памяти где-то 100.
rgreat

64-битное приложение не пробовали?

эээ... 0.563 секунды. Почему...
Ничего не понимаю.
Почему такая разница в 32 и 64, я в эту сторону даже и не думал смотреть...
22 июл 20, 23:02    [22172016]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
zedxxx
Member

Откуда:
Сообщений: 17
Скорость сравниваете для релизных сборок?
22 июл 20, 23:03    [22172017]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
zedxxx
Скорость сравниваете для релизных сборок?

Delphi? Торрент эдишн, вроде релизные 7ка точно, 10ка (Version 26.0.36039.7899).

Сообщение было отредактировано: 22 июл 20, 23:04
22 июл 20, 23:06    [22172020]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
zedxxx
Member

Откуда:
Сообщений: 17
Нет. Вы проект собираете в Release или Debug версии?
22 июл 20, 23:06    [22172023]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
zedxxx
Нет. Вы проект собираете в Release или Debug версии?

Сейчас прогнал в Reliase - ничего не поменялось. Но разница в 32 и 64 конечно колоссальная.

Сообщение было отредактировано: 22 июл 20, 23:06
22 июл 20, 23:08    [22172024]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
...

Сообщение было отредактировано: 22 июл 20, 23:17
22 июл 20, 23:19    [22172029]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
zedxxx
Member

Откуда:
Сообщений: 17
Не знаю, как было в Delphi 7, а в современных версиях, Delphi использует сишную libjpeg для работы с jpeg. Причем, для win32 они компилируют её своим старым С++ компилятором, а для win64 компиляция производится уже LLVM компилятором. Отсюда и возможная разница в скорости win32/win64.

Если вам критична скорость, то посмотрите в сторону libjpeg-turbo (например, вот с этой обёрткой).
22 июл 20, 23:28    [22172033]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
DimaBr
Member

Откуда:
Сообщений: 11808
тынц - через TWICImage 5 сек на XE2, через TJPEGImage - 22 сек
22 июл 20, 23:37    [22172038]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 319
zedxxx
Не знаю, как было в Delphi 7, а в современных версиях, Delphi использует сишную libjpeg для работы с jpeg. Причем, для win32 они компилируют её своим старым С++ компилятором, а для win64 компиляция производится уже LLVM компилятором. Отсюда и возможная разница в скорости win32/win64.

Если вам критична скорость, то посмотрите в сторону libjpeg-turbo (например, вот с этой обёрткой).

Ясно. Спасибо.
DimaBr
тынц - через TWICImage 5 сек на XE2, через TJPEGImage - 22 сек

Спасибо, потыкаю Wic.
22 июл 20, 23:46    [22172042]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12798
Андрей Игоревич
Вопрос простой, почему код ниже скомпилированный в delphi 7 выполняется за 2.125 секунды, а Delphi 10 за 22.703, более чем в 10 раз дольше.
Потому что TJPEGImage - г..но даже в D7. И по закону жанра стало полным г..ном.
Даже GDI+, явно не заточенный под быстродействие, читает в разы быстрее.
23 июл 20, 01:51    [22172062]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Sapersky
Member

Откуда:
Сообщений: 66
Да, GDI+ в последних Виндах хорошо подтянули, уже не так сильно остаёт от libjpeg-turbo (раза в полтора).
WIC не пробовал и не вижу в нём большого смысла - загрузка файлов там наверняка та же самая, что и в GDI+, но на XP не будет работать (если вдруг понадобится).
Замедление стандартного модуля в 10 раз это конечно странно, возможно сишные obj (которые собст-но и грузят картинку) по ошибке скомпилировали в дебаге.
23 июл 20, 13:25    [22172308]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12798
Меня все одна мысль терзает: почему бы в движки видеокарт, куда всякую фигню пихают, не вставить прямую отрисовку jpeg-ов? По схеме: кидаешь jpeg (после Хаффман-раскодировки) в видеопамять, и он рисуется на поверхности.
25 июл 20, 22:08    [22173666]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50850

Можно и до. Видюха и с распаковкой справилась бы с её-то многоядерностью...

Posted via ActualForum NNTP Server 1.5

25 июл 20, 22:12    [22173667]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12798
Dimitry Sibiryakov
Можно и до. Видюха и с распаковкой справилась бы с её-то многоядерностью...
ЕМНИП, распаковка там не параллелится.
25 июл 20, 22:16    [22173668]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 2904
Соколинский Борис,

Текстуры сжимают другими алгоритмами
Собственно они сжатыми в видеопамяти и хранятся
25 июл 20, 23:37    [22173682]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
rgreat
Member

Откуда:
Сообщений: 6068
https://www.fastvideo.ru/info/cuda/cuda-jpeg-decoder.htm

Распаковка JPEG:
GeForce GTX 580 (512 ядер) - 3 ГБайт в секунду

Сообщение было отредактировано: 25 июл 20, 23:52
25 июл 20, 23:54    [22173689]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12798
rgreat
GeForce GTX 580 (512 ядер) - 3 ГБайт в секунду
ЧТД.
Теперь осталось уговорить MS добавить это в стандарт DirectX.
26 июл 20, 08:06    [22173733]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 2904
Соколинский Борис,

ASTC даёт сжатие до 32 раз
Зачем им jpeg )
26 июл 20, 09:31    [22173746]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 2904
rgreat,

автор
Декодирование сжатых изображений на видеокарте имеет смысл только при условии распараллеливания задачи. Если алгоритм декодирования последовательный, то использовать видеокарту не имеет смысла, поскольку в этом случае CPU будет во много раз быстрее, чем GPU. Для реализации возможности распараллеливания декодирования нужно ещё на этапе кодирования ставить специальные маркеры перед группами блоков 8х8.
26 июл 20, 09:35    [22173748]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 2904
Кстати в проектах Tiny.Library и BrainMM я освоил подход, когда Си/C++ код компилируется в obj файлы сразу под несколько платформ, и относительно легко линкуется в Delphi, FreePascal, C++Builder. Там есть уже набор утилит, скриптов, наборов опций, чтобы осуществлять всю эту рутину. Удаётся даже поддерживать register-соглашение, которого по умолчанию в Си/С++ нет.

Это я к чему говорю. Если кто-то хочет использовать статически прилинкованный код, написанный на Си/С++, например для конвертации jpeg, png, для поддержки TLS того же самого - обращайтесь - я буду помогать чем смогу.
26 июл 20, 11:18    [22173763]     Ответить | Цитировать Сообщить модератору
 Re: Очень долгая распаковка Jpeg в Delphi 10  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12798
SOFT FOR YOU
rgreat,

автор
Декодирование сжатых изображений на видеокарте имеет смысл только при условии распараллеливания задачи. Если алгоритм декодирования последовательный, то использовать видеокарту не имеет смысла, поскольку в этом случае CPU будет во много раз быстрее, чем GPU. Для реализации возможности распараллеливания декодирования нужно ещё на этапе кодирования ставить специальные маркеры перед группами блоков 8х8.
Хаффман-декодирование можно и на CPU делать (о чем я сразу написал),по сравнению с DCT оно копеечное.
26 июл 20, 11:40    [22173767]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить