Недоархиватор SHAFF

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

angry_troll wrote:
Shaos wrote:(этот формат должен побить всех самодельщиков : )
Главное ещё чтоб exomizer побил.

Кстати, если надо сжать несколько /разных/ блоков, например графика, музло, код, то если их сжимать exomizerом по отдельности -- будет выигрыш по сравнению с тем, если их сжимать одним конкатенированным куском.

кстати, почему exomizerа нет в твоих сравнивалках?
Я не смог его запустить нормально - он какой-то маленький кусочек хвоста сжимает - как будто с большими файлами работать не умеет...
angry_troll wrote:upd: а заодно какихнить crinklerов/шринклеров?
А это кто такие?

P.S. Вроде нашёл чегой-то: http://code4k.blogspot.com/2010/12/crinkler-secrets-4k-intro-executable.html, тока он виндовые EXE-шники ведь сжимает...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: Недоархиватор SHAFF

Post by angry_troll »

Shaos wrote:Я не смог его запустить нормально - он какой-то маленький кусочек хвоста сжимает - как будто с большими файлами работать не умеет...
Ну не знаю, может ты его не так запускал? Там дефолтный режим вроде, когда он цепляет лоадер для всяких там комодов. А чтоб просто сжатый поток выдавал, надо какую-то опцию.
привет засранцу лавру :)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

angry_troll wrote:
Shaos wrote:Я не смог его запустить нормально - он какой-то маленький кусочек хвоста сжимает - как будто с большими файлами работать не умеет...
Ну не знаю, может ты его не так запускал? Там дефолтный режим вроде, когда он цепляет лоадер для всяких там комодов. А чтоб просто сжатый поток выдавал, надо какую-то опцию.
Да я вроде правильную опцию выбирал, ну да ладно - народ на него всё равно гонит, что падучий он :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

angry_troll wrote:Кстати, если надо сжать несколько /разных/ блоков, например графика, музло, код, то если их сжимать ... по отдельности -- будет выигрыш по сравнению с тем, если их сжимать одним конкатенированным куском.
А вот это мысль (по ходу пьесы выделять контекст и переключаться на соответствующую таблицу хаффмана) - надо будет её поразмыслить как следует, скажем в рамках SHAFF4 :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: Недоархиватор SHAFF

Post by angry_troll »

Shaos wrote:народ на него всё равно гонит, что падучий он :)
Ну народ может и гонит, а люди вон на нём умудрялись демы делать, и ничего вроде не падало: http://www.pouet.net/prod.php?which=61133
привет засранцу лавру :)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Re:

Post by Shaos »

angry_troll wrote:
Shaos wrote: zx48.sna 2 min
zx48k1.sna 2 min
jswilly16k.sna 35 min
chess16k.sna 21 min
chess.sna 47 min
cybotron.sna 28 min
tomahawk.sna 158 min
exolon.sna 141 min
buzzsaw.sna 93 min
bozxle.sna 102 min
НАСТОЛЬКО медленно сделать сжатие -- это надо уметь! :)
С опцией компиляции -O2 архиватор работает в 3 раза быстрее :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

Trixter (один из авторов демы 8088 MPH) советует мне в SHAFF0 использовать самый редкий байт вместо FF - по прикидкам оно даст около 1% экономии (по идее это можно сделать опциональным), например zx48k1.sna сожмется в 581 байт вместо 590...

P.S. По идее аналогичную ручную подстройку можно добавить и в SHAFF1 - только там надо задавать другое - инвертировать или не инвертировать литералы т.к. по умолчанию литералы с кодами <128 съедают 8 бит, а с кодами >=128 уже 9 - например если сжимаемый файл не ASCII-текст и большинство байтов имеют коды >127 то логичнее литералы инвертнуть, чтобы они занимали меньше места - насколько это может дать экономии пока не понятно - надо смотреть...

