Возможно ли использовать многоядерные устройства для внутренних функций QT, таких как qCompress/qUncompress?Использование qCompress/qUncompress для многоядерных
спасибо.
Возможно ли использовать многоядерные устройства для внутренних функций QT, таких как qCompress/qUncompress?Использование qCompress/qUncompress для многоядерных
спасибо.
qCompress
и qUncompress
внутренне используют zlib, и его алгоритм нелегко параллелизуем. Например, как это делают другие, например, pigz, это резка данных в куски, которые затем сжимаются параллельно. Для этого требуется другой формат файла, чем обычно ожидает zlib.
Если у вас есть контроль над своими данными, вы можете разделить данные на несколько кусков и сжать/распаковать их параллельно. Количество блоков может быть таким же большим, как максимальное количество потоков, предусмотренных для декомпрессии, но когда вы выполняете сжатие/распаковку, вы запускаете только число потоков по QThread::idealThreadCount()
, они могут обрабатывать более одного фрагмента каждый. Минимальный размер куска должен иметь смысл, чтобы не слишком сильно влиять на коэффициент сжатия. Возможно, вам придется экспериментировать, но я бы собрал, что куски ниже 128kb не имеют смысла.
Спасибо, Куба! Это смысл! – Grammer
Все возможно. знак равно Шутки в сторону, я не думаю, что полностью понимаю ваш вопрос. – Huy
Я просто хочу использовать более одного ядра, когда я сжимаю данные. – Grammer