@bplus
This is a neat addition to the language. I have it in V. 1.3. Back in the day, I had to make my own routine. I dragged a copy of FreeBASIC in it once, by mistake, which created a memory incident. It returned an "Are you out of your mind," error.
Pete
Welcome aboard, @Sanmayce! Cool to see you're already getting it going with several modern keywords as well! Looking forward to your future contributions.
@Sanmayce
Welcome. I like GUI the stuff, too. I've got a project I'm working on currently, posted over at the QBasic forum. Since you're an old-timer, do you remember that forum? Network54 used to host it. Now it's on Tapatalk. Mallord was the first admin, followed by Mac, and Mac turned it over to me, when he passed away in 2008. Anyway, I'm just curious if you recall it, or Pete's QBasic forum, or any of the others back in the day.
Pete
@Sanmayce welcome! I did not know or see demo of _ACCEPTFILEDROP, thanks! Hopefully we can drop in more than one file eventually.
Fellippe, I bend a knee before you. resurrecting QB is just awesome! Many beers I owe you.
As far as I recall, only said this once back, to another developer - a true master of coding compression in C.
Really enliked your presentation about 'InForm', please consider doing such reviews more often, at least not stopping them:
https ://www.youtube.com/watch?v=S3D4zEUQ0sQ&list=PLD7-OthpyuXNbrB12Cl5_3vBpRtvN7CA8&index=5
Nice work with this Form Designer, wanna try it after some weeks, my tempo is slow but ongoing, a real fan here, that is.
We all bend our knees before @Galleon, the guy who created QB64 in the first place. I'm barely part of the team. He does come around from time to time.
I'm so glad you enjoyed InForm! That's truly my code baby. Let me know if I can be of any assistance with it.
My passion is text processing of huge English text, searching, decompressing, indexing them in order to ease quick n-gram requests i.e. to have spell-checkers, and ... phrase-checkers of English texts under the fingers.
C and QB64 are so instrumental in that regard, eager to pursue this dream of mine...
25 years ago I wrote some original tools in QB45 + MASM functions
Thanks Sanmayce
You will like the fact that QB64 string size is over 2GB
Did you ever use DOS interrupts . Ralf Brown interrupt list etc?
Steve is spot on when it comes to using BINARY for speed. Just be sure to keep using your IF _FILEEXISTS condition statement. Unlike OPEN for INPUT, which errors out if the file doesn't exist, Open for BINARY just creates the file. BINARY can also be used to write to the file, but you have to use PUT statements. QB64 added the ability to use LINE INPUT instead of the standard GET statements, so all you have to do is swap out the FOR INPUT to FOR BINARY. Y0u already have the _FILEEXISTS, so you should be good to go.
REDIM FileArray$(1 TO 100000)
LongestLine = 0
IF _FILEEXISTS(a$) THEN
PRINT: PRINT "Loading..."
_DISPLAY
filecount = 0
OPEN a$ FOR BINARY AS #1
DO UNTIL EOF(1)
LINE INPUT #1, l$
filecount = filecount + 1
IF UBOUND(FileArray$) < filecount THEN REDIM _PRESERVE FileArray$(1 TO UBOUND(FileArray$) + 100000)
LINE INPUT #1, FileArray$(filecount)
IF LEN(FileArray$(filecount))) > LongestLine THEN LongestLine = LEN(FileArray$(filecount))
LOOP
CLOSE #1
REDIM FileArray$(1 TO filecount)
Very thoughtfully written. Even takes into account displaying well on old laptops like mine.
Nice work.
- Dav
In order to have tons faster loading, loading in 5000+ seconds should be dropped to 5 seconds, a ton being a thousand, you know.
(forked from the awesome WATCOM C) many years ago which works exactly the same with Windows and Linux, it is called Yoshi.exe or Youshi.elf, the .C source is also included in the attached to this post package. Basically, it lists all the files in current folder recursively, that is, giving us (optionally with full paths)
I did the same thing but wrote in assembler. It saves all the file names with full paths in a file for later processing. Walks the files on any USB stick or hard drive and it is fast.
Dictionary source: Medieval Glossary. More: English to English translation of masakari. (masa-kari) is the Japanese word for an "axe" or a "hatchet", and is used to describe various tools of similar structure. As with axes in other cultures, ono are sometimes employed as weapons.
What is Masakari anyway?
[Schizandrafield 1-gram Corpus, revision C, derives from next corpora:]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Corpus Tag, Name | Corpus size (in bytes) | Total Words | Unique Words | Needed memory to rip in a single pass |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| AHD, American_Heritage_Dictionary_4_(En-En)_WHOLEWORDS.dsl | 41,742,099 | 7,083,439 | 176,377 | 16,512KB |
| BNC, Machine-Learning_British-National-Corpus_XML-edition.tar | 4,680,140,800 | 980,238,337 | 367,921 | 34,389KB |
| BRE, Britannica_Encyclopedia_2010_1.563_miled_(En-En)_ANSI.dsl | 297,981,779 | 46,958,317 | 356,417 | 33,322KB |
| CAL, Cambridge_Advanced_Learner's_Dictionary_4th_Ed_(En-En).dsl | 76,257,922 | 13,994,351 | 57,787 | 5,417KB |
| CCA, Collins_COBUILD_Advanced_Learner's_English_Dictionary_(5th_ed)_(En-En)_WHOLEWORDS.dsl | 22,960,485 | 4,553,432 | 61,575 | 5,772KB |
| DMC, DeepMind_Q_and_A_Dataset_cnn_downloads_(92579_files).tar | 7,270,204,928 | 988,686,300 | 499,244 | 46,623KB |
| DMD, DeepMind_Q_and_A_Dataset_dailymail_downloads_(219506_files).tar | 59,019,643,392 | 7,533,039,068 | 886,887 | 82,582KB |
| EDR, encyclopediadramaticase-20150628-current.tar | 302,959,104 | 41,642,066 | 456,251 | 42,635KB |
| EJD, Encyclopaedia_Judaica_(in_22_volumes)_TXT.tar | 107,784,192 | 16,158,364 | 195,273 | 18,281KB |
| EJN, ENAMDICT_Japanese_names | 26,392,511 | 1,645,705 | 343,460 | 32,106KB |
| FDU, For_Dummies_978-ebooks_Collection.tar | 811,308,544 | 122,351,592 | 302,353 | 28,282KB |
| GGB, Google_Books_corpus_version_20130501_English_All_Nodes.txt | 10,624,363,237 | 178,439,407 | 7,477,257 | 664,635KB |
| HCN, Hacker_News_2006_to_2017-jul.json | 7,046,506,518 | 1,075,832,079 | 2,188,058 | 201,838KB |
| IST, INTERNET_SACRED_TEXT_ARCHIVE_DVD-ROM_9_(English_140479_htm_files).tar | 2,037,880,832 | 304,410,076 | 1,333,036 | 123,688KB |
| LDC, Longman_Dictionary_of_Contemporary_English_5th_Ed_(En-En)_WHOLEWORDS.dsl | 52,870,741 | 9,722,686 | 85,217 | 7,987KB |
| MCD, Macmillan_English_Dictionary_(En-En)_.dsl | 79,686,074 | 11,750,813 | 67,340 | 6,312KB |
| MCT, Macmillan_English_Thesaurus_(En-En).dsl | 29,580,755 | 4,650,089 | 39,528 | 3,708KB |
| NSO, New_Shorter_Oxford_English_Dictionary_fifth_edition.tar | 132,728,832 | 25,920,769 | 259,990 | 24,321KB |
| OED, Oxford_English_Dictionary_2nd_Edition_Version_4_(En-En)_WHOLEWORDS.dsl.txt | 564,235,251 | 101,798,550 | 1,089,240 | 101,214KB |
| OSH, OSHO.TXT | 206,908,949 | 31,957,006 | 58,893 | 5,522KB |
| PGT, Project_Gutenberg_DVD-2010_(29180_files).tar | 11,110,769,152 | 1,870,216,915 | 3,847,963 | 350,566KB |
| RDD, Reddit_Comments_(JSON_objects)_from_(2005-12_to_2018-01).json | 2,277,975,364,152 | 333,829,940,270 | 689,949,388 | 54,703,959KB |
| RHW, Random_House_Webster's_Unabridged_Dictionary_(En-En)_.dsl | 53,483,152 | 9,367,457 | 282,580 | 26,428KB |
| SNT, Machine-Learning_WestburyLab.NonRedundant.UsenetCorpus_(47860_English_language_non-binary-file_news_groups).tar | 39,513,013,248 | 6,316,689,948 | 4,835,188 | 437,662KB |
| STX, archive.org_stackexchange_(346_corpora_2017-Oct-12).tar | 274,935,801,856 | 38,077,068,727 | 29,194,792 | 2,344,214KB |
| TAL, the-anarchist-library-2016-01-18-en_html.tar | 153,703,936 | 24,339,935 | 136,000 | 12,738KB |
| TXF, TEXTFILES.COM_(58096_files).tar | 1,382,122,496 | 192,893,874 | 1,008,780 | 93,840KB |
| URB, Machine-Learning_Urban_Dictionary_Definitions_Corpus_(1999_-_May-2016).words.json | 1,917,822,288 | 263,253,093 | 2,631,962 | 241,852KB |
| WKD, dumps.wikimedia.org_Germany_dewiki-20180220-pages-articles.xml | 18,954,897,343 | 2,362,729,484 | 17,415,343 | 1,467,593KB |
| WKE, dumps.wikimedia.org_English_enwiki-20180220-pages-articles.xml | 65,865,333,874 | 8,739,196,084 | 39,440,894 | 3,071,920KB |
| WKF, dumps.wikimedia.org_France_frwiki-20180220-pages-articles.xml | 17,802,386,071 | 2,429,769,009 | 12,192,025 | 1,055,599KB |
| WKI, dumps.wikimedia.org_Italy_itwiki-20180220-pages-articles.xml | 10,887,321,918 | 1,372,430,005 | 8,960,466 | 790,544KB |
| WKN, dumps.wikimedia.org_Netherlands_nlwiki-20180220-pages-articles.xml | 6,808,875,477 | 800,283,886 | 8,596,100 | 760,225KB |
| WKP, dumps.wikimedia.org_Portugal_ptwiki-20180220-pages-articles.xml | 6,891,588,341 | 940,571,722 | 6,736,349 | 602,633KB |
| WKS, dumps.wikimedia.org_Spain_eswiki-20180220-pages-articles.xml | 12,200,295,384 | 1,682,091,803 | 9,780,910 | 858,723KB |
| WMB, dumps.wikimedia.org_English_enwikibooks-20180220-pages-articles.xml | 641,413,774 | 94,801,223 | 971,592 | 90,438KB |
| WMN, dumps.wikimedia.org_English_enwikinews-20180220-pages-articles.xml | 201,872,863 | 27,328,349 | 404,890 | 37,839KB |
| WMP, dumps.wikimedia.org_English_specieswiki-20180220-pages-articles.xml | 1,009,303,358 | 107,856,282 | 2,765,079 | 254,016KB |
| WMQ, dumps.wikimedia.org_English_enwikiquote-20180220-pages-articles.xml | 410,396,147 | 64,809,361 | 561,894 | 52,455KB |
| WMS, dumps.wikimedia.org_English_enwikisource-20180220-pages-articles.xml | 8,352,677,820 | 1,282,920,260 | 8,547,509 | 755,716KB |
| WMU, dumps.wikimedia.org_English_enwikiversity-20180220-pages-articles.xml | 369,987,893 | 52,322,592 | 640,606 | 59,767KB |
| WMV, dumps.wikimedia.org_English_enwikivoyage-20180220-pages-articles.xml | 354,919,743 | 49,701,293 | 734,403 | 68,474KB |
| WMW, dumps.wikimedia.org_English_enwiktionary-20180220-pages-articles.xml | 5,379,842,566 | 597,315,425 | 14,743,543 | 1,259,179KB |
| WUD, Webster's_Unabridged_3_(En-En)_WHOLEWORDS_ANSI.dsl | 134,706,719 | 24,014,478 | 364,352 | 34,052KB |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Schizandrafield 1-gram Corpus, revision C, holds within next tagged-counted-wordlists:]
237,859,509 dumps.wikimedia.org_Spain_eswiki-20180220-pages-articles.1gram
161,745,186 dumps.wikimedia.org_Portugal_ptwiki-20180220-pages-articles.1gram
211,751,899 dumps.wikimedia.org_Netherlands_nlwiki-20180220-pages-articles.1gram
216,667,608 dumps.wikimedia.org_Italy_itwiki-20180220-pages-articles.1gram
969,819,544 dumps.wikimedia.org_English_enwiki-20180220-pages-articles.1gram
452,471,230 dumps.wikimedia.org_Germany_dewiki-20180220-pages-articles.1gram
294,822,021 dumps.wikimedia.org_France_frwiki-20180220-pages-articles.1gram
23,100,108 dumps.wikimedia.org_English_enwikibooks-20180220-pages-articles.1gram
204,113,124 dumps.wikimedia.org_English_enwikisource-20180220-pages-articles.1gram
9,347,743 dumps.wikimedia.org_English_enwikinews-20180220-pages-articles.1gram
13,259,587 dumps.wikimedia.org_English_enwikiquote-20180220-pages-articles.1gram
15,131,207 dumps.wikimedia.org_English_enwikiversity-20180220-pages-articles.1gram
18,031,161 dumps.wikimedia.org_English_enwikivoyage-20180220-pages-articles.1gram
355,881,851 dumps.wikimedia.org_English_enwiktionary-20180220-pages-articles.1gram
65,846,403 dumps.wikimedia.org_English_specieswiki-20180220-pages-articles.1gram
4,653,581 Encyclopaedia_Judaica_(in_22_volumes)_TXT.1gram
8,889,960 Webster's_Unabridged_3_(En-En)_WHOLEWORDS_ANSI.dsl.1gram
3,288,498 the-anarchist-library-2016-01-18-en_html.tar.1gram
6,973,687 Random_House_Webster's_Unabridged_Dictionary_(En-En)_.dsl.1gram
26,501,920 Oxford_English_Dictionary_2nd_Edition_Version_4_(En-En)_WHOLEWORDS.dsl.txt.1gram
1,404,700 OSHO.TXT.1gram
6,280,919 New_Shorter_Oxford_English_Dictionary_fifth_edition.tar.1gram
941,039 Macmillan_English_Thesaurus_(En-En).dsl.1gram
1,609,423 Macmillan_English_Dictionary_(En-En)_.dsl.1gram
2,044,933 Longman_Dictionary_of_Contemporary_English_5th_Ed_(En-En)_WHOLEWORDS.dsl.1gram
7,354,174 For_Dummies_978-ebooks_Collection.tar.1gram
11,464,911 encyclopediadramaticase-20150628-current.tar.1gram
8,840,362 ENAMDICT_Japanese_names.1gram
1,466,506 Collins_COBUILD_Advanced_Learner's_English_Dictionary_(5th_ed)_(En-En)_WHOLEWORDS.dsl.1gram
1,380,759 Cambridge_Advanced_Learner's_Dictionary_4th_Ed_(En-En).dsl.1gram
8,621,181 Britannica_Encyclopedia_2010_1.563_miled_(En-En)_ANSI.dsl.1gram
4,268,314 American_Heritage_Dictionary_4_(En-En)_WHOLEWORDS.dsl.1gram
186,006,261 Google_Books_corpus_version_20130501_English_All_Nodes.1gram
32,262,044 INTERNET_SACRED_TEXT_ARCHIVE_DVD-ROM_9_(English_140479_htm_files).1gram
96,997,413 Project_Gutenberg_DVD-2010_(29180_files).1gram
24,179,167 TEXTFILES.COM_(58096_files).1gram
797,764,729 archive.org_stackexchange_(346_corpora_2017-Oct-12).1gram
8,823,193 Machine-Learning_British-National-Corpus_XML-edition.1gram
65,616,610 Machine-Learning_Urban_Dictionary_Definitions_Corpus_(1999_-_May-2016).words.1gram
120,939,472 Machine-Learning_WestburyLab.NonRedundant.UsenetCorpus_(47860_English_language_non-binary-file_news_groups).1gram
12,375,594 DeepMind_Q_and_A_Dataset_cnn_downloads_(92579_files).1gram
20,878,468 DeepMind_Q_and_A_Dataset_dailymail_downloads_(219506_files).1gram
16,261,229,827 reddit.1gram
54,744,506 Hacker_News_2006_to_2017-jul.json.1gram
[The way they were ripped:]
E:\Schizandrafield_workshop>dir dumps.wikimedia.org_English_enwiki-20180220-pages-articles.xml/b >dumps.wikimedia.org_English_enwiki-20180220-pages-articles.lst
E:\Schizandrafield_workshop>echo WKE>Leprechaun.tag
E:\Schizandrafield_workshop>Leprechaun_x-leton_32bit_Intel_01_008p.exe dumps.wikimedia.org_English_enwiki-20180220-pages-articles.lst dumps.wikimedia.org_English_enwiki-20180220-pages-articles.1gram 1399888 Y
...
E:\Schizandrafield_workshop>type dumps.wikimedia.org_English_enwiki-20180220-pages-articles.1gram|more
WKE_0,000,003_byjnf
WKE_0,000,001_richardmullaney
WKE_0,000,001_vfycdm
WKE_0,000,001_kaoudi
WKE_0,000,001_bzolqoptifgvgptya
WKE_0,000,016_bristolcombination
WKE_0,000,001_hermanaustinamstate
WKE_0,000,004_meweyqhwn
WKE_0,000,002_habsfrontcricket
WKE_0,000,001_hobergsclub
WKE_0,000,001_kwagedle
WKE_0,000,001_buvvhel
WKE_0,000,001_wnjyat
WKE_0,000,001_dilmenpeds
WKE_0,000,001_ovldtxrjaaqiy
...
E:\Schizandrafield_workshop>
[The way they were concatenated/sorted:]
C:\>copy/b *.1gram unsorted
C:\>sort.exe /+15 /M 1048576 /T d: "unsorted" /O "Schizandrafield_Corpus_revision_C_(44-corpora_-unique-words).sorted"
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>_Make_EXEs.bat
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>qb64 -c MASAKARI_r6_Fast_Vanilla.BAS
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>qb64 -c MASAKARI_r6_Fast_Wrapper.BAS
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>qb64 -c MASAKARI_r6_Slow_Vanilla.BAS
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>qb64 -c MASAKARI_r6_Slow_Wrapper.BAS
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>fc MASAKARI_r6_Fast_Vanilla.BAS MASAKARI_r6_Fast_Wrapper.BAS
Comparing files MASAKARI_r6_Fast_Vanilla.BAS and MASAKARI_R6_FAST_WRAPPER.BAS
***** MASAKARI_r6_Fast_Vanilla.BAS
WrapFlag = 0 ' 1 means wrapping
ToLoadOrNotFlag = 1 ' 1 means fast load but memory greedy; 0 means slow load but memory efficient
***** MASAKARI_R6_FAST_WRAPPER.BAS
WrapFlag = 1 ' 1 means wrapping
ToLoadOrNotFlag = 1 ' 1 means fast load but memory greedy; 0 means slow load but memory efficient
*****
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>fc MASAKARI_r6_Fast_Vanilla.BAS MASAKARI_r6_Slow_Vanilla.BAS
Comparing files MASAKARI_r6_Fast_Vanilla.BAS and MASAKARI_R6_SLOW_VANILLA.BAS
***** MASAKARI_r6_Fast_Vanilla.BAS
WrapFlag = 0 ' 1 means wrapping
ToLoadOrNotFlag = 1 ' 1 means fast load but memory greedy; 0 means slow load but memory efficient
***** MASAKARI_R6_SLOW_VANILLA.BAS
WrapFlag = 0 ' 1 means wrapping
ToLoadOrNotFlag = 0 ' 1 means fast load but memory greedy; 0 means slow load but memory efficient
*****
E:\_KAZE_Smxrt_Benchmarks\QB64_kit_v1.4_2.48 GB\qb64>fc MASAKARI_r6_Fast_Vanilla.BAS MASAKARI_r6_Slow_Wrapper.BAS
Comparing files MASAKARI_r6_Fast_Vanilla.BAS and MASAKARI_R6_SLOW_WRAPPER.BAS
***** MASAKARI_r6_Fast_Vanilla.BAS
WrapFlag = 0 ' 1 means wrapping
ToLoadOrNotFlag = 1 ' 1 means fast load but memory greedy; 0 means slow load but memory efficient
***** MASAKARI_R6_SLOW_WRAPPER.BAS
WrapFlag = 1 ' 1 means wrapping
ToLoadOrNotFlag = 0 ' 1 means fast load but memory greedy; 0 means slow load but memory efficient
*****
README.TXT
A quick .DIZ for Masakari, revision 6
Masakari is a free and open source tool with simplistic GUI aiming at sidekicking browsing text files in Linux/Windows command prompts.
This .ZIP package contains:
```
02/01/2021 03:16 PM 4,446 README.TXT ! This file
01/29/2021 03:05 PM 171 m ! Linux .sh file invokes yoshi and masakari
01/29/2021 03:05 PM 336,644 yoshi ! Linux .ELF 64bit
02/01/2021 06:43 PM 331,852 masakari ! Linux .ELF 64bit same as 'MASAKARI_r6_Fast_Vanilla_64bit'
02/01/2021 03:16 PM 1,453,926 ColumnChart.ico ! Needed during compilation
02/01/2021 03:16 PM 2,991 MEM.H ! Needed during compilation
02/01/2021 03:16 PM 492 m.bat ! Accepts wildcards, invokes Yoshi.exe and MASAKARI_r6_Fast_Vanilla_64bit.exe
02/01/2021 03:16 PM 52,633 MASAKARI_r6_Fast_Vanilla.BAS
02/01/2021 03:16 PM 3,288,576 MASAKARI_r6_Fast_Vanilla_32bit.exe
02/01/2021 03:16 PM 3,647,488 MASAKARI_r6_Fast_Vanilla_64bit.exe
02/01/2021 06:43 PM 331,852 MASAKARI_r6_Fast_Vanilla_64bit.elf
02/01/2021 03:16 PM 52,633 MASAKARI_r6_Fast_Wrapper.BAS
02/01/2021 03:16 PM 3,288,576 MASAKARI_r6_Fast_Wrapper_32bit.exe
02/01/2021 03:16 PM 3,647,488 MASAKARI_r6_Fast_Wrapper_64bit.exe
02/01/2021 06:43 PM 331,852 MASAKARI_r6_Fast_Wrapper_64bit.elf
02/01/2021 03:16 PM 52,633 MASAKARI_r6_Slow_Vanilla.BAS
02/01/2021 03:16 PM 3,288,576 MASAKARI_r6_Slow_Vanilla_32bit.exe
02/01/2021 03:16 PM 3,647,488 MASAKARI_r6_Slow_Vanilla_64bit.exe
02/01/2021 06:44 PM 331,852 MASAKARI_r6_Slow_Vanilla_64bit.elf
02/01/2021 03:16 PM 52,633 MASAKARI_r6_Slow_Wrapper.BAS
02/01/2021 03:16 PM 3,288,576 MASAKARI_r6_Slow_Wrapper_32bit.exe
02/01/2021 03:16 PM 3,647,488 MASAKARI_r6_Slow_Wrapper_64bit.exe
02/01/2021 06:44 PM 331,860 MASAKARI_r6_Slow_Wrapper_64bit.elf
02/01/2021 03:16 PM 660,672 M_r6_OED.png ! Screenshot of Oxford English Dictionary loaded by Fast_Wrapper
02/01/2021 03:16 PM 416,939 warwalk_180hue-39sat_x3_NearestNeighbor.gif ! The logo
02/01/2021 03:16 PM 240 z.bat
02/01/2021 03:16 PM 340 _Make_EXEs.bat
02/01/2021 03:16 PM 41,814 Yoshi.exe ! tool for generating 'dir/b' and 'ls' like output
02/01/2021 03:16 PM 972,575 Yoshi7-.zip
02/01/2021 03:16 PM 39 _MAKE_HEX_dump.bat ! give it a filename to generate HEX output in text format
02/01/2021 03:16 PM 111,328 DUMP_HEX_header.c
02/01/2021 03:16 PM 77,312 DUMP_HEX_header.exe
02/01/2021 03:16 PM 69,120 LineWordreporter.exe
02/01/2021 03:16 PM 52,761 LineWordreporter_r1stats.zip
```
New releases and announcements at https://twitter.com/Sanmayce
This is how the it looks like in the prompt:
```
E:\qb64>MASAKARI_r6_Fast_Vanilla.exe -h
Masakari, revision 6_Fast_Vanilla, written in QB64 by Kaze, source code downloadable at https://www.qb64.org/forum
Usage: Masakari filename|/help
Currently are implemented only:
Mouse:
Button 1 - sets the cursor and the inverse line to the chosen position
Button 3 - PgDn
Wheel Up - Up
Wheel Dn - Dn
Button 2 + Wheel Up - going to the top left position
Button 2 + Wheel Dn - going to the bottom left position
Keyboard:
Up
Down
Left - still no sideways scroll
Right - still no sideways scroll
LCtrl+Home - going to the top left position
LCtrl+End - going to the bottom left position
Alt+X or Alt+Q - quit to the system, without demanding keypress.
Space - loads the highlighted line (if it is an actual filename)
Benchmarking:
LShift+RShift - Reporting (in the status line in red color) the time for load
LCtrl+RCtrl - Reporting (in the status line in red color) the time for PgDn-ing the entire file
E:\qb64>
```
Enfun!
Kaze,
2021-Jan-31
README.TXT
A quick .DIZ for Masakari, revision 7
Masakari is a free and open source tool with simplistic GUI aiming at sidekicking browsing text files in Linux/Windows command prompts.
This .ZIP package contains:
```
README.TXT ! This file
catalog_2021-02-05_16-20-22.png ! Screenshot of how 'masakari.tgz' was created
masakari.tgz: ! Contains the trio, with attributes (executable flag) set:
m ! Linux .sh file invokes yoshi and masakari
yoshi ! Linux .ELF 64bit
masakari ! Linux .ELF 64bit same as 'MASAKARI_r7_Vanilla_64bit'
ColumnChart.ico ! Needed during compilation
MEM.H ! Needed during compilation
m.bat ! Accepts wildcards, invokes Yoshi.exe and MASAKARI_r7_Vanilla_64bit.exe
MASAKARI_r7_Vanilla.BAS
MASAKARI_r7_Vanilla_32bit.exe
MASAKARI_r7_Vanilla_64bit.elf
MASAKARI_r7_Vanilla_64bit.exe
MASAKARI_r7_Wrapper.BAS
MASAKARI_r7_Wrapper_32bit.exe
MASAKARI_r7_Wrapper_64bit.elf
MASAKARI_r7_Wrapper_64bit.exe
MASAKARI_r7_Vanilla_OED.png ! Screenshot of Oxford English Dictionary loaded by Vanilla
MASAKARI_r7_Vanilla_Wikipedia.png ! Screenshot of English Wikipedia loaded by Vanilla
warwalk_180hue-39sat_x3_NearestNeighbor.gif ! The logo
z.bat
_Make_EXEs.bat
Yoshi.exe ! tool for generating 'dir/b' and 'ls' like output
Yoshi7-.zip
_MAKE_HEX_dump.bat ! give it a filename to generate HEX output in text format
DUMP_HEX_header.c
DUMP_HEX_header.exe
LineWordreporter.exe
LineWordreporter_r1stats.zip
```
New releases and announcements at https://twitter.com/Sanmayce
This is how it looks like in the prompt:
```
E:\qb64>MASAKARI_r7_Vanilla_32bit.exe -h
Masakari, revision 7_Vanilla, written in QB64 by Kaze, source code downloadable at https://www.qb64.org/forum
Usage: Masakari filename|/help
Currently are implemented only:
Mouse:
Button 1 - sets the cursor and the inverse line to the chosen position
Button 3 - PgDn
Wheel Up - Up
Wheel Dn - Dn
Button 2 + Wheel Up - going to the top left position
Button 2 + Wheel Dn - going to the bottom left position
Button 2 + dragging (from left to right, or from right to left) for at least 90 columns/cells (within 2 seconds) - same as Alt+X, Alt+Q
Button 2 + dragging (from top to bottom) for at least 5 lines/cells (within 2 seconds) - same as PgUp
Button 2 + dragging (from bottom to top) for at least 5 lines/cells (within 2 seconds) - same as PgDn
Keyboard:
Up
Down
PgUp
PgDn
Left - still no sideways scroll
Right - still no sideways scroll
LCtrl+Home - going to the top left position
LCtrl+End - going to the bottom left position
Alt+X or Alt+Q - quit to the system, without demanding keypress.
Space - loads the highlighted line (if it is an actual filename)
Benchmarking:
LShift+RShift - Reporting (in the status line in red color) the time for load
LCtrl+RCtrl - Reporting (in the status line in red color) the time for PgDn-ing the entire file
Note1: The 'Vanilla' sub-variant loads textual files without wrapping the lines.
Note2: The 'Wrapper' sub-variant makes the text file viewable without side/lateral scroll,
If unwrappable lines exist then those lines are dumped to filename+".unwrappable",
otherwise, the wrapped lines are dumped to filename+".wrapped", and auto-loaded.
If wrapped file exists during start then it is used, not re-created.
E:\qb64>
```
Enfun!
Kaze,
2021-Feb-05
I = 1
DO WHILE I <= (128 * 1024 * 1024)
I = INSTR(I, chunk128KB$, CHR$(10))
IF I = 0 THEN EXIT DO
NumberOfLFs = NumberOfLFs + 1
I = I + 1
LOOP
The function returns the position% in the baseString$ where the searchString$ was found.so
@Sanmayce
chunk128KB$ = SPACE$(128 * 1024 * 1024)
should be 128MB$ ?
****
I think that INSTR returns the position of CHR$(10) in the string
from wikiso
I = 0
DO
I = INSTR(1 + I, chunk128KB$, CHR$(10))
IF I = 0 THEN EXIT DO
NumberOfLFs = NumberOfLFs + 1
LOOP
When the code exits the LOOP there is likely some bytes that are left over at the end of the string that might be data for the next line.
not tested
README.DIZ.TXT
A quick .DIZ for Masakari, revision 8+
Masakari is a free and open-source tool with simplistic GUI, aiming at sidekicking browsing textual/.tar files in Linux/Windows command prompts.
New releases and announcements at twitter.com/Sanmayce
New features:
- Automatically switches to the excellent Toshiba unicode 16x32px font, in 4K, otherwise using its 8x16px variant in 1366x768, 1680x1050 and FHD modes;
- Allows browsing Bulgarian/Russian texts;
- Scrollwise, refined bigtime, ability to scroll with mouse-keyboard combos or just with mouse alone;
- Source code in form of a .PDF booklet - specially done for QB64 community and coders wanting to help/learn/improve.
This is how it looks like in the prompt:
```
E:\Masakari_source-ELF-EXE_rev8+_Kazahana_NyoTengu_Leprechaun>MASAKARI_Vanilla.exe -h
___ ___ _ _ _____
| \/ | | | (_) | _ |
| . . | __ _ ___ __ _ | | __ __ _ _ __ _ _ __ ___ __ __ \ V / _
| |\/| | / _` |/ __| / _` || |/ // _` || '__|| | | '__|/ _ \\ \ / / / _ \ _| |_
| | | || (_| |\__ \| (_| || <| (_| || | | | | | | __/ \ V /_ | |_| | |_ _|
\_| |_/ \__,_||___/ \__,_||_|\_\\__,_||_| |_| |_| \___| \_/(_)\_____/ |_|
Masakari, revision 8+_Vanilla, written in QB64 by Kaze, source code downloadable at https://www.qb64.org/forum
Usage: Masakari [filename]|[/help]
Note: The 'filename' could be a filelist, i.e. a list of filenames (see Space and Double-Left-Click).
Mouse:
Button 1 - sets the cursor and the inverse line to the chosen position
Button 3 - Burst PgDn
Wheel Up/Dn - Up/Dn
Button 2 + Wheel Up - going to the top left position
Button 2 + Wheel Dn - going to the bottom left position
Button 2 + dragging (sideways) for at least 100 columns/cells (within 2 seconds) - same as Alt+X, Alt+Q
Button 2 + dragging (from top to bottom) for at least 5 lines/cells (within 2 seconds) - same as PgUp
Button 2 + dragging (from bottom to top) for at least 5 lines/cells (within 2 seconds) - same as PgDn
Button 1 + Button 1 (within 0.33 seconds) - Double-Left-Click - PgUp or loads the inverse line (if it is a valid file)
Button 2 + Button 2 (within 0.33 seconds) - Double-Right-Click - PgDn
LShift + Button 1/2 - Burst Up/Dn
LCtrl + Button 1/2 - Burst PgUp/PgDn
LAlt + Button 1 = LCtrl+Home - going to the top left position
LAlt + Button 2 = LCtrl+End - going to the bottom left position
Keyboard:
F1 - this help panel
Up/Dn/PgUp/PgDn
Left/Right - still no sideways scroll
LCtrl+Home - going to the top left position
LCtrl+End - going to the bottom left position
Alt+X or Alt+Q - quit to the system, without demanding keypress
Space - loads the highlighted line (if it is an actual filename)
RCtrl|RShift - (can hold it) highlighting all unfamiliar words to masakari.wrd file/wordlist
LCtrl+F3 - Search Panel, Kazahana (with 16 threads) searches the file, currently displayed
Benchmarking:
LAlt+RAlt - Reporting (in the status line in red color) the time for load
LCtrl+RCtrl - Reporting (in the status line in red color) the time for PgDn-ing (page-by-page) the entire file
LShift+RShift - Reporting (in the status line in red color) the time for Down-ing (line-by-line) the entire file
Esc - Stops the auto-scrolling started with LCtrl+RCtrl or LShift+RShift
Note1: During the LShift+RShift auto-scroll, you can still press/hold RCtrl, during the LCtrl+RCtrl, you cannot.
Note2: During the auto-scroll, you can still press PgUp, PgDn, LCtrl+Home, LCtrl+End, Esc.
Note3: The 'Vanilla' sub-variant loads textual files without wrapping the lines.
Note4: The 'Wrapper' sub-variant makes the text file viewable without side/lateral scroll.
If unwrappable lines exist then those lines are dumped to filename+".unwrappable",
otherwise, the wrapped lines are dumped to filename+".wrapped", and auto-loaded.
If wrapped file exists during start then it is used, not re-created.
E:\Masakari_source-ELF-EXE_rev8+_Kazahana_NyoTengu_Leprechaun>
```
Some explanations:
1,472,368 1251toGesch ! 64bit ELF !
5,784 1251toGesch.bas ! Convertor from 1251 codepage to Gesch codepage ! Allowing reading Bulgarian/Russian !
1,724,416 1251toGesch.exe ! 32bit EXE !
<DIR> Kazahana_sources_binaries ! The binaries and source of fastest scalar fulltext searcheress !
484,124 kazahana ! 64bit ELF !
111,118 Kazahana.exe ! 32bit EXE !
<DIR> NyoTengu ! The binaries and source of fastest vector fulltext searcheress !
96,256 TetraNyotengu.exe ! 32bit EXE !
1,042,360 libiomp5md.dll ! TetraNyotengu needs this Intel OpenMP .DLL!
<DIR> x-gram_corpora ! The binaries and source of fastest x-gram ripper !
10,229,600 masakari.ind ! Needed by RCtrl or RShift in Masakari - highlights the unfamiliar to masakari.wrd words !
3,903,143 masakari.wrd ! Kaze's unigram English corpus i.e. spell-check wordlist !
1,453,926 ColumnChart.ico ! The ICON of Masakari !
2,991 MEM.H ! Needed for Windows compilation of Masakari !
2,537,104 MASAKARI_Vanilla ! 64bit ELF !
135,085 MASAKARI_Vanilla.BAS
4,319,232 MASAKARI_Vanilla.exe ! 32bit EXE !
2,537,104 MASAKARI_Wrapper ! 64bit ELF !
135,085 MASAKARI_Wrapper.BAS
4,319,232 MASAKARI_Wrapper.exe ! 32bit EXE !
98 ml.sh ! this script gives 'ls -l' in a scrollable list !
98 m1.sh ! Allows to choose-n-load a file from the the shown filelist !
51 mGesch.sh ! Converts codepage 1251 to Gesch and loads wrapped file in Masakari !
418 m.bat
1,633 MokujIN JADE 217 prompt.lnk ! Kaze's Windows command prompt !
303,296 cour.ttf
115,068 lucon.ttf
346,524 MxPlus_Cordata_PPC-400.ttf
146,744 MxPlus_ToshibaTxL2_8x16.ttf ! The Kaze's font-of-choice, many thanks go to VileR, https://int10h.org/oldschool-pc-fonts/ !
570,901 Gulyakovskiyi_E._Dolgiyi_Voshod_Na_Yenne.html ! The Line-By-Line Scroll Rate Benchmark, sh mGesch.sh Gulyakovskiyi_E._Dolgiyi_Voshod_Na_Yenne.html !
Enfun!
Kaze,
2021-Mar-05
Soon will write a console tool converting UTF-8 to Gesch codepage, thus allowing Russian texts to be browsed as well with the superb Toshiba TxL2 font...
From time to time, I visit the very informative site 'rosettacode' where multi languages etudes are given side by side, it is a shame QB64 is not presented there as it should, especially unacceptable is the situation with the QS64, standing for QuickSort 64bit, not having its QB64 presence.yes I agree, here's one for the graphics experts https://rosettacode.org/wiki/Honeycombs
What is the quicksort routine that QB64 community uses?!
yes I agree, here's one for the graphics experts https://rosettacode.org/wiki/Honeycombs
Oh, and @bplus your recursive quicksort crashes (with mere 100,000 elements) without even giving an error on exit,
Did 100,000,000 items for me without mods:
Try https://www.qb64.org/wiki/STRICMP when you don't care about case while comparing strings.
// Test run: 2022-Mar-08:
// Laptop "Compressionette", Intel 'Kaby Lake' i5-7200U 3.1GHz max turbo, 36GB DDR4 2133MHz:
// +--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
// | Performer/Keys | #1, FEW distinct | #2, MANY distinct | #3, MANYmore distinct | #4, ALL distinct | #5, ALLmore distinct | #6, ALLmax distinct |
// +--------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+
// | Operating System, | Windows 10, | Fedora 35, | Windows 10, | Fedora 35, | Windows 10, | Fedora 35, | Windows 10, | Fedora 35, | Windows 10, | Fedora 35, | Windows 10, | Fedora 35, |
// | Compiler, -O3 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 |
// +--------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+
// | qsort | 59 seconds | 377 seconds | 336 seconds | 541 seconds | 157 seconds | 195 seconds | 435 seconds | 534 seconds | 851 seconds | 1036 seconds | N.A. | N.A. |
// | Magnetica v.13 | 31 seconds | 30 seconds | 202 seconds | 196 seconds | 88 seconds | 85 seconds | 259 seconds | 250 seconds | 506 seconds | 493 seconds | N.A. | N.A. |
// | Bentley-McIlroy | 38 seconds | 36 seconds | 205 seconds | 208 seconds | 92 seconds | 94 seconds | 279 seconds | 281 seconds | 544 seconds | 553 seconds | N.A. | N.A. |
// | Crumsort | 30 seconds | 32 seconds | 132 seconds | 150 seconds | 64 seconds | 70 seconds | 184 seconds | 192 seconds | 357 seconds | 376 seconds | N.A. | N.A. |
// +--------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+
// | Best Time (bare | | | | | | |
// | bone in-place QS): | 30s PARITY | 132s for Crumsort | 64s for Crumsort | 184s for Crumsort | 357s for Crumsort | N.A. |
// +--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
// +--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
// | Performer/Keys | #1, FEW distinct | #2, MANY distinct | #3, MANYmore distinct | #4, ALL distinct | #5, ALLmore distinct | #6, ALLmax distinct |
// +--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
// | Operating System, | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 |
// | Compiler, -O3 | instructions; IPC | instructions; IPC | instructions; IPC | instructions; IPC | instructions; IPC | instructions; IPC |
// +--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
// | qsort | 3,302,993,934,921; 2.75 | 2,983,579,082,155; 1.75 | 886,263,153,476; 1.41 | 2,352,769,705,563; 1.38 | 4,527,367,288,814; 1.39 | N.A. |
// | Magnetica v.13 | 131,873,917,282; 1.00 | 658,478,895,600; 1.02 | 309,149,594,748; 1.08 | 884,297,729,161; 1.06 | 1,726,931,029,634; 1.08 | N.A. |
// | Bentley-McIlroy | 164,915,835,204; 1.09 | 681,956,155,364; 1.00 | 322,584,009,352; 1.04 | 944,038,959,690; 1.02 | 1,719,825,062,847; 0.97 | N.A. |
// | Crumsort | 312,328,497,447; 2.29 | 1,295,551,817,497; 2.57 | 603,276,911,007; 2.53 | 1,597,685,291,532; 2.46 | 3,091,001,982,856; 2.51 | N.A. |
// +--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
// Speed Roster, (the base speed 1.00x is GLIBC's qsort):
// Rank #1: 2683/820= 3.27x = 32+150+ 70+192+ 376= 820 seconds for Crumsort
// Rank #2: 2683/1054= 2.54x = 30+196+ 85+250+ 493= 1054 seconds for Magnetica v.13
// Rank #3: 2683/1172= 2.28x = 36+208+ 94+281+ 553= 1172 seconds for Bentley-McIlroy
// Rank #4: 2683/2683= 1.00x = 377+541+195+534+1036= 2683 seconds for GLIBC's qsort
//
// Legend (The time is exactly the Sort process time):
// #1,FEW = 2,233,861,800 keys, of them distinct = 10; 178,708,944 bytes 22338618_QWORDS.bin; elements = 178,708,944/8 *100; // Keys are 100 times duplicated
// #2,MANY = 2,482,300,900 keys, of them distinct = 2,847,531; 24,823,016 bytes mobythesaurus.txt; elements = 24823016 -8+1; // BuildingBlocks are size-order+1, they are 100 times duplicated
// #3,MANYmore = 1,137,582,073 keys, of them distinct = 77,275,994; 1,137,582,080 bytes linux-5.15.25.tar; elements = 1137582080 -8+1; // BuildingBlocks are size-order+1
// #4,ALL = 2,009,333,753 keys, of them distinct = 1,912,608,132; 2,009,333,760 bytes Fedora-Workstation-Live-x86_64-35-1.2.iso; elements = 2009333760 -8+1; // BuildingBlocks are size-order+1
// #5,ALLmore = 3,803,483,825 keys, of them distinct = 3,346,259,533; 3,803,483,832 bytes Fedora-Workstation-35-1.2.aarch64.raw.xz; elements = 3803483832 -8+1; // BuildingBlocks are size-order+1
// #6,ALLmax = 7,798,235,435 keys, of them distinct = 6,770,144,405; 7,798,235,442 bytes math.stackexchange.com_en_all_2019-02.zim; elements = 7798235442 -8+1; // BuildingBlocks are size-order+1
// Notes:
// - Scandum's Crumsort is the FASTEST in-place sorter, known to me, hail Scandum!
// - All the runs were in "Current priority class is REALTIME_PRIORITY_CLASS" for Windows and "Current priority is -20." for Linux;
// To see more stats (the tables were deriving from) see 'log_i5-7200U_MAR08.txt';
// - Benchmark needs 32GB RAM, and 64GB for the 6th testset;
// - The whole package (except the 3rd, 4th, 5th and 6th datasets) is downloadable at:
// www.sanmayce.com/QS_showdown_r13.zip
// - To reproduce the roster, run on Windows or Linux:
// - BENCH_ICL32GB.BAT
// - BENCH_ICL64GB.BAT
// - sh bench_gcc32GB.sh
// - sh bench_gcc64GB.sh
// - 3rd dataset is downloadable at:
// https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.25.tar.xz
// - 4th dataset is downloadable at:
// https://download.fedoraproject.org/pub/fedora/linux/releases/35/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-35-1.2.iso
// - 5th dataset is downloadable at:
// https://download.fedoraproject.org/pub/fedora/linux/releases/35/Workstation/aarch64/images/Fedora-Workstation-35-1.2.aarch64.raw.xz
// - 6th dataset is downloadable at:
// https://download.kiwix.org/zim/stack_exchange/math.stackexchange.com_en_all_2019-02.zim
// - Managed to reduce the mainloop down to 68 bytes (from 71 in r.12), the gain comes from switching to pointers, had to do that long time ago, wanted to keep the etude ARRAY-syntax friendly. Now, r.12 uses arrays, whereas r.13 uses pointers. Another turning point, GCC now beats ICL in all tests.
// And the Assembly code generated by GCC 11.2.1 for Magnetica_v13:
// 001 Quicksort_QB64_v13:
// 002 .LFB214:
// 003 .cfi_startproc
// 004 pushq %r15
// 005 .cfi_def_cfa_offset 16
// 006 .cfi_offset 15, -16
// 007 leaq -8(%rdi,%rsi,8), %r10
// 008 movq %rdi, %xmm0
// 009 movq %rdi, %rax
// 010 pushq %r14
// 011 .cfi_def_cfa_offset 24
// 012 .cfi_offset 14, -24
// 013 movq %r10, %xmm2
// 014 movl $2, %r15d
// 015 pushq %r13
// 016 .cfi_def_cfa_offset 32
// 017 .cfi_offset 13, -32
// 018 punpcklqdq %xmm2, %xmm0
// 019 pushq %r12
// 020 .cfi_def_cfa_offset 40
// 021 .cfi_offset 12, -40
// 022 pushq %rbp
// 023 .cfi_def_cfa_offset 48
// 024 .cfi_offset 6, -48
// 025 pushq %rbx
// 026 .cfi_def_cfa_offset 56
// 027 .cfi_offset 3, -56
// 028 subq $143920, %rsp
// 029 .cfi_def_cfa_offset 143976
// 030 movups %xmm0, -96(%rsp)
// 031 .p2align 4,,10
// 032 .p2align 3
// 033 .L5115:
// 034 movq %r10, %rcx
// 035 subq $2, %r15
// 036 subq %rax, %rcx
// 037 testq %rcx, %rcx
// 038 jle .L5096
// 039 leaq 8(%rax), %rbx
// 040 .L5113:
// 041 movq %rcx, %rsi
// 042 movq (%rax), %rdx
// 043 sarq $3, %rsi
// 044 cmpq $55, %rcx
// 045 ja .L5097
// 046 jmp *.L5099(,%rsi,8)
// 047 .section .rodata
// 048 .align 8
// 049 .align 4
// 050 .L5099:
// 051 .quad .L5097
// 052 .quad .L5104
// 053 .quad .L5103
// 054 .quad .L5102
// 055 .quad .L5101
// 056 .quad .L5100
// 057 .quad .L5098
// 058 .text
// 059 .p2align 4,,10
// 060 .p2align 3
// 061 .L5098:
// 062 movq 8(%rax), %rbp
// 063 movq 16(%rax), %rbx
// 064 xorl %ecx, %ecx
// 065 movq 24(%rax), %r11
// 066 movq 32(%rax), %r10
// 067 cmpq %rdx, %rbp
// 068 movq 40(%rax), %r9
// 069 movq 48(%rax), %r12
// 070 setb %cl
// 071 cmpq %rdx, %rbx
// 072 adcl $0, %ecx
// 073 cmpq %rdx, %r11
// 074 adcl $0, %ecx
// 075 cmpq %rdx, %r10
// 076 adcl $0, %ecx
// 077 cmpq %rdx, %r9
// 078 adcl $0, %ecx
// 079 cmpq %rdx, %r12
// 080 adcl $0, %ecx
// 081 xorl %r8d, %r8d
// 082 cmpq %rdx, %rbp
// 083 movl %ecx, -108(%rsp)
// 084 setnb %r8b
// 085 xorl %ecx, %ecx
// 086 cmpq %rbx, %rbp
// 087 seta %cl
// 088 addl %ecx, %r8d
// 089 xorl %ecx, %ecx
// 090 cmpq %r11, %rbp
// 091 seta %cl
// 092 addl %ecx, %r8d
// 093 xorl %ecx, %ecx
// 094 cmpq %r10, %rbp
// 095 seta %cl
// 096 addl %ecx, %r8d
// 097 xorl %ecx, %ecx
// 098 cmpq %r9, %rbp
// 099 seta %cl
// 100 addl %ecx, %r8d
// 101 xorl %ecx, %ecx
// 102 cmpq %r12, %rbp
// 103 seta %cl
// 104 xorl %edi, %edi
// 105 addl %ecx, %r8d
// 106 cmpq %rdx, %rbx
// 107 setnb %dil
// 108 xorl %ecx, %ecx
// 109 cmpq %rbx, %rbp
// 110 setbe %cl
// 111 addl %ecx, %edi
// 112 xorl %ecx, %ecx
// 113 cmpq %r11, %rbx
// 114 seta %cl
// 115 addl %ecx, %edi
// 116 xorl %ecx, %ecx
// 117 cmpq %r10, %rbx
// 118 seta %cl
// 119 addl %ecx, %edi
// 120 xorl %ecx, %ecx
// 121 cmpq %r9, %rbx
// 122 seta %cl
// 123 addl %ecx, %edi
// 124 xorl %ecx, %ecx
// 125 cmpq %r12, %rbx
// 126 seta %cl
// 127 xorl %esi, %esi
// 128 addl %ecx, %edi
// 129 cmpq %rdx, %r11
// 130 setnb %sil
// 131 xorl %ecx, %ecx
// 132 cmpq %r11, %rbp
// 133 setbe %cl
// 134 addl %ecx, %esi
// 135 xorl %ecx, %ecx
// 136 cmpq %r11, %rbx
// 137 setbe %cl
// 138 addl %ecx, %esi
// 139 xorl %ecx, %ecx
// 140 cmpq %r10, %r11
// 141 seta %cl
// 142 addl %ecx, %esi
// 143 xorl %ecx, %ecx
// 144 cmpq %r9, %r11
// 145 seta %cl
// 146 addl %ecx, %esi
// 147 xorl %ecx, %ecx
// 148 cmpq %r12, %r11
// 149 seta %cl
// 150 addl %ecx, %esi
// 151 xorl %ecx, %ecx
// 152 cmpq %rdx, %r10
// 153 setnb %cl
// 154 xorl %r13d, %r13d
// 155 cmpq %r10, %rbp
// 156 setbe %r13b
// 157 addl %r13d, %ecx
// 158 xorl %r13d, %r13d
// 159 cmpq %r10, %rbx
// 160 setbe %r13b
// 161 addl %r13d, %ecx
// 162 xorl %r13d, %r13d
// 163 cmpq %r10, %r11
// 164 setbe %r13b
// 165 addl %r13d, %ecx
// 166 xorl %r13d, %r13d
// 167 cmpq %r9, %r10
// 168 seta %r13b
// 169 addl %r13d, %ecx
// 170 xorl %r13d, %r13d
// 171 cmpq %r12, %r10
// 172 seta %r13b
// 173 xorl %r14d, %r14d
// 174 addl %r13d, %ecx
// 175 cmpq %rdx, %r9
// 176 setnb %r14b
// 177 xorl %r13d, %r13d
// 178 cmpq %r9, %rbp
// 179 setbe %r13b
// 180 addl %r14d, %r13d
// 181 xorl %r14d, %r14d
// 182 cmpq %r9, %rbx
// 183 setbe %r14b
// 184 addl %r13d, %r14d
// 185 xorl %r13d, %r13d
// 186 cmpq %r9, %r11
// 187 setbe %r13b
// 188 addl %r14d, %r13d
// 189 xorl %r14d, %r14d
// 190 cmpq %r9, %r10
// 191 setbe %r14b
// 192 addl %r13d, %r14d
// 193 xorl %r13d, %r13d
// 194 cmpq %r12, %r9
// 195 seta %r13b
// 196 addl %r14d, %r13d
// 197 movslq -108(%rsp), %r14
// 198 movq %rdx, (%rax,%r14,8)
// 199 movslq %r8d, %rdx
// 200 movl -108(%rsp), %r14d
// 201 movq %rbp, (%rax,%rdx,8)
// 202 movslq %edi, %rdx
// 203 movq %rbx, (%rax,%rdx,8)
// 204 movslq %esi, %rdx
// 205 movq %r11, (%rax,%rdx,8)
// 206 movslq %ecx, %rdx
// 207 movq %r10, (%rax,%rdx,8)
// 208 movslq %r13d, %rdx
// 209 movq %r9, (%rax,%rdx,8)
// 210 leal (%r14,%r8), %edx
// 211 addl %edi, %edx
// 212 addl %esi, %edx
// 213 addl %ecx, %edx
// 214 movl $21, %ecx
// 215 addl %r13d, %edx
// 216 subl %edx, %ecx
// 217 movslq %ecx, %rdx
// 218 movq %r12, (%rax,%rdx,8)
// 219 .p2align 4,,10
// 220 .p2align 3
// 221 .L5096:
// 222 testq %r15, %r15
// 223 je .L5095
// 224 .L5121:
// 225 movq -104(%rsp,%r15,8), %r10
// 226 movq -112(%rsp,%r15,8), %rax
// 227 jmp .L5115
// 228 .p2align 4,,10
// 229 .p2align 3
// 230 .L5103:
// 231 movq 8(%rax), %rdi
// 232 movq 16(%rax), %r8
// 233 xorl %ecx, %ecx
// 234 cmpq %rdx, %rdi
// 235 setb %cl
// 236 cmpq %rdx, %r8
// 237 adcl $0, %ecx
// 238 xorl %esi, %esi
// 239 cmpq %rdx, %rdi
// 240 setnb %sil
// 241 xorl %r9d, %r9d
// 242 cmpq %r8, %rdi
// 243 seta %r9b
// 244 addl %r9d, %esi
// 245 movslq %ecx, %r9
// 246 movq %rdx, (%rax,%r9,8)
// 247 movslq %esi, %rdx
// 248 addl %esi, %ecx
// 249 movq %rdi, (%rax,%rdx,8)
// 250 movl $3, %edx
// 251 subl %ecx, %edx
// 252 movslq %edx, %rdx
// 253 movq %r8, (%rax,%rdx,8)
// 254 testq %r15, %r15
// 255 jne .L5121
// 256 .L5095:
// 257 addq $143920, %rsp
// 258 .cfi_remember_state
// 259 .cfi_def_cfa_offset 56
// 260 popq %rbx
// 261 .cfi_def_cfa_offset 48
// 262 popq %rbp
// 263 .cfi_def_cfa_offset 40
// 264 popq %r12
// 265 .cfi_def_cfa_offset 32
// 266 popq %r13
// 267 .cfi_def_cfa_offset 24
// 268 popq %r14
// 269 .cfi_def_cfa_offset 16
// 270 popq %r15
// 271 .cfi_def_cfa_offset 8
// 272 ret
// 273 .p2align 4,,10
// 274 .p2align 3
// 275 .L5104:
// 276 .cfi_restore_state
// 277 movq 8(%rax), %rcx
// 278 cmpq %rdx, %rcx
// 279 sbbq %rsi, %rsi
// 280 andl $8, %esi
// 281 cmpq %rdx, %rcx
// 282 movq %rdx, (%rax,%rsi)
// 283 movl $1, %edx
// 284 sbbl $0, %edx
// 285 movslq %edx, %rdx
// 286 movq %rcx, (%rax,%rdx,8)
// 287 jmp .L5096
// 288 .p2align 4,,10
// 289 .p2align 3
// 290 .L5101:
// 291 movq 8(%rax), %r10
// 292 movq 16(%rax), %r9
// 293 xorl %ecx, %ecx
// 294 movq 24(%rax), %r8
// 295 movq 32(%rax), %rdi
// 296 cmpq %rdx, %r10
// 297 setb %cl
// 298 cmpq %rdx, %r9
// 299 adcl $0, %ecx
// 300 cmpq %rdx, %r8
// 301 adcl $0, %ecx
// 302 cmpq %rdx, %rdi
// 303 adcl $0, %ecx
// 304 xorl %esi, %esi
// 305 cmpq %rdx, %r10
// 306 setnb %sil
// 307 xorl %r11d, %r11d
// 308 cmpq %r9, %r10
// 309 seta %r11b
// 310 addl %r11d, %esi
// 311 xorl %r11d, %r11d
// 312 cmpq %r8, %r10
// 313 seta %r11b
// 314 addl %r11d, %esi
// 315 xorl %r11d, %r11d
// 316 cmpq %rdi, %r10
// 317 seta %r11b
// 318 addl %esi, %r11d
// 319 xorl %esi, %esi
// 320 cmpq %rdx, %r9
// 321 setnb %sil
// 322 xorl %ebx, %ebx
// 323 cmpq %r9, %r10
// 324 setbe %bl
// 325 addl %ebx, %esi
// 326 xorl %ebx, %ebx
// 327 cmpq %r8, %r9
// 328 seta %bl
// 329 addl %ebx, %esi
// 330 xorl %ebx, %ebx
// 331 cmpq %rdi, %r9
// 332 seta %bl
// 333 addl %esi, %ebx
// 334 xorl %esi, %esi
// 335 cmpq %rdx, %r8
// 336 setnb %sil
// 337 xorl %ebp, %ebp
// 338 cmpq %r8, %r10
// 339 setbe %bpl
// 340 addl %ebp, %esi
// 341 xorl %ebp, %ebp
// 342 cmpq %r8, %r9
// 343 setbe %bpl
// 344 addl %ebp, %esi
// 345 xorl %ebp, %ebp
// 346 cmpq %rdi, %r8
// 347 seta %bpl
// 348 addl %ebp, %esi
// 349 movslq %ecx, %rbp
// 350 addl %r11d, %ecx
// 351 movq %rdx, (%rax,%rbp,8)
// 352 movslq %r11d, %rdx
// 353 addl %ebx, %ecx
// 354 movq %r10, (%rax,%rdx,8)
// 355 movslq %ebx, %rdx
// 356 addl %esi, %ecx
// 357 movq %r9, (%rax,%rdx,8)
// 358 movslq %esi, %rdx
// 359 movq %r8, (%rax,%rdx,8)
// 360 movl $10, %edx
// 361 subl %ecx, %edx
// 362 movslq %edx, %rdx
// 363 movq %rdi, (%rax,%rdx,8)
// 364 jmp .L5096
// 365 .p2align 4,,10
// 366 .p2align 3
// 367 .L5102:
// 368 movq 8(%rax), %r10
// 369 movq 16(%rax), %r9
// 370 xorl %ecx, %ecx
// 371 movq 24(%rax), %r8
// 372 cmpq %rdx, %r10
// 373 setb %cl
// 374 cmpq %rdx, %r9
// 375 adcl $0, %ecx
// 376 cmpq %rdx, %r8
// 377 adcl $0, %ecx
// 378 xorl %edi, %edi
// 379 cmpq %rdx, %r10
// 380 setnb %dil
// 381 xorl %esi, %esi
// 382 cmpq %r9, %r10
// 383 seta %sil
// 384 addl %esi, %edi
// 385 xorl %esi, %esi
// 386 cmpq %r8, %r10
// 387 seta %sil
// 388 addl %esi, %edi
// 389 xorl %esi, %esi
// 390 cmpq %rdx, %r9
// 391 setnb %sil
// 392 xorl %r11d, %r11d
// 393 cmpq %r9, %r10
// 394 setbe %r11b
// 395 addl %r11d, %esi
// 396 xorl %r11d, %r11d
// 397 cmpq %r8, %r9
// 398 seta %r11b
// 399 addl %r11d, %esi
// 400 movslq %ecx, %r11
// 401 addl %edi, %ecx
// 402 movq %rdx, (%rax,%r11,8)
// 403 movslq %edi, %rdx
// 404 addl %esi, %ecx
// 405 movq %r10, (%rax,%rdx,8)
// 406 movslq %esi, %rdx
// 407 movq %r9, (%rax,%rdx,8)
// 408 movl $6, %edx
// 409 subl %ecx, %edx
// 410 movslq %edx, %rdx
// 411 movq %r8, (%rax,%rdx,8)
// 412 jmp .L5096
// 413 .p2align 4,,10
// 414 .p2align 3
// 415 .L5100:
// 416 movq 8(%rax), %r12
// 417 movq 16(%rax), %rbp
// 418 xorl %ecx, %ecx
// 419 movq 24(%rax), %r11
// 420 movq 32(%rax), %r10
// 421 cmpq %rdx, %r12
// 422 movq 40(%rax), %rbx
// 423 setb %cl
// 424 cmpq %rdx, %rbp
// 425 adcl $0, %ecx
// 426 cmpq %rdx, %r11
// 427 adcl $0, %ecx
// 428 cmpq %rdx, %r10
// 429 adcl $0, %ecx
// 430 cmpq %rdx, %rbx
// 431 adcl $0, %ecx
// 432 xorl %r9d, %r9d
// 433 cmpq %rdx, %r12
// 434 setnb %r9b
// 435 xorl %esi, %esi
// 436 cmpq %rbp, %r12
// 437 seta %sil
// 438 addl %esi, %r9d
// 439 xorl %esi, %esi
// 440 cmpq %r11, %r12
// 441 seta %sil
// 442 addl %esi, %r9d
// 443 xorl %esi, %esi
// 444 cmpq %r10, %r12
// 445 seta %sil
// 446 addl %esi, %r9d
// 447 xorl %esi, %esi
// 448 cmpq %rbx, %r12
// 449 seta %sil
// 450 xorl %r8d, %r8d
// 451 addl %esi, %r9d
// 452 cmpq %rdx, %rbp
// 453 setnb %r8b
// 454 xorl %esi, %esi
// 455 cmpq %rbp, %r12
// 456 setbe %sil
// 457 addl %esi, %r8d
// 458 xorl %esi, %esi
// 459 cmpq %r11, %rbp
// 460 seta %sil
// 461 addl %esi, %r8d
// 462 xorl %esi, %esi
// 463 cmpq %r10, %rbp
// 464 seta %sil
// 465 addl %esi, %r8d
// 466 xorl %esi, %esi
// 467 cmpq %rbx, %rbp
// 468 seta %sil
// 469 xorl %edi, %edi
// 470 addl %esi, %r8d
// 471 cmpq %rdx, %r11
// 472 setnb %dil
// 473 xorl %esi, %esi
// 474 cmpq %r11, %r12
// 475 setbe %sil
// 476 addl %esi, %edi
// 477 xorl %esi, %esi
// 478 cmpq %r11, %rbp
// 479 setbe %sil
// 480 addl %esi, %edi
// 481 xorl %esi, %esi
// 482 cmpq %r10, %r11
// 483 seta %sil
// 484 addl %esi, %edi
// 485 xorl %esi, %esi
// 486 cmpq %rbx, %r11
// 487 seta %sil
// 488 addl %esi, %edi
// 489 xorl %esi, %esi
// 490 cmpq %rdx, %r10
// 491 setnb %sil
// 492 xorl %r13d, %r13d
// 493 cmpq %r10, %r12
// 494 setbe %r13b
// 495 addl %r13d, %esi
// 496 xorl %r13d, %r13d
// 497 cmpq %r10, %rbp
// 498 setbe %r13b
// 499 addl %r13d, %esi
// 500 xorl %r13d, %r13d
// 501 cmpq %r10, %r11
// 502 setbe %r13b
// 503 addl %r13d, %esi
// 504 xorl %r13d, %r13d
// 505 cmpq %rbx, %r10
// 506 seta %r13b
// 507 addl %r13d, %esi
// 508 movslq %ecx, %r13
// 509 movq %rdx, (%rax,%r13,8)
// 510 movslq %r9d, %rdx
// 511 movq %r12, (%rax,%rdx,8)
// 512 movslq %r8d, %rdx
// 513 movq %rbp, (%rax,%rdx,8)
// 514 movslq %edi, %rdx
// 515 movq %r11, (%rax,%rdx,8)
// 516 movslq %esi, %rdx
// 517 movq %r10, (%rax,%rdx,8)
// 518 leal (%rcx,%r9), %edx
// 519 movl $15, %ecx
// 520 addl %r8d, %edx
// 521 addl %edi, %edx
// 522 addl %esi, %edx
// 523 subl %edx, %ecx
// 524 movslq %ecx, %rdx
// 525 movq %rbx, (%rax,%rdx,8)
// 526 jmp .L5096
// 527 .L5097:
// 528 sarq $2, %rsi
// 529 leaq (%rax,%rsi,8), %rcx
// 530 movq (%rcx), %r8
// 531 movq %rdx, (%rcx)
// 532 movq %r8, (%rax)
// 533 cmpq %rax, %r10
// 534 jbe .L5105
// 535 movq %rax, %rdx
// 536 movq %rax, %r9
// 537 movq %r10, %rcx
// 538 jmp .L5111
// 539 .p2align 4,,10
// 540 .p2align 3
// 541 .L5122:
// 542 movq (%r9), %rdi
// 543 movq %rsi, (%r9)
// 544 leaq 16(%rdx), %rsi
// 545 addq $8, %r9
// 546 movq %rdi, 8(%rdx)
// 547 movq %r11, %rdx
// 548 .L5107:
// 549 cmpq %rdx, %rcx
// 550 jbe .L5112
// 551 .L5111:
// 552 movq 8(%rdx), %rsi
// 553 leaq 8(%rdx), %r11
// 554 cmpq %r8, %rsi
// 555 jb .L5122
// 556 ja .L5120
// 557 leaq 16(%rdx), %rsi
// 558 movq %r11, %rdx
// 559 cmpq %rdx, %rcx
// 560 ja .L5111
// 561 .L5112:
// 562 movq 8(%rdx), %rdi
// 563 movq %rsi, %xmm0
// 564 movq %rcx, %rsi
// 565 movq %r10, %xmm1
// 566 subq %rdx, %rsi
// 567 leaq -8(%r9), %r10
// 568 punpcklqdq %xmm1, %xmm0
// 569 addq $2, %r15
// 570 movq %rdi, %r8
// 571 sarq $63, %rsi
// 572 subq 8(%rcx), %r8
// 573 movups %xmm0, -112(%rsp,%r15,8)
// 574 andq %r8, %rsi
// 575 subq %rsi, %rdi
// 576 movq %rdi, 8(%rdx)
// 577 addq %rsi, 8(%rcx)
// 578 movq %r10, %rcx
// 579 subq %rax, %rcx
// 580 testq %rcx, %rcx
// 581 jg .L5113
// 582 jmp .L5096
// 583 .p2align 4,,10
// 584 .p2align 3
// 585 .L5110:
// 586 subq $8, %rcx
// 587 .L5120:
// 588 movq (%rcx), %rdi
// 589 cmpq %r8, %rdi
// 590 ja .L5110
// 591 movq %rdi, 8(%rdx)
// 592 subq $8, %rcx
// 593 movq %rsi, 8(%rcx)
// 594 movq %r11, %rsi
// 595 jmp .L5107
// 596 .p2align 4,,10
// 597 .p2align 3
// 598 .L5105:
// 599 movq %rbx, %rsi
// 600 movq %rax, %rdx
// 601 movq %rax, %r9
// 602 movq %r10, %rcx
// 603 jmp .L5112
// 604 .cfi_endproc
Test run: 2022-Mar-09:
Laptop "Brutalitto", AMD 'Renoir' 4800H 4.3GHz max turbo, 64GB DDR4 3200MHz:
+--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
| Performer/Keys | #1, FEW distinct | #2, MANY distinct | #3, MANYmore distinct | #4, ALL distinct | #5, ALLmore distinct | #6, ALLmax distinct |
+--------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+
| Operating System, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, | Windows 10, |
| Compiler, -O3 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 | Intel v15.0 | GCC 11.2.1 |
+--------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+
| qsort | 42 seconds | 45 seconds | 242 seconds | 280 seconds | 113 seconds | 131 seconds | 319 seconds | 354 seconds | 620 seconds | 695 seconds | 1282 seconds | 1438 seconds |
| Magnetica v.13 | 22 seconds | 21 seconds | 135 seconds | 134 seconds | 60 seconds | 59 seconds | 177 seconds | 177 seconds | 350 seconds | 349 seconds | 724 seconds | 722 seconds |
| Bentley-McIlroy | 24 seconds | 24 seconds | 146 seconds | 142 seconds | 66 seconds | 64 seconds | 200 seconds | 193 seconds | 391 seconds | 376 seconds | 850 seconds | 803 seconds |
| Crumsort | 20 seconds | 19 seconds | 91 seconds | 81 seconds | 44 seconds | 38 seconds | 126 seconds | 109 seconds | 246 seconds | 211 seconds | 567 seconds | 479 seconds |
+--------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+--------------+--------------+--------------+
| Best Time (bare | | | | | | |
| bone in-place QS): | 19s for Crumsort | 81s for Crumsort | 38s for Crumsort | 109s for Crumsort | 211s for Crumsort | 479s for Crumsort |
+--------------------+---------------------------+---------------------------+---------------------------+---------------------------+----------------------------+-----------------------------+
Speed Roster, (the base speed 1.00x is GLIBC's qsort):
Rank #1: 2943/937= 3.14x = 19+ 81+ 38+109+211+ 479= 937 seconds for Crumsort
Rank #2: 2943/1462= 2.01x = 21+134+ 59+177+349+ 722= 1462 seconds for Magnetica v.13
Rank #3: 2943/1602= 1.83x = 24+142+ 64+193+376+ 803= 1602 seconds for Bentley-McIlroy
Rank #4: 2943/2943= 1.00x = 45+280+131+354+695+1438= 2943 seconds for GLIBC's qsort
+--------------------+-------------------------+--------------------------+--------------------------+---------------------------+---------------------------+-----------------------------+
| Performer/Keys | #1, FEW distinct | #2, MANY distinct | #3, MANYmore distinct | #4, ALL distinct | #5, ALLmore distinct | #6, ALLmax distinct |
+--------------------+-------------------------+--------------------------+--------------------------+-------------+-------------+---------------------------+--------------+--------------+
| Operating System, | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 | Fedora 35, GCC 11.2.1 |
| Compiler, -O3 | instructions; IPC | instructions; IPC | instructions; IPC | instructions; IPC | instructions; IPC | instructions; IPC |
+--------------------+-------------------------+--------------------------+--------------------------+---------------------------+---------------------------+-----------------------------+
| qsort | 385/342 seconds | 527/234 seconds | 165/55 seconds | 516/128 seconds | 999/252 seconds | N.A. |
| | 6,448,450,744,497; 2.82 | 4,921,980,445,033; 2.06 | 1,369,822,972,984; 1.94 | 3,250,596,357,540; 1.58 | 6,250,299,799,611; 1.59 | N.A. |
+--------------------+-------------------------+--------------------------+--------------------------+---------------------------+---------------------------+-----------------------------+
| Magnetica v.14 | 29/6 seconds | 198/47 seconds | 86/22 seconds | 241/66 seconds | 472/134 seconds | N.A. |
| | 171,452,642,615; 1.14 | 936,751,248,598; 1.17 | 443,844,553,192; 1.25 | 1,291,624,832,269; 1.28 | 2,503,942,225,085; 1.28 | N.A. |
+--------------------+-------------------------+--------------------------+--------------------------+---------------------------+---------------------------+-----------------------------+
| Bentley-McIlroy | 38/13 seconds | 223/47 seconds | 100/26 seconds | 304/65 seconds | 597/139 seconds | N.A. |
| | 246,587,334,436; 1.23 | 1,105,253,285,645; 1.25 | 507,140,963,617; 1.23 | 1,460,132,564,676; 1.22 | 2,848,210,143,410; 1.22 | N.A. |
+--------------------+-------------------------+--------------------------+--------------------------+---------------------------+---------------------------+-----------------------------+
| Crumsort 1.1.5.3 | 29/4 seconds | 129/4 seconds | 61/2 seconds | 173/3 seconds | 339/7 seconds | N.A. |
| | 351,332,884,902; 2.43 | 1,284,147,329,900; 2.80 | 603,065,127,518; 2.77 | 1,605,371,408,284; 2.64 | 3,102,283,088,926; 2.71 | N.A. |
+--------------------+-------------------------+--------------------------+--------------------------+---------------------------+---------------------------+-----------------------------+
Very interesting thread! Thank you!
I am regularly working with really big files (some over to 100GB) and have been optimizing 2 functions to read/process big files very fast.
I thought I'd add them here for information:
...