Библиотека сжатия с использованием Nvidia CUDA

Кто-нибудь знает проект, который реализует стандартные методы сжатия (например, Zip, GZip, BZip2, LZMA, ...) с использованием NVIDIA Библиотека CUDA?

Мне было интересно, не будут ли алгоритмы, которые могут использовать множество параллельных задач (например, сжатие), работать на видеокарте намного быстрее, чем с двух- или четырехъядерным процессором.

Что вы думаете о плюсах и минусах такого подхода?

Что такое ограничения памяти CUDAS? Т.е. составляет от 4K до 32K блоков слишком много для параллельной обработки данных, gzip можно сжимать параллельно, не сохраняя словарь между блоками, это увеличивает размер файла примерно на 5%. Видеть. Dictzip для примера.

Erik Johansson 19.03.2009 15:13

В этой презентации основное внимание уделяется Gzip и ускорению порядка 10 on-demand.gputechconf.com/gtc/2014/presentations/….

Ole Tange 06.08.2016 18:37
github.com/adnanozsoy/CUDA_Compression поддерживает алгоритм на основе lszz gpu, и я тестировал его с большими файлами. степень сжатия примерно x2 по сравнению с bzip2, время составляет около 25% для bzip2
ZFY 23.09.2020 04:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
53
3
41 625
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Обычно алгоритмы сжатия не могут использовать параллельные задачи, нелегко сделать алгоритмы распараллеливаемыми. В ваших примерах TAR не является алгоритмом сжатия, и единственный алгоритм, который может быть сильно распараллелен, - это BZIP, потому что это алгоритм сжатия блоков. Каждый блок можно сжать отдельно, но для этого потребуется много-много памяти. LZMA также не работает параллельно, когда вы видите, что 7zip использует несколько потоков, это связано с тем, что 7zip разделяет поток данных на 2 разных потока, каждый из которых сжимается с помощью LZMA в отдельном потоке, поэтому сам алгоритм сжатия не параллелен. Это разделение работает только тогда, когда данные позволяют это.

Encryption algorithms have been quite successful in this area, so you might want to look into that. Here is a paper related to CUDA and AES encryption:http://www.manavski.com/downloads/PID505889.pdf

На первый взгляд кажется, что это ускоряет шифрование каждого блока. Не помогает то, что блочные шифры нужно связывать в цепочку, чтобы избежать определенных типов атак. en.wikipedia.org/wiki/Block_cipher_modes_of_operation

Calyth 21.01.2009 01:58

Это правда, что эта статья не касается этого, но есть статья в драгоценных камнях графического процессора, написанная коллегой о расшифровке AES с помощью шейферного кода, а не Cuda, которая охватывает цепочки. К сожалению, статьи нет в сети. В любом случае цепочка может обрабатываться графическим процессором

Robert Gould 21.01.2009 04:02
Ответ принят как подходящий

Неизвестно, что кто-то это сделал и обнародовал. Просто ИМХО, это звучит не очень многообещающе.

Как указывает Мартинус, некоторые алгоритмы сжатия очень последовательны. Алгоритмы сжатия блоков, такие как LZW, могут быть распараллелены путем независимого кодирования каждого блока. Архивирование большого дерева файлов можно распараллелить на уровне файлов.

Однако ни один из них не является параллелизмом в стиле SIMD (одна инструкция и несколько данных), и они не являются массово параллельными.

Графические процессоры - это в основном векторные процессоры, в которых вы можете выполнять сотни или тысячи инструкций ADD на этапе блокировки и выполнять программы, в которых очень мало ветвей, зависящих от данных.

Алгоритмы сжатия в целом больше похожи на модель программирования SPMD (Single Program Multiple Data) или MIMD (Multiple Instruction Multiple Data), которая лучше подходит для многоядерных процессоров.

Алгоритмы сжатия видео могут быть ускорены обработкой GPGPU, такой как CUDA, только в той степени, в которой существует очень большое количество блоков пикселей, которые параллельно подвергаются косинусному преобразованию или свертке (для обнаружения движения), а подпрограммы IDCT или свертки могут быть выражены с внеблоковым кодом.

