Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 14:15
Оценка:
Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).
Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.
Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

Кто-нибудь видел такие библиотеки/алгоритмы?
быстрый zip
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: quodum  
Дата: 27.12.10 14:21
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


Поглядите тут, может что пригодится: Rd Ross's Compression Crypt
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 27.12.10 14:25
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?

попробуй PPM алгоритмы и лучше задай это вопрос на compression.ru
Sic luceat lux!
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kluev  
Дата: 27.12.10 14:34
Оценка: 1 (1) +1
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


LZO

http://www.oberhumer.com/opensource/lzo/
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: bobik1  
Дата: 27.12.10 14:35
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


А чем zlib не подходит? На практике, он даже на слабеньких КПК быстро сжимает пакеты.
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: winston Россия  
Дата: 27.12.10 14:35
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


QuickLZ
Автор: AMogil
Дата: 14.01.07
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 14:41
Оценка:
Здравствуйте, bobik1, Вы писали:
B>А чем zlib не подходит? На практике, он даже на слабеньких КПК быстро сжимает пакеты.

Как раз текущая реализация основана на zlib.
Его исходники уже давно и успешно использовались в других проектах. Но для одного конкретного проекта понадобилось встроить сжатие данных. Взял тот код zlib, что уже был — результат по скорости оказался неудовлетворительным.
Re[3]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: bobik1  
Дата: 27.12.10 15:06
Оценка:
_RL>Как раз текущая реализация основана на zlib.
_RL>Его исходники уже давно и успешно использовались в других проектах. Но для одного конкретного проекта понадобилось встроить сжатие данных. Взял тот код zlib, что уже был — результат по скорости оказался неудовлетворительным.

Для этого существуют системные требования. Пишите в документации, что машина с такой то конфигурацией поддерживает столько то одновременных подключений.
Я например сколько не экспериментировал, так и не добился существенного прироста в производительности и остановился на старом проверенном zlib, оптимальном по показателям скорость — уровень сжатия.
Re[4]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 15:30
Оценка:
Здравствуйте, bobik1, Вы писали:
B>Для этого существуют системные требования. Пишите в документации, что машина с такой то конфигурацией поддерживает столько то одновременных подключений.

К сожалению, в данном случае это не пройдет. Есть два варианта — или скорость работы на текущих серверах удовлетворительна, или нет.
На данный момент ни zlib (около 12 МБ/сек), ни только что протестированный мной quickLZ (порядок тот же, около 12-14 МБ/сек) не удовлетворяют.
Будем искать дальше...

B>Я например сколько не экспериментировал, так и не добился существенного прироста в производительности и остановился на старом проверенном zlib, оптимальном по показателям скорость — уровень сжатия.


В моем случае степень сжатия не так важна — данные текстово-цифровые и весьма разреженные. Но вот по скорости достойных вариантов пока не нашел, смотрю по разным ссылкам.
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Muxa  
Дата: 27.12.10 16:15
Оценка:
а ты как тестируешь? что пакуешь?
конкретные циферки от этого сильно зависят.

я тут проверил архиватор AIN (написан на C/ASM).
дал ему файл с текстом "quick brown fox jumps over a lazy dog" размером один гигабайд пожевать.
он выплюнул 4-метровый архив через 40 сек. (25 MB/s).
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: npak Россия  
Дата: 27.12.10 16:21
Оценка: 1 (1)
Здравствуйте, _RL_, Вы писали:


_RL>К сожалению, в данном случае это не пройдет. Есть два варианта — или скорость работы на текущих серверах удовлетворительна, или нет.

_RL>На данный момент ни zlib (около 12 МБ/сек), ни только что протестированный мной quickLZ (порядок тот же, около 12-14 МБ/сек) не удовлетворяют.
_RL>Будем искать дальше...

_RL>В моем случае степень сжатия не так важна — данные текстово-цифровые и весьма разреженные. Но вот по скорости достойных вариантов пока не нашел, смотрю по разным ссылкам.


Для какого уровня сжатия вы тестировали zlib? скорость сжатия меняется в разы при изменении уровня сжатия.
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: sch  
Дата: 27.12.10 16:58
Оценка: +1
_RL>В моем случае степень сжатия не так важна — данные текстово-цифровые и весьма разреженные. Но вот по скорости достойных вариантов пока не нашел, смотрю по разным ссылкам.

