Ich habe einige große Dateien (von mehreren Gigabyte bis zu Hunderten von Gigabytes), die ich suche und versuche, jedes Vorkommen einer gegebenen Zeichenfolge zu finden.Bei einer parallelen Suche wird die Speicherbandbreite der begrenzende Faktor?
Ich habe versucht, dies parallel zu betreiben und einige Fragen zu haben.
Wie soll ich das machen? Ich kann nicht die gesamte Datei in den Speicher kopieren, da sie zu groß ist. Funktionieren mehrere FILE * Zeiger?
Wie viele Threads kann ich in die Datei einfügen, bevor die Datenträgerbandbreite zu einem begrenzenden Faktor wird und nicht zur CPU? Wie kann ich das umgehen?
Derzeit, was ich dachte, das ich 4 Threads verwenden würde, Aufgabe jeweils mit einem FILE * entweder 0%, 25%, 50% und 75% Weg durch die Datei und jeweils speichern ihre Ergebnisse zu einer Datei oder Speicher und sammeln Sie dann die Ergebnisse als letzten Schritt. Mit diesem Ansatz könnte ich jedoch, abhängig von der Bandbreite, einfach weitere Threads hinzufügen und möglicherweise eine größere Beschleunigung erzielen.
Was denkst du?
EDIT: Als ich Speicherbandbreite sagte, meinte ich eigentlich Festplatten-I/O. Das tut mir leid.
Sie müssen einige schnelle Festplatten haben, wenn der Flaschenhals nicht in der Festplatten-E/A liegt. – balpha
Meine Gedanken genau :) –
Bandbreite (I/O oder Speicher) wird ein Engpass, wenn die Hardware nicht mithalten kann. Welche Art von hängt von der * Hardware * ab. Schick mir deinen Computer und ich teste ihn für dich. Oder Sie können es selbst auf Ihrem eigenen System versuchen, da nur so ein zuverlässiges Ergebnis erzielt werden kann. Es gibt keine allgemeine Antwort. – jalf