Menu

7-zip deflate (15.08 vs 4.32)

lorents
2015-10-04
2015-12-15
<< < 1 2 (Page 2 of 2)
  • Igor Pavlov

    Igor Pavlov - 2015-11-22

    Look my post above about NumDivPasses.

     
  • lorents

    lorents - 2015-11-22

    Спасибо большое, разобрался!
    Я просту думаю как сделать так, чтобы исправить сильный разброс в сжатии 7-zip deflate. В оптимизации PNG 7-zip deflate играет важную роль.
    zlib - быстрый, но слабый в сжатии (удобно перебирать параметры сжатия PNG)
    7-zip - среднее сжатие и средняя скорость.
    kzip, zopfli - сильное сжатие, но медленные.

     
  • lorents

    lorents - 2015-11-28

    Сделал новый тест PNG:

    7za a -mx=9 -mfb=257 -mpass=5
    

    Тест 1:
    4.32 - 604 590 822 байт
    4.43 - 606 198 290 байт
    4.56 - 607 400 246 байт
    4.57 - 607 225 759 байт
    9.20 - 607 559 920 байт
    15.12 - 606 368 598 байт

    МИН - 603 865 676 байт
    4.32 + 4.43 - 604 009 337 байт


    Тест 2:
    4.32 - 1 184 889 459 байт
    4.43 - 1 183 833 371 байт
    4.56 - 1 184 629 129 байт
    4.57 - 1 184 416 625 байт
    9.20 - 1 185 599 649 байт
    15.12 - 1 184 129 730 байт

    МИН - 1 182 393 931 байт
    4.32 + 4.43 - 1 182 714 652 байт


    Самое главное нет сильного разброса в сжатии.

    Как я понимаю, вся проблема в том, что алгоритм 7-zip не может сам выбирать параметры -mfb и -mpass. Поэтому возникает вопрос, можно ли придумать алгоритм, который будет передавать в 7-zip оптимальные параметры сжатия?

     

    Last edit: lorents 2015-11-28
  • Shell

    Shell - 2015-11-28

    можно ли придумать алгоритм, который будет передавать в 7-zip оптимальные параметры сжатия?

    Such an algorithm does exist - trial and error. Without extra logic, it will make only 256*15 trials. Speaking seriously, a good choosing algorithm will probably be a new Deflate implementation. It would, however, be possible to reduce the number of trials down to 256 if 7-Zip remembered the best strategy throughout the DivPasses.

     
  • lorents

    lorents - 2015-11-29

    Перебирать параметры не хочется, т.к. это занимает время. А мне необходимо минимизировать затраты времени.
    Надеюсь Igor Pavlov что нибудь придумает и исправит данную ситуацию.

     
  • Igor Pavlov

    Igor Pavlov - 2015-11-29

    I don't plan any changes in that Defalte code for near future.
    It's too difficult to improve it.
    And any possible gain will be small.

     
  • lorents

    lorents - 2015-11-29

    Igor Pavlov добрый день!
    Я просто ищу способа исправить такой сильный разброс в сжатии. Как было написано в справке, чем выше значение параметров -mfb и -mpass, тем сильнее сжатие, и больше времени требуется.
    Сейчас получается, что у этого "правила" есть исключения. Я пытаюсь понять почему это происходит? Как я понимаю, это некий "баг" в алгоритме deflate 7-zip.

    Если я правильно понял, то задать косвенно количество блоков я тоже не могу.

    Проведя ряд тестов, для моего проекта оптимальное значение параметров -mfb=257 -mpass=5, т.к. тратиться небольшое кол-во времени, при этом сжатии на высоком уровне.

    Я понимаю, что для Вас алгоритм deflate 7-zip не является приоритетным напраавлением, но я очень прошу, если будет время посмотрите причину сильного разброса в сжатии.

     
  • lorents

    lorents - 2015-11-29

    Автор advancecomp использует такой подход

    sz_passes = level.iter > 15 ? level.iter : 15;
    if (sz_passes > 255)
        sz_passes = 255;
    sz_fastbytes = 255;
    
     

    Last edit: lorents 2015-11-29
    • Shell

      Shell - 2015-11-29

      There was something wrong with my previous post. Briefly: increasing fb may not decrease the size due to different Huffman encodings (and I even think that the optimal choice of this parameter has the complexity at least as the one of match finder's); increasing pass should ideally not increase the size, but due to some reason 7-Zip may choose less optimal encoding.

       
  • lorents

    lorents - 2015-12-06

    Igor Pavlov добрый день!

    Если не сложно, Вы не могли бы скомпилировать 7za с увеличенным значением kMaxUncompressedBlockSize

    static const UInt32 kMaxUncompressedBlockSize = ((1 << 16) - 1) * 1; // [1, (1 << 32))
    
     

    Last edit: lorents 2015-12-06
    • Igor Pavlov

      Igor Pavlov - 2015-12-07

      You can compile it, if you need it.
      Note that it can change some another properties: memory usage and speed. So any exact number is tradeoff.

       
  • lorents

    lorents - 2015-12-07

    Если не трудно, подскажите, пожалуйста, как компилировать 7za?

     
    • Igor Pavlov

      Igor Pavlov - 2015-12-08

      Install Visual Studio C++ compiler.
      call

      nmake
      

      in CPP\7zip\Bundles\Alone

       
      • lorents

        lorents - 2015-12-13

        Спасибо!

         
  • lorents

    lorents - 2015-12-13

    del

     

    Last edit: lorents 2015-12-14
  • lorents

    lorents - 2015-12-14

    Igor Pavlov Проститез за беспокойство.

    Подскажите, пожалуйста, какие значения параметров в файле DeflateEncoder.cpp и в других файлах лучше использовать, для получения максимального сжатия, не учитываю время и кол-во памяти необхомое для этого.

     
  • Igor Pavlov

    Igor Pavlov - 2015-12-15

    I worked with deflate code many years ago.
    So now I don't remember details.
    Look comments in code.

     
    • lorents

      lorents - 2015-12-15

      Понял Вас. Благодарю за ответ!

       
<< < 1 2 (Page 2 of 2)

Log in to post a comment.