2014-01-17 3 views
0

Возможно ли использовать многоядерные устройства для внутренних функций QT, таких как qCompress/qUncompress?Использование qCompress/qUncompress для многоядерных

спасибо.

+0

Все возможно. знак равно Шутки в сторону, я не думаю, что полностью понимаю ваш вопрос. – Huy

+0

Я просто хочу использовать более одного ядра, когда я сжимаю данные. – Grammer

ответ

4

qCompress и qUncompress внутренне используют zlib, и его алгоритм нелегко параллелизуем. Например, как это делают другие, например, pigz, это резка данных в куски, которые затем сжимаются параллельно. Для этого требуется другой формат файла, чем обычно ожидает zlib.

Если у вас есть контроль над своими данными, вы можете разделить данные на несколько кусков и сжать/распаковать их параллельно. Количество блоков может быть таким же большим, как максимальное количество потоков, предусмотренных для декомпрессии, но когда вы выполняете сжатие/распаковку, вы запускаете только число потоков по QThread::idealThreadCount(), они могут обрабатывать более одного фрагмента каждый. Минимальный размер куска должен иметь смысл, чтобы не слишком сильно влиять на коэффициент сжатия. Возможно, вам придется экспериментировать, но я бы собрал, что куски ниже 128kb не имеют смысла.

+0

Спасибо, Куба! Это смысл! – Grammer

Смежные вопросы