+lzma2, facompress.dll: compress_all_at_once
+rep: читать 8мб в первый раз
+lzp-распаковка: вроде можно ускорить, не лазая зря в хэш?
+crc from 7-zip: 10-20% faster -mex decompression, 10% faster -mex1 compression
+уменьшен приоритет тредам сжатия/шифрования чтобы 4x4 не завешивала компьютер целиком :)
+ограничивать :t/:i при нехватке памяти (в первую очередь :i)
+не запоминать :t/:i в архиве
+4x4 and lzma:a1 - decrease (de)compression threads priority
+xlzma:bt4 fails due to memory shortage
+-mcrc - purify fails
+При архивировании через гуи -mex информационное окошко по сравнению со старыми алгоритмами "колбасит"

перекрытие входного и выходного буфера
частичное перекрытие кусков - улучшит сжатие, но сделает невозможной многопоточнцю распаковку (*_MatchFinder_Skip)
lzma2
-m3: использовать lzma:a1 поскольку оно быстрее на многоядерных cpu?
  "(lzma:fast:32:mc8|lzma:normal:8:mc3|...)" - синтаксис для выбора алгоритма в зависимости от значения -mt
  "(dict+lzp+grzip:m3|grzip)" для -m3t
-mi
Set(De)compressionMem: учитывать размер outbuf=dict*1.125
считать lzma:a1 за 1.5 треда; считать smt за 1.3 ядра
lzp/dict-распаковка: читать/писать кусками!
-mex5b: два треда поиска, fb24
decompression: improve write times (buffering by sector size?, +RTS?)
undict: всего 200mb/s
ppmd: сжать 1-мбайтные заголовки в первый блок, затем остальные блоки с этими заголовками.или использовать первый мб как базис для всех блоков

Новый энжин, гарантирующий корректную обработку ошибок:
1. Создаём 4 threads и 4+2 jobs/buffer pairs
2. job = FreeJobs.Get()
   job->OutBuf = OutputBuffers.Get()
   job->result = DeCompressMem(...)
3. Даже после ошибки WriterThread должна сначала сбросить на выход предыдущие успешно распакованные данные.
   Поэтому она, единственная, не проверяет task->ErrCode и выходит по job->result ПОСЛЕ записи данных
   (предполагая что начало данных в буфере с ошибкой всё же распаковано успешно)
4. WriterThread и WorkerThread устанавливают task->ErrCode
5. WriterThread перед выходом пихает NULL в FreeJobs и InputBuffers чтобы разбудить ReaderThread и дать ей проверить ErrCode



-mex1                                                                 -m1
Compressed 1 file, 690.514.620 => 273.913.476 bytes. Ratio 39.6%      Compressed 1 file, 690.514.620 => 270.728.786 bytes. Ratio 39.2%
Compression time: cpu 15.18 secs, real 4.36 secs. Speed 158.302 kB/s  Compression time: cpu 11.98 secs, real 9.97 secs. Speed 69.287 kB/s
Testing time: cpu 9.86 secs, real 2.79 secs. Speed 247.585 kB/s       Testing time: cpu 7.78 secs, real 7.82 secs. Speed 88.358 kB/s

-mex2                                                                 -m2
Compressed 1 file, 690.514.620 => 224.948.347 bytes. Ratio 32.5%      Compressed 1 file, 690.514.620 => 213.875.449 bytes. Ratio 30.9%
Compression time: cpu 41.82 secs, real 11.58 secs. Speed 59.645 kB/s  Compression time: cpu 47.60 secs, real 45.14 secs. Speed 15.297 kB/s
Testing time: cpu 11.73 secs, real 3.40 secs. Speed 202.973 kB/s      Testing time: cpu 9.89 secs, real 9.89 secs. Speed 69.855 kB/s

-mex3                                                                 -m3
Compressed 1 file, 690.514.620 => 204.953.651 bytes. Ratio 29.6%      Compressed 1 file, 690.514.620 => 189.380.756 bytes. Ratio 27.4%
Compression time: cpu 71.81 secs, real 19.28 secs. Speed 35.808 kB/s  Compression time: cpu 118.19 secs, real 116.48 secs. Speed 5.928 kB/s
Testing time: cpu 19.31 secs, real 5.30 secs. Speed 130.212 kB/s      Testing time: cpu 16.82 secs, real 16.96 secs. Speed 40.726 kB/s