Графическим процессорам также нравятся алгоритмы с высокой числовой интенсивностью (отношение математических операций к доступу к памяти). Алгоритмы с низкой числовой интенсивностью (например, сложение двух векторов) могут быть массово параллельными и SIMD, но все же работать на графическом процессоре медленнее, чем на центральном процессоре, потому что они привязаны к памяти.

Моя первая мысль о параллелизации была связана с «большим деревом файлов», но другие причины, о которых вы упомянули, убедили меня, спасибо.

Xn0vv3r 21.01.2009 10:17

Можете ли вы ссылаться на измерения, которые показывают, что алгоритмы с привязкой к памяти (например, добавление двух векторов) работают медленнее на GPU, чем на CPU?

Benedikt Waldvogel 12.06.2013 15:50

@bene Я неправильно это сформулировал. Алгоритмы с привязкой к памяти могут работать на графическом процессоре так же быстро или быстрее - большинство графических процессоров имеют очень высокую пропускную способность памяти. Какой бы процессор ни имел самую высокую эффективную пропускную способность памяти, он будет выполнять эти алгоритмы быстрее.Однако, если вы берете данные на процессор, передаете их на графический процессор (обычно через шину PCIE), затем выполняете добавление, а затем передаете данные обратно в cpu, который всегда будет намного медленнее, и для этого очень легко построить тест.

Die in Sente 14.06.2013 07:44

Мы пытаемся перенести bzip2 на CUDA. :) Пока (и только после грубых тестов) наше преобразование Барроуза-Уиллера на 30% быстрее последовательного алгоритма. http://bzip2.github.com

Насколько я могу судить, bzip2 использует несколько ядер ЦП, но не CUDA. Ссылка не работает. Текущая ссылка кажется bzip.org

Eric J. 09.04.2013 20:18

Мы завершили первый этап исследований по повышению производительности алгоритмов сжатия данных без потерь. В качестве прототипа был выбран Bzip2, наша команда оптимизировала только одну операцию - преобразование Барроуза – Уиллера, и мы получили некоторые результаты: ускорение в 2-4 раза на хорошо сжимаемых файлах. Код работает быстрее во всех наших тестах.

Мы собираемся завершить bzip2, поддерживать deflate и LZMA для некоторых реальных задач, таких как: HTTP-трафик и сжатие резервных копий.

ссылка на блог: http://www.wave-access.com/public_en/blog/2011/april/22/breakthrough-in-cuda-data-compression.aspx

Плюс один за ответ на этот вопрос через год после его публикации. Плюс ваша работа выглядит интересной, спасибо

eSniff 22.07.2011 03:43

Прошло 4 года ... Я (все мы) хотел бы больше узнать о вашем проекте. Какие результаты? Где найти источники, если таковые имеются? Ждем ваших отзывов

Jet 07.08.2015 12:35

Александр, есть новости? Код есть где-нибудь?

einpoklum 09.02.2016 16:17

Я нашел этот libbsc.com только для справки, я не изучал его, но он мертв уже ~ 7 лет (это 2019 год!)

Angelos Pikoulas 17.05.2019 03:07

30% - это хорошо, но для таких приложений, как резервное копирование, этого явно недостаточно.

Мой опыт показывает, что средний поток данных в таких случаях получает сжатие 1,2-1,7: 1 с использованием gzip и в конечном итоге ограничивается скоростью вывода 30-60 Мбит / с (это относится к широкому спектру современных (примерно 2010-2012) носителей. -high-end процессоры.

Ограничением здесь обычно является скорость, с которой данные могут быть загружены в сам ЦП.

К сожалению, для того, чтобы ленточный накопитель LTO5 оставался довольным, ему нужна скорость передачи данных сырой (без сжатия) около 160 Мбит / с. При подаче сжимаемых данных требуется еще более высокая скорость передачи данных.

Сжатие LTO явно намного быстрее, но несколько неэффективно (эквивалентно gzip -1 - этого достаточно для большинства целей). Диски LTO4 и выше обычно имеют встроенные механизмы шифрования AES-256, которые также могут поддерживать такие скорости.

В моем случае это означает, что мне потребуется очистка на 400% или выше, чтобы я сочла это целесообразным.

Аналогичные соображения применимы к локальным сетям. На скорости 30 Мбит / с сжатие является помехой в сетях класса Gb, и вопрос в том, тратить ли больше на сеть или на сжатие ... :)

Другие вопросы по теме