Возможно вам будет лучше написать кастомный алгоритм сжатия именно для ваших данных, он может оказаться в разы быстрее и лучше сжимать чем алгоритмы общего назначения.
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: uzhas Ниоткуда  
Дата: 27.12.10 18:56
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?

все же рекомендую вам осилить zlib еще разок
покрутите настройки (уровни сжатия), по дефолту там уровень 6 вроде, максимальный уровень 9
аккуратно свой код проверьте, чтобы убедиться, что именно zlib тормозит, а не ваша обвязка
если он не подходит, то вам уже надо более четко сформулировать какого формата данные и под этот формат искать архиватор
для видео — это кодеки, для музыки — другие кодеки, для текстов — это конкретные архиваторы
еще можете архиватор Булата поюзать http://www.freearc.org/ (все-таки реклама реально зомбирует, булат, почисти подпись )
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: c-smile Канада http://terrainformatica.com
Дата: 27.12.10 19:20
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


Это вот просто:
http://rsdn.ru/forum/cpp.applied/962907.1.aspx
Автор: c-smile
Дата: 24.12.04

и по идее должно быть быстро.
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 20:40
Оценка:
Здравствуйте, uzhas, Вы писали:

U>все же рекомендую вам осилить zlib еще разок

U>покрутите настройки (уровни сжатия), по дефолту там уровень 6 вроде, максимальный уровень 9
U>аккуратно свой код проверьте, чтобы убедиться, что именно zlib тормозит, а не ваша обвязка
U>еще можете архиватор Булата поюзать http://www.freearc.org/ (все-таки реклама реально зомбирует, булат, почисти подпись )

Zlib крутил по всякому, ставил все варианты, даже 1 уровень... Допускаю, что он был собран изначально не слишком качественно, это у нас другой коллега собирал, еще лет 5 назад. Он там подкручивал чего-то, адаптировал...

U>если он не подходит, то вам уже надо более четко сформулировать какого формата данные и под этот формат искать архиватор

U>для видео — это кодеки, для музыки — другие кодеки, для текстов — это конкретные архиваторы

Данные — из базы данных, какие обычно там данные и лежат — строки, числа, даты и т.п.
Бывают сильно разреженные таблицы, бывают плотные. Как обычно.
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: TimurSPB Интернет  
Дата: 27.12.10 20:55
Оценка:
CS>http://rsdn.ru/forum/cpp.applied/962907.1.aspx
Автор: c-smile
Дата: 24.12.04

Какая реализация! Столько указателей и magic numbers. Чую уязвимости есть.
И все таки я за zlib. Проверенное временем решение, правда и там по безопасности критические вещи всплывали.
Make flame.politics Great Again!
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: K13 http://akvis.com
Дата: 28.12.10 06:24
Оценка:
_RL>>Быстродействие — ключевой параметр.

K>LZO

K>http://www.oberhumer.com/opensource/lzo/

Именно. Самый быстрый пакер из всех что я видел.
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kluev  
Дата: 28.12.10 08:07
Оценка: +1
Здравствуйте, _RL_, Вы писали:

_RL>Здравствуйте, bobik1, Вы писали:

B>>Для этого существуют системные требования. Пишите в документации, что машина с такой то конфигурацией поддерживает столько то одновременных подключений.

_RL>К сожалению, в данном случае это не пройдет. Есть два варианта — или скорость работы на текущих серверах удовлетворительна, или нет.

_RL>На данный момент ни zlib (около 12 МБ/сек), ни только что протестированный мной quickLZ (порядок тот же, около 12-14 МБ/сек) не удовлетворяют.
_RL>Будем искать дальше...

Что-то маленькая скорость получается. Может проблема уже не в копрессоре, а например в неправильном выделении памяти через стандартный heap?
Re[6]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 28.12.10 08:29
Оценка:
Здравствуйте, Kluev, Вы писали:
K>Что-то маленькая скорость получается. Может проблема уже не в копрессоре, а например в неправильном выделении памяти через стандартный heap?

Чорд. Неправильная методика тестирования при параллельном выполнении была

Текущее положение такое:
MiniLZO ~40 мбайт/сек
QuickLZ ~55 мбайт/сек.

Соответственно, пока остановлюсь на последнем варианте. С нового года попробую потестировать другие.
Спасибо всем!!!
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kerbadun  
Дата: 03.01.11 18:45
Оценка:
K>LZO

K>http://www.oberhumer.com/opensource/lzo/


Если не ошибаюсь, на современных компьютерах оно работает быстрее, чем memcpy.

Когда он умрет, его мозг заспиртуют в стакане
Re[3]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: CreatorCray  
Дата: 03.01.11 23:14
Оценка:
Здравствуйте, Kerbadun, Вы писали:

K>>http://www.oberhumer.com/opensource/lzo/


K>Если не ошибаюсь, на современных компьютерах оно работает быстрее, чем memcpy.

Несколько сомнительно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kerbadun  
Дата: 03.01.11 23:48
Оценка:
K>>>http://www.oberhumer.com/opensource/lzo/
K>>Если не ошибаюсь, на современных компьютерах оно работает быстрее, чем memcpy.
CC>Несколько сомнительно.

Не уверен на 100% насчет именно этого алгоритма, но данные были получены экспериментально и довольно легко объяснимы: общее количество памяти, которое нужно прочитать/записать у memcpy больше, а процессор работает очень быстро и не вносит большого вклада, то есть все упирается в скорость памяти. Закономерно получается быстрее.

Я конечно, тоже сначала офигел, когда увидел цифры ("Э-э, погодите, memcpy медленнее?! Но оно же просто копирует!").

Когда он умрет, его мозг заспиртуют в стакане
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: CreatorCray  
Дата: 03.01.11 23:59
Оценка:
Здравствуйте, Kerbadun, Вы писали:

K>>>>http://www.oberhumer.com/opensource/lzo/

K>>>Если не ошибаюсь, на современных компьютерах оно работает быстрее, чем memcpy.
CC>>Несколько сомнительно.

K>Не уверен на 100% насчет именно этого алгоритма, но данные были получены экспериментально и довольно легко объяснимы: общее количество памяти, которое нужно прочитать/записать у memcpy больше

Считать как минимум столько же.
Записать да, меньше.
Но обработка она всё равно не настолько бесплатная.

K>Я конечно, тоже сначала офигел, когда увидел цифры ("Э-э, погодите, memcpy медленнее?! Но оно же просто копирует!").

У них на сайте:

Here are some original timings done on an Intel Pentium 133. Multiply by a constant factor for modern machines.

* memcpy(): ~60 MB/sec
* LZO1X decompression in C: ~16 MB/sec
* LZO1X decompression in optimized assembler: ~20 MB/sec
* LZO1X-1 compression: ~5 MB/sec

Таблица с результатами в их же документации тоже особо не блещет.

Где можно скачать сурсы теста, на котором можно убедиться в тотальном разрывании memcpy на немецкий крест?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: CreatorCray  
Дата: 04.01.11 00:13
Оценка:
Здравствуйте, Kerbadun, Вы писали:

K>>>>http://www.oberhumer.com/opensource/lzo/

K>>>Если не ошибаюсь, на современных компьютерах оно работает быстрее, чем memcpy.
CC>>Несколько сомнительно.

K>Не уверен на 100% насчет именно этого алгоритма, но данные были получены экспериментально и довольно легко объяснимы: общее количество памяти, которое нужно прочитать/записать у memcpy больше, а процессор работает очень быстро и не вносит большого вклада, то есть все упирается в скорость памяти. Закономерно получается быстрее.


Вики про него говорит:

On modern architectures, decompression is very fast; in non-trivial cases able to exceed the speed of a straight memory-to-memory copy due to the reduced memory-reads.


Насчёт существенного буста скорости на минимизации чтения для non-trivial cases для LZ несколько сомнительно.
Похоже больше на то, что сжатый текст весь сидит в кэше, cache miss при распаковке не происходит и потому доставание из словаря дёшево на чтении.
Надо тест.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Аноним  
Дата: 04.01.11 19:40
Оценка:
Здравствуйте, _RL_, Вы писали:

Вообще от алгоритм от данных зависит, есть например http://drobotenko.com/compres.html для аудио
Re[3]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: c-smile Канада http://terrainformatica.com
Дата: 04.01.11 20:06
Оценка:
Здравствуйте, TimurSPB, Вы писали:

CS>>http://rsdn.ru/forum/cpp.applied/962907.1.aspx
Автор: c-smile
Дата: 24.12.04

TSP>Какая реализация! Столько указателей и magic numbers. Чую уязвимости есть.

Зато "An Extremely Fast Data Compression Algorithm"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.