Hallo,
ich habe ein Programm, dass ich jeweils mit einer von mehreren Dateien als Parameter aufrufe. Ich würde nun gerne alle Instanzen des Programms im möglichst kurzer Zeit laufen lassen.
Das Programm selbst lastet genau einen CPU-Kern voll aus. Die Laufzeit des Programms ist grob linear zur Größe der Datei (läuft also mit einer 1MB-Datei ca. doppelt so lang wie mit 500KB).
Gehen wir mal von c CPU-Kernen aus. Der einfachste Aufruf von der Kommandozeile aus, ist "prog1 file1 | progr1 file2 | prog1 file3 ...". Damit werden alle Dateien gleichzeitig abgearbeitet. Jetzt ist das aber nicht wirklich optimal. Nehmen wir an, file1 und file2 sind jeweils 1MB groß, file3 aber 2MB. Nach einer gewissen Zeit (wenn jedes Programm etwa die gleiche CPU-Zeit zugeteilt bekommt) sind von allen files 1MB abgearbeitet. Folge: die restlichen 50% der Zeit läuft die zweite Hälfte von file3 auf einem CPU-Kern, während sich der andere langweilt. Besser wäre es in dem Fall also, wenn file3 von Anfang an einen Kern bekommt, und sich file1 und file2 den zweiten Kern teilen.
Was ich nun suche, ist eine Möglichkeit das ganze auf X Kerne und Y Dateien zu verallgemeinern. Ich schätze, dass die Laufzeit ideal sein müsste, wenn jede Instanz prozentual soviel CPU-Zeit von allen Kernen bekommt, wie die Parameter-Datei anteil an der Gesamtgröße aller Dateien hat. Allerdings weiß ich nicht, wie ich so etwas umsetzen könnte. Ich hoffe da kann mir jemand weiterhelfen.
MfG Anub1s
ich habe ein Programm, dass ich jeweils mit einer von mehreren Dateien als Parameter aufrufe. Ich würde nun gerne alle Instanzen des Programms im möglichst kurzer Zeit laufen lassen.
Das Programm selbst lastet genau einen CPU-Kern voll aus. Die Laufzeit des Programms ist grob linear zur Größe der Datei (läuft also mit einer 1MB-Datei ca. doppelt so lang wie mit 500KB).
Gehen wir mal von c CPU-Kernen aus. Der einfachste Aufruf von der Kommandozeile aus, ist "prog1 file1 | progr1 file2 | prog1 file3 ...". Damit werden alle Dateien gleichzeitig abgearbeitet. Jetzt ist das aber nicht wirklich optimal. Nehmen wir an, file1 und file2 sind jeweils 1MB groß, file3 aber 2MB. Nach einer gewissen Zeit (wenn jedes Programm etwa die gleiche CPU-Zeit zugeteilt bekommt) sind von allen files 1MB abgearbeitet. Folge: die restlichen 50% der Zeit läuft die zweite Hälfte von file3 auf einem CPU-Kern, während sich der andere langweilt. Besser wäre es in dem Fall also, wenn file3 von Anfang an einen Kern bekommt, und sich file1 und file2 den zweiten Kern teilen.
Was ich nun suche, ist eine Möglichkeit das ganze auf X Kerne und Y Dateien zu verallgemeinern. Ich schätze, dass die Laufzeit ideal sein müsste, wenn jede Instanz prozentual soviel CPU-Zeit von allen Kernen bekommt, wie die Parameter-Datei anteil an der Gesamtgröße aller Dateien hat. Allerdings weiß ich nicht, wie ich so etwas umsetzen könnte. Ich hoffe da kann mir jemand weiterhelfen.
MfG Anub1s