-mex4                                                                 -m4
Compressed 1 file, 690.514.620 => 186.885.523 bytes. Ratio 27.0%      Compressed 1 file, 690.514.620 => 175.300.927 bytes. Ratio 25.3%
Compression time: cpu 214.63 secs, real 55.79 secs. Speed 12.378 kB/s Compression time: real 204.83 secs. Speed 3.371 kB/s
Testing time: real 5.19 secs. Speed 132.945 kB/s                      Testing time: cpu 16.49 secs, real 16.63 secs. Speed 41.535 kB/s

                                                                      -mx -ld96m
                                                                      Compressed 1 file, 690.514.620 => 168.735.477 bytes. Ratio 24.4%
                                                                      Compression time: cpu 557.31 secs, real 355.63 secs. Speed 1.942 kB/s
                                                                      Testing time: cpu 15.66 secs, real 15.89 secs. Speed 43.450 kB/s


-mex4                                                                 -m3
Compressed 1 file, 100.000.000 => 23.846.866 bytes. Ratio 23.8%       Compressed 1 file, 100.000.000 => 23.894.399 bytes. Ratio 23.8%
Compression time: cpu 25.68 secs, real 7.47 secs. Speed 13.392 kB/s   Compression time: cpu 18.24 secs, real 11.40 secs. Speed 8.771 kB/s
Testing time: cpu 18.27 secs, real 4.92 secs. Speed 20.342 kB/s       Testing time: cpu 16.97 secs, real 5.99 secs. Speed 16.708 kB/s

-mex5                                                                 -m4
Compressed 1 file, 100.000.000 => 23.020.387 bytes. Ratio 23.0%       Compressed 1 file, 100.000.000 => 22.921.358 bytes. Ratio 22.9%
Compression time: cpu 44.55 secs, real 18.90 secs. Speed 5.291 kB/s   Compression time: cpu 33.48 secs, real 33.23 secs. Speed 3.009 kB/s
Testing time: cpu 36.89 secs, real 11.17 secs. Speed 8.953 kB/s       Testing time: cpu 26.79 secs, real 26.48 secs. Speed 3.777 kB/s

                                                                      rar -mc14:128t
                                                                      23,550,939 bytes, 49/45 seconds






                                              time, sec
dll100.dll              mc-tor3   37 703 680  0.96
dll100.dll              mc-tor5   31 031 296  2.3
dll100.dll      mc-tor5-16m-h1m   33 943 552  1.5
dll100.dll       mc-tor5-1m-h1m   34 353 820  1.01     -- -m1    now 1.87 secs, 41.279 mb         4x4 tor:5:1m:h1m
dll100.dll    mc-tor5-1m-h1m-l8   34 168 604  1.13
dll100.dll       mc-tor5-2m-h2m   33 566 720  1.42
dll100.dll          mc05-1m-h1m   33 212 777  2.5
dll100.dll                 mc07   29 069 583  4.6
dll100.dll                 mc08   28 968 534  4.2
dll100.dll              mc08-2m   29 093 127  3.5      -- -m2    now 7.02 secs, 29.656 mb         4x4 lzma:8mb:8:mc4:h2m:a0
dll100.dll                  mc5   29 276 506  4.6
dll100.dll                  mc6   28 463 104  5.3
dll100.dll                  mc7   28 021 187  5.8
dll100.dll                  mc8   27 691 600  6.3
dll100.dll                mca16   27 042 365  8
dll100.dll              mca16-8   26 882 419  8.6      -- -m3    now 15.62 secs, 26.494 mb        4x4 lzma:8mb:16:mc8:h4m
dll100.dll              mca32-8   26 652 921  9.8
dll100.dll              mca32a0   28 429 660  5


mdb.o                   mc08-2m   11 091 968  1.5


-m3t - не хватает многопоточности на выходе dict и в lzp
-m2t - использовать словарь 512k для ускорения распаковки? -10% сжатие
-m1t - ? всё зависит от скорости, которую должен иметь -m1








