![]() |
MTX - The Universal Accelerator
10 Attachment(s)
https://i.ibb.co/k2VpTrJj/hh.png MTX v0.3 Universal Multi-Threading Accelerator for FreeArc External Compressors Windows x64 · single exe, no dependencies · by BLACKFIRE69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ OVERVIEW Many of the strongest external compressors (precomp, mpz, rz, nz, srep …) are single-threaded: on a modern multi-core CPU they leave most of the machine idle. MTX sits between FreeArc and the compressor, splits the archive data stream into fixed-size chunks, runs N parallel instances of the compressor on those chunks, and merges the results back into one sequential stream — in guaranteed original order. One config line turns a single-threaded compressor into an all-cores compressor. ▌ TECHNICAL SPECIFICATIONS
Wrapped-tool I/O modes (auto-detected from the method's command lines): Code:
╭───────────────┬────────────────────────┬───────────────────────────────╮256 MB of heterogeneous data compressed with zstd -17 as the wrapped single-threaded compressor. v0.3 was run with --progress=off --toolProgress=off; each version round-trips its OWN archive (SHA-256 verified identical). Code:
╭──────────────────────┬─────────┬─────────┬─────────╮▌ KEY FEATURES ✦ True Parallel Compression -t# Continuous reader/workers/writer pipeline — chunks are read, compressed and written simultaneously by N parallel tool instances (-t#, default -t100p = one per logical core). The slowest chunk never stalls the rest. ✦ Guaranteed Stream Order Output chunks are always written in the original input order, whatever order the workers finish in. FreeArc sees one opaque sequential stream. ✦ Memory Budgeting --mem= --mem=8g sets a total RAM budget for chunks in flight (default: half of free RAM). --toolMem=2g declares how much RAM one tool instance needs — MTX then starts only as many instances as the machine can hold. A memory-hungry tool like rz can no longer freeze the whole system at -t100p. ✦ Safe Archive Format (MTX2) Magic + version header, per-chunk frames carrying both sizes and a CRC32 checksum, explicit end marker with chunk count and total size. Damaged, truncated or foreign data is detected and reported — never silently unpacked into garbage. ✦ Independent Thread Counts Every chunk frame is self-describing, so compression and decompression thread counts are fully independent. Pack with -t2 on a mid-range PC, unpack with -t16 on a high-end gaming PC. ✦ Live Status Display A gray "#[#]" line above the MTX status shows the wrapped compressor's OWN live progress for the chunk currently gating the output; file-based tools get a per-chunk pseudo-console so they report progress even when piped. --progress=on|auto|off controls the whole display; --toolProgress=auto|on|off controls just the tool line. Errors always print regardless. ✦ Machine-Global Config (MTX.ini) An optional MTX.ini next to the exe carries per-machine defaults (threads, chunk, mem, toolMem, okcodes, tempPath, basePath, cfgFile, progress, logs). Anything on the command line overrides it, so shared configs stay minimal and machine tuning lives next to the exe. ✦ Strict Error Contract Tool failures, I/O errors and archive damage reach FreeArc as a nonzero exit code with a clear message: 0 = OK, 1 = runtime error, 2 = usage/config error, 3 = archive damaged. MTX never exits 0 after a failure, so FreeArc never finalizes a broken archive. ✦ Tolerant Tool Handling --okcodes=0,2 accepts benign nonzero exit codes (precomp exits 2 when it finds nothing to precompress). Tool stderr is passed through, so the wrapped compressor's own messages stay visible. ✦ Collision-Free Temp Handling Every parallel instance works in its own private temp directory — file-based tools and scratch-file writers (srep) cannot overwrite each other. --tempPath="X:\MyTemp" redirects all temp I/O to a chosen drive. ✦ Per-Method Defaults In an MTX-only config file, a method section can carry its own defaults: okcodes, mtxthreads, mtxchunk, mtxmem. Command-line flags always win. ✦ Session Logging --logs appends a timestamped session log (resolved options, per-chunk timings, child command lines) to MTX.log next to the exe. ▌ COMMAND REFERENCE Code:
MTX64.exe <Command> <Options> [Settings] Input OutputExample 1 — Wrap a method in FreeArc's arc.ini Code:
; the plain single-threaded methodCode:
MTX64.exe a -mprecomp -c128m -t100p - - <stdin> <stdout>Code:
MTX64.exe a -mrz -c64m -t100p --toolMem=2g --mem=8g - - <stdin> <stdout>Code:
MTX64.exe a -mprecomp -c64m --okcodes=0,2 data.tmp packed.tmpCode:
[External compressor:rz64]Example 6 — Maximum throughput (MTX status on, tool line off) Code:
MTX64.exe a -mzstd -c8m -t100p --progress=on --toolProgress=off - - <stdin> <stdout>▌ DISTRIBUTION FILES
▌ NOTES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ Feedback, bug reports, and edge cases are all welcome. . |
If anyone wants an example of "Inno setup" for MTX.exe, just let me know. ;)
|
MTX console version works perfectly. Also I was tested MCM works perfectly.
|
Masks
MTX.exe supports MASKS (Arc.Groups)
Quote:
|
Quote:
|
Quote:
Different methods are specified with groups, which you can write yourself into the file "arc.groups" next to your arc.exe for compression. Write your group as example: Code:
$nameofgroupCode:
srep+lolz/$nameofgroup=rzx |
Quote:
|
MTX.exe Feature update
MTX.exe Feature update v.3.0.0.0 What's New:
Additional Options For both Compression and the Decompression: Code:
-----------------------------------------------------------------------------_ |
Oh, thank you!
Can I have an example or small guide to adapt Inno/ASIS to this please? I'm probably doing something wrong with my frankenstein script lol Edit/question: Is Xlolz working multithreading via MTX? It doesn't seem for me. Edit2: It works with fixed thread count and not % like default (?) |
Quote:
You can't use "XLolz" via "MTX" (because both are accelerators). but it supports "MTX + Lolz". ok, I'll give you some examples for both INNO Setup and Lolz with MTX. |
Quote:
Quote:
So.. Something works but not well Using unpack.bat Quote:
|
Quote:
|
New Update
MTX v.5.0.0.0 - October Update
Code:
Example:=
Code:
Example:=
Code:
Example:=
Code:
Code:
MTX Variables:Will show some errors in nanozip decompression with MTX.exe. therefore it is better to use cls-nzx.dll instead of MTX.exe. ;) guys, I don't have enough space to upload it here. so use this link.... MTX v5.0.0.0 + Full Examples.rar _ |
@BLACKFIRE69, very good the new key default options in example 5.
It will be very useful for the need to use MRX.ini. Thanks for the great job. If you have both configurations, which one will be used? I mean if you have MTX.ini configured in one way and use the key default with --mainpath, etc. in another way, which one will be used? |
Quote:
means, If MTX.ini is not configured, it uses the default keys. |
Quote:
DiskSpan_x64.ini: Code:
[External compressor:mpz,MPZ,mpzapi,MPZAPI]MTX.ini Code:
[MTX]Will the "-c:64m -t:100p" settings be applied to MTX.exe, or will they be ignored? Thanks! |
Quote:
ok cesar, we use MTX.ini to define only "MainPath", "ConfigFile" and "TempPath". let us consider, if MTX.exe doesn't find any MTX.ini near MTX.exe, it will look for MTX.exe options ( --mainpath, --config and --tmppath). if those options are also not found, it uses its default values. in your case, there is MTX.ini next to MTX.exe. therefore, the "--mainpath", "--config" and "--tmppath" options will be ignored. but the only place to set values for "-t:" and "-c:" is the command line. so nothing can ignore those values. finally, MTX.exe will ignore some options as the code below because you have used MTX.ini. (Marked in red). Code:
[External compressor:mpz_mtx,MPZ_MTX,mpzapi_mtx,MPZAPI_MTX]Extra: (not related to the question) during decompression, MTX.exe doesn't retrieve values for "ChunkSize" from users. therefore it is better to use as follows. :) Code:
[External compressor:mpz_mtx,MPZ_MTX,mpzapi_mtx,MPZAPI_MTX] |
Help BlackFire69
first thing thanks to you for this tool and other cls
i need IS example to unpack compressed data by mtx and thanks |
Quote:
here is the basic inno example for MTX v5.0.0.0. note that the two arc.ini files in the "Compressor" folder and the "IS_Example" folder are different. ;) MTX v5.0.0.0 Inno Example.rar |
MTX v5.1.0.0 New Update Test.
MTX v5.1.0.0 New Update Test
it's time for a new update. :D you guys, can you do some testing for me? TESTS:
Arc.ini Code:
; //================== FreeArc =================\\i'll attach the MTX v5.1.0.0 test files. thanks @dixen for the idea. _ |
Code:
MTX |
Thanks to BLACKFIRE69 for update but...tests..Not particularly impressive
patchpack002\dlc.rpf MTX+OO2RECK (pack) Quote:
Quote:
Quote:
Quote:
|
Guys, try with more chunk sizes.
-c:128mb -c:256mb -c:512mb |
Same file, chunk size 256
Unpack Quote:
Quote:
|
Quote:
It seems to be MTX is 0.58 mb/s faster than the original version right ? ( for chunk = 256mb ) |
Quote:
|
MTX + Lolz may work well in high chunk sizes.
|
1 Attachment(s)
Isn't the oodle precompressor multi threaded already? :confused:
I made the tool in such a way that there no streams being cut off when chunking takes place because the program knows what it is doing and how it should make cuts in the chunks, if for example there is a stream that can be cut off at a certain position, the program self adjusts the position and your chunking method makes no such considerations and gets in the way of how the program should work in the first place which makes it prone to crashes or a drop in ratio. :o Multi threading a multi threaded program does not make it faster especially if the main program uses all of the cpu, furthermore your MTX does not prepare chunks in advance which could be the reason it doesn't work very well. Compare the speeds of MTX vs Freearc's 4x4 I'll also leave this here Attachment 28232 I can't believe this community has been reduced to this, I don't know if I should find this funny or be sad that there are no new inventions will be made. :( I would totally understand if the community gets excited every time EA Sports releases FIFA every year :D |
no more developments. it doesn't seem to be useful.
@mods, plz delete this thread. |
I wonder what makes you cease the development of your project, I just pointed out that using MTX on already multi threaded programs may have such an issue of being slower than when run natively. I wouldn't have said anything if you had figured out a smarter way of making the precompressor making sure it stays at 100% because there are times when it doesn't fully utilize the cpu furthermore there is also overutilization because the precompressor would be using all of the cpu while MTX is also making several instances of the program and now you have the problem of system being unresponsive. Your project has its uses just not handling multi threaded programs, you'd need to come up with a better solution for this.
|
What people thinks development is? Remaking old projects with more bugs and making non sense project is not development. If you can make something new that's development, even if you remake and make something better than before that's development. Posting same thing over and over again by changing a bit of information is spamming, not development.
|
Sorry for bothering mr.BLACKFIRE, This may be a useful thread but we can't find the download section here. so please reupload it.
Thank you. |
Hi,
I tried to use the settings in the snapshot, which should be using precomp048.exe but when I test a packing, method called is MTXprecomp048 -> calls method precomp048 -> calls precomp048.exe however it is reporting error with precomp038.exe in the same directory. It is MTX 5.0.0.0 https://i.ibb.co/qxF1j5m/2021-02-07-031238.png |
Quote:
|
Thanks, that could explain part of it.
But why it would invoke precomp038.exe? Is MTX parsing every external compressor defined in arc.ini as well as try to load them once to build some kind of lookup table into memory for later use? |
Quote:
precomp048+srep+lolz64 works precomp048+srep+LolzMTX ERROR: general (de)compression error in LolzMTX precomp048+srep+rz64 works precomp048+srep+RazorMTX ERROR: general (de)compression error in RazorMTX precomp048+srep+bcm32 ERROR: general (de)compression error in bcm32 precomp048+srep+BcmMTX works It is a bit strange that, if not using MTX it works, using MTX will make it not working. If not using MTX doesn't work, using MTX will make it work? Is it because of the input output in the settings? Another test for PrecompMTX+srep+ any normal or MTX final compressor none works. The console / log doesn't say why at all. It seems as soon as MTX invokes precomp, it exits/crashes. The temp folder for precomp has been created, only the 0 folder has 512KB file, all others are 0 |
MTX New Update v5.0.0.1
MTX New Update v5.0.0.1 What's new: MTX v5.0.0.1
Example contains:
|
^^
Thanks for the MTX update. But in freearc alpha build struggled with Antivirus:(. If we turnoff all Ok:rolleyes: |
Quote:
|
Quote:
|
| All times are GMT -7. The time now is 01:15. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com