P.P.S. А теперь по поводу добавления Хаффмана в SHAFF2 - думаю сделать общую таблицу на весь файл (все блоки) и записывать ее в заголовок (причем по умолчанию можно использовать встроенную заранее нагенеренную таблицу для английского технического текста). Например начало таблицы будет указывать трехбуквенный идентификатор HUF и далее:
#FF nn - где nn количество бит кода для символов следующих после такой команды (#FF #FF будет означать конец таблицы, т.е. таким способом можно задавать коды длиной до 254 битов)
после этого идут описатели кодов символов с указанной длиной:
cc hh...hh - где cc это байт символа (в случае #FF после него будет вставлен #00 чтобы отличить его от команды #FF nn) и далее необходимое количество байтов, кодирующих код Хаффмана для этого символа (код выдвинут влево до упора, т.е. например код 01 будет представлен байтом 01000000, а например код 111111111 будет представлен двумя байтами 11111111 10000000)
Думаю это будет самым компактным представлением кодов Хаффмана в виде байтов...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

Shaos wrote:Вот так пока выходит (отсортировал по степени сжатия):

Code: Select all

 49179 zx48k1.sna
  1023 zx48k1.sna.mlz
   930 zx48k1.sna.hrm
   718 zx48k1.zip
   604 zx48k1.rar
   594 zx48k1.sna.gz
   590 zx48k1.SNAFF <<<<< SHAFF0
   576 zx48k1.sna.xz
   535 zx48k1.sna.bz2
   502 zx48k1.sna.hst
   290 zx48k1.sna.ex2

 49179 jswilly16k.sna
  7784 jswilly16k.SNAFF <<<<< SHAFF0
  6901 jswilly16k.sna.bz2
  6826 jswilly16k.sna.mlz
  6767 jswilly16k.sna.hrm
  6708 jswilly16k.zip
  6570 jswilly16k.sna.gz
  6355 jswilly16k.rar
  6230 jswilly16k.sna.hst
  5978 jswilly16k.sna.ex2
  5956 jswilly16k.sna.xz

 49179 chess16k.sna
  7921 chess16k.sna.bz2
  7752 chess16k.sna.mlz
  7702 chess16k.sna.hrm
  7662 chess16k.SNAFF <<<<< SHAFF0
  7481 chess16k.zip
  7378 chess16k.sna.gz
  7226 chess16k.rar
  7066 chess16k.sna.hst
  6860 chess16k.sna.xz
  6707 chess16k.sna.ex2
Добавил результаты для Exomizer2 - силён, собака...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

Выложил последнюю версию, где можно менять ключевой байт с FF на что-то другое - в линуксе будучи собранным в GCC все работает, однако в процессе оптимизации что-то серьезно сломалось с точки зрения борландовского компилятора - версия под винду теперь зацикливается...

P.S. Новая статистика (SNA-файлы с параметрами по умолчанию теперь на 3 байта больше т.к. каждый блок начинается с ключевого байта FF):

Code: Select all

 49179 zx48k1.sna
  1023 zx48k1.sna.mlz
   952 zx48k1.PP2 - RNC Pro Pack (method 2)
   930 zx48k1.sna.hrm
   737 zx48k1.LZ4
   718 zx48k1.zip
   604 zx48k1.rar
   594 zx48k1.sna.gz
   593 zx48k1.SNAFF <<<<< SHAFF0
   576 zx48k1.sna.xz
   583 zx48k1.SNAFF <<<<< SHAFF0 (-xFD)
   547 zx48k1.PP1 - RNC Pro Pack (method 1)
   535 zx48k1.sna.bz2
   502 zx48k1.sna.hst
   480 zx48k1.SNAFF <<<<< SHAFF1
   474 zx48k1.ZX7
   290 zx48k1.sna.EX2

 49179 jswilly16k.sna
  7849 jswilly16k.LZ4
  7788 jswilly16k.SNAFF <<<<< SHAFF0
  7750 jswilly16k.SNAFF <<<<< SHAFF0 (-xBA)
  6980 jswilly16k.PP2 - RNC Pro Pack (method 2)
  6901 jswilly16k.sna.bz2
  6826 jswilly16k.sna.mlz
  6767 jswilly16k.sna.hrm
  6708 jswilly16k.zip
  6570 jswilly16k.sna.gz
  6496 jswilly16k.SNAFF <<<<< SHAFF1
  6428 jswilly16k.PP1 - RNC Pro Pack (method 1)
  6396 jswilly16k.ZX7
  6355 jswilly16k.rar
  6230 jswilly16k.sna.hst
  5978 jswilly16k.sna.EX2
  5956 jswilly16k.sna.xz

 49179 chess16k.sna
  7921 chess16k.sna.bz2
  7753 chess16k.LZ4
  7752 chess16k.sna.mlz
  7702 chess16k.sna.hrm
  7666 chess16k.SNAFF <<<<< SHAFF0
  7642 chess16k.SNAFF <<<<< SHAFF0 (-x8E)
  7511 chess16k.PP2 - RNC Pro Pack (method 2)
  7481 chess16k.zip
  7465 chess16k.ZX7
  7378 chess16k.sna.gz
  7226 chess16k.rar
  7182 chess16k.SNAFF <<<<< SHAFF1
  7085 chess16k.PP1 - RNC Pro Pack (method 1)
  7066 chess16k.sna.hst
  6860 chess16k.sna.xz
  6707 chess16k.sna.EX2

 49179 thor.sna
 32557 thor.SNAFF <<<<< SHAFF0
 31211 thor.SNAFF <<<<< SHAFF0 (-xE9)
 29770 thor.LZ4
 27293 thor.sna.bz2
 26970 thor.PP2 - RNC Pro Pack (method 2)
 26643 thor.SNAFF <<<<< SHAFF1
 26291 thor.ZX7
 26164 thor.sna.hrm
 26041 thor.sna.mlz
 25761 thor.PP1 - RNC Pro Pack (method 1)
 25235 thor.zip
 25114 thor.sna.gz
 25031 thor.sna.hst
 24132 thor.rar
 22100 thor.sna.xz
 21788 thor.EX2

 49179 spindlzy.sna
 33584 spindizy.SNAFF <<<<< SHAFF0
 33162 spindlzy.SNAFF <<<<< SHAFF0 (-xDE)
 31465 spindizy.LZ4
 29170 spindizy.sna.bz2
 29152 spindizy.PP2 - RNC Pro Pack (method 2)
 28176 spindizy.sna.hrm
 28850 spindizy.SNAFF <<<<< SHAFF1
 28508 spindizy.ZX7
 28067 spindizy.sna.mlz
 27607 spindizy.PP1 - RNC Pro Pack (method 1)
 27021 spindlzy.zip
 26966 spindizy.sna.gz
 26716 spindizy.sna.hst
 25770 spindizy.EX2
 24696 spindizy.sna.xz

 49179 braxx.sna
 24876 braxx.SNAFF <<<<< SHAFF0
 24370 braxx.SNAFF <<<<< SHAFF0 (-x91)
 22195 braxx.LZ4
 20978 braxx.PP2 - RNC Pro Pack (method 2)
 20526 braxx.bz2
 20390 braxx.sna.hrm
 20299 braxx.SNAFF <<<<< SHAFF1
 20289 braxx.ZX7
 20202 braxx.sna.mlz
 19244 braxx.PP1 - RNC Pro Pack (method 1)
 19106 braxx.gz
 19082 braxx.zip
 18938 braxx.sna.hst
 18523 braxx.EX2
 17024 braxx.sna.xz
P.P.S. Кроме того вроде разобрался с кодом (который писал по ночам в полубессознательном состоянии более 3 лет назад) и слега его ускорил, выкинув безумные свич-конструкции и лишние ветки обхода автокорреляционной матрицы (теперь в 4-6 раз быстрее на разных файлах получается без ухудшения результатов)

P.P.P.S. 7 февраля обновил статистику по SHAFF1 (в целом сходится с оценками 3 летней давности) - всё энкодится и декодится :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: Недоархиватор SHAFF

Post by angry_troll »

можно поиметь тестовые файлики? А то странно даже, хрум уделывает мегалз...
И еще, помоему сваливать в одну кучу пакеры (поток байтиков) и архиваторы (файловая система) как-то нечестно...
привет засранцу лавру :)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