timer 4x4 lzma:8mb:12:mc4:h4m a.arc dll100.dll.mc4
timer 4x4 lzma:8mb:5:mc4:h4m a.arc dll100.dll.mc4
timer 4x4 lzma:8mb:6:mc4:h4m a.arc dll100.dll.mc6
timer 4x4 lzma:8mb:5:mc4:h4m a.arc dll100.dll.mc5
timer 4x4 lzma:8mb:8:mc4:h4m a.arc dll100.dll.mc8
timer 4x4 lzma:8mb:7:mc4:h4m a.arc dll100.dll.mc7
timer 4x4 lzma:8mb:7:mc4:h4m:a0 a.arc dll100.dll.mc07
timer 4x4 lzma:8mb:8:mc4:h4m:a0 a.arc dll100.dll.mc08
timer 4x4 lzma:8mb:5:mc4:h4m:a0 a.arc dll100.dll.mc05
timer 4x4 lzma:8mb:8:mc8:h4m:a0 a.arc dll100.dll.mc088
timer 4x4 lzma:8mb:8:mc4:h2m:a0 a.arc dll100.dll.mc08-2m
timer 4x4 lzma:8mb:8:mc4:h1m:a0 a.arc dll100.dll.mc08-1m
timer 4x4 lzma:8mb:16:mc4:h4m a.arc dll100.dll.mca16
timer 4x4 lzma:8mb:32:mc8:h4m a.arc dll100.dll.mca32
timer 4x4 lzma:8mb:32:mc8:h4m:a0 a.arc dll100.dll.mca32a0
timer 4x4 lzma:8mb:32:mc4:h4m a.arc dll100.dll.mca32-4
timer 4x4 lzma:8mb:16:mc8:h4m a.arc dll100.dll.mca16-8
timer 4x4 lzma:8mb:16:mc16:h4m a.arc dll100.dll.mca16-16
timer 4x4 lzma:8mb:16:mc8:h8m a.arc dll100.dll.mca16-8-h8m
timer 4x4 lzma:8mb:16:mc8:h2m a.arc dll100.dll.mca16-8-h2m
timer 4x4 lzma:8mb:16:mc8:h1m a.arc dll100.dll.mca16-8-h1m
timer 4x4 lzma:1mb:5:mc4:h1m:a0 a.arc dll100.dll.mc05-1m-h1m
timer 4x4 lzma:1mb:5:mc2:h1m:a0 a.arc dll100.dll.mc05-1m-h1m
timer 4x4 lzma:1mb:5:mc1:h1m:a0 a.arc dll100.dll.mc05-1m-h1m
timer 4x4 lzma:512k:5:mc1:h512k:a0 a.arc dll100.dll.mc05-1m-h1m
timer 4x4 tor:3 a.arc dll100.dll.tor
timer 4x4 tor:3 a.arc dll100.dll.mc-tor
timer 4x4 tor:3 a.arc dll100.dll.mc-tor3
timer 4x4 tor:5 a.arc dll100.dll.mc-tor5
timer 4x4 tor:5:1m:h1m a.arc dll100.dll.mc-tor5-1m-h1m
timer 4x4 tor:5:16m:h1m a.arc dll100.dll.mc-tor5-16m-h1m
timer 4x4 tor:5:2m:h1m a.arc dll100.dll.mc-tor5-2m-h1m
timer 4x4 tor:5:2m:h2m a.arc dll100.dll.mc-tor5-2m-h2m
timer 4x4 tor:5:1m:h2m a.arc dll100.dll.mc-tor5-1m-h2m
timer 4x4 tor:5:1m:h1m:l6 a.arc dll100.dll.mc-tor5-1m-h1m-l6
timer 4x4 tor:5:1m:h1m:l8 a.arc dll100.dll.mc-tor5-1m-h1m-l6
timer 4x4 tor:5:1m:h1m:l8 a.arc dll100.dll.mc-tor5-1m-h1m-l8
timer 4x4 tor:3 dll100.dll dll100.dll.mc-tor3
timer 4x4 tor:3:512k:h512k:l4 dll100.dll dll100.dll.mc-tor3-512k
timer 4x4 tor:3:512k:h512k dll100.dll dll100.dll.mc-tor3-512k
t 4x4v2.exe  tor:3:512k:h512k dll100.dll dll100.dll.mc-tor3-512ka
timer C:\!\FreeArchiver\Compression\_Examples\4x4.exe  tor:3:512k:h512k dll100.dll dll100.dll.mc-tor3-512ka
timer 4x4 tor:3:512k:h512k:c4 dll100.dll dll100.dll.mc-tor3-512kc
timer 4x4 tor:4:512k:h512k dll100.dll dll100.dll.mc-tor4-512k
timer 4x4 tor:4 dll100.dll dll100.dll.mc-tor4-512k
timer 4x4 tor:3:h512k dll100.dll dll100.dll.mc-tor3-h512k
timer 4x4 tor:3:h256k dll100.dll dll100.dll.mc-tor3-256k
timer 4x4 tor:3:l4 dll100.dll dll100.dll.mc-tor3-l4
timer C:\!\FreeArchiver\Compression\_Examples\4x4v03a.exe  tor:3:l4 dll100.dll dll100.dll.mc-tor3-l4
timer C:\!\FreeArchiver\Compression\_Examples\4x4v03a.exe  tor:3 dll100.dll dll100.dll.mc-tor3-l4
