Bei diesem Problem lässt sich nicht viel mit InlineASM heraus holen.
Im Übrigen wächst die Auswertung nicht quadratisch, sondern in O(log(n) * n), da Purebasic zum Sortieren Quicksort nutzt.
Am schnellsten ist es die Zeilen in allen Dateien alphabetisch zu sortieren, wie es meine diff-Funktion in den ersten beiden Zeilen macht und dann den Rest ablaufen zu lassen. Bleibt die Frage, wo die Differenzen ausgegeben werden sollen. In eine weitere Datei?
Also wenn du tatsächlich 10 Mio. Dateien hast, dann sortiere zuerst alle vor. Und dann lass meinen Code drüber laufen ohne die beiden 'SortList()'-Zeilen am Anfang.
Je nachdem, was du für eine Festplattenanbindung hast, kannst du ja gleich mehrere Threads nutzen, die sich immer eine Datei "krallen" und sortieren. Bei einem Quadcore kannst du so möglicherweise die Geschwindigkeit vervierfachen, falls die Festplatte auch hinter her kommt.
Hast du einmal alle Dateien sortiert, dann musst du nur noch den Code ohne die beiden 'SortList()'-Zeilen ausführen. Und der läuft in linearer Zeit zur Zeilenanzahl.
Wenn man jetzt noch Cache-bewusst arbeiten will, dann nimmt man auch keine LinkedLists, sondern Arrays oder gleich einen zusammenhängenden Speicherbereich für die ganze Datei und dann ein Array mit Pointern zu den Zeilenanfängen in diesem Speicherbereich. Da kann der Prozessor dann sehr gut große Stücke in seinen Cache packen und vergleichen.
Wenn ich mal so annehme, dass jeder der 10 Mio. Dateien 10 MB groß ist, dann hast du ja schon 95 TB an Daten. Und selbst bei nur 1 MB pro Datei sind es ja schon 9,5 TB. 1 MB könnte man annehmen, wenn jede Zeile in so einer Datei 80 Zeichen lang ist und die Datei aus ca. 13000 Zeilen besteht.
Also ich finde die Datenmengen gerade etwas absurd, aber wenn du meinst.