angry_troll wrote:можно поиметь тестовые файлики? А то странно даже, хрум уделывает мегалз...
И еще, помоему сваливать в одну кучу пакеры (поток байтиков) и архиваторы (файловая система) как-то нечестно...
архиватор от пакера отличается только включением имени файла в тело - я все равно один файл пакую :)

вот архив со SNA, которые я мучаю: https://app.box.com/s/2pih02iwic5cc2zip9wy9zvxut2ac47y

неожиданности видимо связаны с тем, что пока я играюсь со SNA c 16КБ программами, т.е. 2/3 в этом 48-килобайтном SNA-файле это нули и если паковщик умеет их компактно паковать, то он выигрывает (например мой SHAFF может упаковать 16КБ нулей в 9 байт)
Я тут за главного - если что шлите мыло на me собака shaos точка net
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: Недоархиватор SHAFF

Post by angry_troll »

Вот оно что, это чемпионат по сжиманию нулей оказывается :D
привет засранцу лавру :)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

angry_troll wrote:Вот оно что, это чемпионат по сжиманию нулей оказывается :D
Ну и это тоже :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Re:

Post by Shaos »

Shaos wrote:
angry_troll wrote:
Shaos wrote: zx48.sna 2 min
zx48k1.sna 2 min
jswilly16k.sna 35 min
chess16k.sna 21 min
chess.sna 47 min
cybotron.sna 28 min
tomahawk.sna 158 min
exolon.sna 141 min
buzzsaw.sna 93 min
bozxle.sna 102 min
НАСТОЛЬКО медленно сделать сжатие -- это надо уметь! :)
С опцией компиляции -O2 архиватор работает в 3 раза быстрее :)
После выкидывания лишних анализов получилось так (с -O2 на Зеоне 2.4 ГГц):

