Here is a ZPAQ model that beats paq8px_v69. I modified mid.cfg by adding model orders 0..3 that include the column position (offset mod 10
. These are organized into order 0 CM (direct context model) and order 1..3 indirect context models, with orders 2 and 3 chained from the CM (this after various experiments). I also added a SSE after the mixer using order 1 and column as the context. It takes about 7 seconds on my laptop (2 GHz T3200) with JIT enabled (g++ 4.5.0).
Code:
(x.cfg)
comp 4 7 0 0 13 (hh hm ph pm n)
0 icm 5 (order 0...5 chain)
1 isse 13 0
2 isse $1+17 1
3 isse $1+18 2
4 isse $1+18 3
5 isse $1+19 4
6 match $1+22 $1+24 (order 7)
7 cm 16 24 (order 0...3 mod 108)
8 icm $1+17
9 isse $1+18 7
10 isse $1+19 7
11 mix 16 0 11 24 255 (order 1)
12 sse 20 11 48 255 (order 1 mod 108)
hcomp
c++ *c=a b=c a=0 (save in rotating buffer M)
d= 1 hash *d=a (orders 1...5 for isse)
b-- d++ hash *d=a
b-- d++ hash *d=a
b-- d++ hash *d=a
b-- d++ hash *d=a
b-- d++ hash b-- hash *d=a (order 7 for match)
d++ a=c a%= 108 a<<= 9 *d=a (order 0...3 mod 108)
d++ *d=a b=c b-- hash *d=a
b-- d++ hash *d=a
b-- d++ hash *d=a
d++ a=*c a<<= 8 *d=a (order 1 for mix)
d++ a=c a%= 108 a<<= 8 a+=*c a<<= 5 *d=a (order 1 mod 108 for sse)
halt
post
0
end
To compress, save as x.cfg, then: zpaq -mx c sample-x sample.bin
Code:
395,056 sample-x.zpaq
395,381 sample.bin.paq8px
401,465 sample-m4.zpaq
406,322 sample-m3.zpaq
418,100 sample.bsc
418,745 sample-m2.zpaq
430,159 sample-o2.zpaq
430,615 sample-o1.zpaq
437,323 sample-m1.zpaq
454,042 sample.7z
455,370 sample-o0.zpaq
503,014 sample.bin.gz
1,048,592 sample.bin
You can also pass an argument to control memory usage as -mx,1 to double, -mx,-1 to halve, etc. By default it uses 305 MB.