Hallo Jungs,
ich hab mal ne Frage zur Parallelisierung meines Programms. Ich werte Textdateien mit einer Funktion aus, die intern Statistiken fuerht (z.B. 'wie viele Atome liegen auf der Proteinoberflaeche', etc.). Momentan laufe ich durch ein Verzeichnis und rufe die "Auswertungsfunktion" fuer jede Datei auf. Nachdem die Datei bearbeitet wurde, werden globale Zaehler aktualisiert ('wie viele Atome lagen insgesamt auf der Proteinoberflaeche', 'wie viele Atome wurden insgesamt in allen Dateien bisher gezaehlt' usw.). Das klappt auch alles sehr gut, allerdings ist mir beim letzten Durchlauf durch das beobachten von top(1) aufgefallen, dass meine CPU nur zu 25% ausgenutzt wird. Ich habe einen Dual-Core Prozessor mit 4 Threads. Offenbar(?) wird nur 1 Thread genutzt. Pro Durchlauf benoetigt das Programm immerhin ca. eine Stunde (ca. 1000 Dateien). Es ist also nicht so effizient, wie es vielleicht sein koennte.
Ich kenne mich mit parallelisierung gar nicht aus, aber fuer mich scheint es im Moment so, als sollte das Programm parallelisierbar sein, denn der einzige "Kontakt", den ein Auswertungsschritt mit dem Hauptprogramm hat, ist die Erhoehung der globalen Zaehler. Das ganze wird in Java programmiert. Meint ihr, dass man das Programm parallelisieren koennte? Falls jemand darueber hinaus noch Hinweise oder Links hat, wie das ganze unter Java zu realisieren ist, waere ich natuerlich auch sehr dankbar. Falls weitere Informationen benoetigt werden, poste ich sie natuerlich.
Viele Gruesse,
drm
Edit: Beim parsen jeder Datei wird eine weitere Funktion aufgerufen, um die Oberflaechenatome des Proteins zu berechnen. Das dauert - je nach Groesse des in der Datei beschriebenen Proteins - bis zu 15 Sekunden. Daher die lange Laufzeit und die Hoffnung auf Besserung durch Parallelisierung
ich hab mal ne Frage zur Parallelisierung meines Programms. Ich werte Textdateien mit einer Funktion aus, die intern Statistiken fuerht (z.B. 'wie viele Atome liegen auf der Proteinoberflaeche', etc.). Momentan laufe ich durch ein Verzeichnis und rufe die "Auswertungsfunktion" fuer jede Datei auf. Nachdem die Datei bearbeitet wurde, werden globale Zaehler aktualisiert ('wie viele Atome lagen insgesamt auf der Proteinoberflaeche', 'wie viele Atome wurden insgesamt in allen Dateien bisher gezaehlt' usw.). Das klappt auch alles sehr gut, allerdings ist mir beim letzten Durchlauf durch das beobachten von top(1) aufgefallen, dass meine CPU nur zu 25% ausgenutzt wird. Ich habe einen Dual-Core Prozessor mit 4 Threads. Offenbar(?) wird nur 1 Thread genutzt. Pro Durchlauf benoetigt das Programm immerhin ca. eine Stunde (ca. 1000 Dateien). Es ist also nicht so effizient, wie es vielleicht sein koennte.
Ich kenne mich mit parallelisierung gar nicht aus, aber fuer mich scheint es im Moment so, als sollte das Programm parallelisierbar sein, denn der einzige "Kontakt", den ein Auswertungsschritt mit dem Hauptprogramm hat, ist die Erhoehung der globalen Zaehler. Das ganze wird in Java programmiert. Meint ihr, dass man das Programm parallelisieren koennte? Falls jemand darueber hinaus noch Hinweise oder Links hat, wie das ganze unter Java zu realisieren ist, waere ich natuerlich auch sehr dankbar. Falls weitere Informationen benoetigt werden, poste ich sie natuerlich.
Viele Gruesse,
drm
Edit: Beim parsen jeder Datei wird eine weitere Funktion aufgerufen, um die Oberflaechenatome des Proteins zu berechnen. Das dauert - je nach Groesse des in der Datei beschriebenen Proteins - bis zu 15 Sekunden. Daher die lange Laufzeit und die Hoffnung auf Besserung durch Parallelisierung

Zuletzt bearbeitet: