Процесор-адаптивне стиснення


10

Дозвольте припустити, що мені потрібно надсилати деякі дані з одного комп'ютера на інший через досить швидку мережу ... наприклад, стандартне з'єднання 100 Мбіт (~ 10 Мб / с). Мої дискові накопичувачі стандартного жорсткого диска, тому їх швидкість становить десь від 30 Мб / с до 100 МБ / с. Тому я здогадуюсь, що стиснення даних на ходу може допомогти.

Але ... я не хочу бути обмеженим процесором. Якщо я виберу алгоритм, інтенсивний для процесора, передача буде йти повільніше, ніж без стиснення.

З компресорами типу GZIP та BZIP2 це важко, оскільки ви зазвичай встановлюєте силу стиснення один раз на всю передачу, а мої потоки даних іноді легко, іноді важко стискати - це робить процес неоптимальним, оскільки іноді я не використовую повний процесор, а іноді пропускна здатність недостатньо використовується.

Чи існує програма стиснення, яка б адаптувалася до поточної процесорної / пропускної здатності і потрапила в солодке місце, щоб передача була оптимальною? Ідеально підходить для Linux, але мені все одно цікаво про всі рішення. Я хотів би побачити щось сумісне з декомпресорами GZIP / BZIP2, але це не обов'язково.

Тому я хотів би оптимізувати загальний час передачі, а не просто кількість байтів, що надсилаються.

Також мені не потрібна декомпресія в режимі реального часу ... стиснення в реальному часі достатньо. Хост призначення може обробляти дані пізніше у вільний час. Я знаю, що це не сильно змінюється (стиснення, як правило, набагато інтенсивніше процесора, ніж декомпресія), але якщо є рішення, яке може використовувати цей факт, тим краще.

Кожен раз, коли я передаю різні дані, я дуже хочу зробити ці одноразові передачі якомога швидшими. Тому я не отримаю користі від отримання декількох передач швидше через сильне стиснення.

Дякую,


1
+1 цікава та потенційно корисна ідея. Якщо ви коли-небудь знайдете хороші способи зробити це, я хотів би почути про це.
Девід Кері

Відповіді:


3

Це сучасний предмет дослідження - насамперед у галузі сенсорних мереж, де метою є мінімізація споживання енергії, а не максимізація пропускної здатності. Принцип адаптивного стиснення однаковий.

Ось недавній документ професора з USC .

Можливо, ви могли б піти на реалізацію його алгоритму? Я впевнений, що було б багато людей, зацікавлених у хорошій реалізації.


Я хотів би, якби міг ... тут застосовуються звичайні людські обмеження в часі. Все-таки я можу першим випробувати його ;-) Дякую за посилання на документи, я можу спробувати знайти інших людей, які можуть зацікавити.
liori

2

Гум, це питання старше одного року, тому це може пройти непомітно:

У будь-якому випадку, Google нещодавно опублікував Snappy, який може бути саме тим, що ви шукаєте, а саме:

[...] Він не спрямований на максимальне стиснення або сумісність з будь-якою іншою бібліотекою стиснення; натомість він спрямований на дуже високі швидкості та розумне стиснення. Наприклад, порівняно з найшвидшим режимом zlib, Snappy - це на порядок швидше для більшості входів, але отримані стислі файли десь від 20% до 100% більше [...]

Він реалізований на C ++ із прив’язками, доступними для C та ряду інших мов.


О, ні, це не залишиться непоміченим, принаймні мною ;-) І, здається, він не адаптивний у тому сенсі, який я шукаю - це просто швидко.
liori
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.