zx48k1.sna - 3 сек (-1 : 4 сек)
jswilly16k.sna - 55 сек (-1 : 2 мин 12 сек)
chess16k.sna - 22 сек (-1 : 55 сек)

И из нового:

thor.sna - 5 мин (-1 : 10 мин 46 сек)
spindizy.sna - 5 мин 4 сек (-1 : 10 мин 13 сек)
braxx.sna - 5 мин 14 сек (-1 : 7 мин 48 сек)

Причём это для SHAFF0 который дальше 4-байтовых копий не идёт, а SHAFF1 будет подольше т.к. опускается до поиска 2-байтовых повторений (8 февраля поставил в скобках окончательные цифры по SHAFF1 - опция -1)

P.S. Починил зацикливание на Интеле - суть в том, что когда я выкинул свичи и перешёл на формулы могло возникать такое: 0xFFFFFFFF << 32 и пока я отлаживался на PowerPC оно ожидаемо вовращало 0, однако пересев обратно на Интел я на двух разных машинах х86 стал получать в этом случае 0xFFFFFFFF и на борланде под WinXP, и на гцц под Линух64 (это "фича" именно Интела - я вроде про это недавно где-то читал)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Недоархиватор SHAFF

Post by Shaos »

Сделал запаковку-распаковку SHAFF1 :)

Подбиваю статистику - как подобъю, выложу сырцы ;)

P.S. Статистику см. выше - на более рандомных файлах чуть-чуть не догоняю MegaLZ и ZX7, но хрум часто обхожу, не говоря уже об LZ4 :)
Я тут за главного - если что шлите мыло на me собака shaos точка net