Bringt Multiprozessorfähiger Code etwas bei excessivem Festplattenzugriff?
-
Hi,
Ich habe hier ein Programm geschrieben das viele Berechnungen anhand einer Datei durchführen muß.
Rein vom rechnen her würde es sich lohnen, daß Progamm so schreiben, daß es Mehrprozessorkernsysteme ausgiebig nutzt.
Das Problem das ich hier sehe ist dabei nur, daß es ja nur eine Festplatte gibt
und der Programmcode excessivem Gebrauch von der Datei auf der Festplatte machen muß, um die Berechnungen zu machen.
Lohnt es sich da also überhaupt, den Programmcode auf Multiprozessorfähigkeit auszulegen?PS:
Aufgrund der Größe der Datei kann ich diese leider auch nicht in den Hauptspeicher auslagern.
-
MPCPU schrieb:
Aufgrund der Größe der Datei kann ich diese leider auch nicht in den Hauptspeicher auslagern.
da lässt sich doch bestimmt was optimieren, oder muss dein algo wirklich wahllos in der ganzen datei rumwuseln?
zu deiner frage: wie wär's mit ausprobieren?
-
Ich sag es mal so, er muß via Bruteforce eine Datei entschlüsseln und
auf die Kerne kann ich also nur das Schlüssel erzeugen auslagern,
die Datei entschlüsseln macht IMO nur auf einen Kern Sinn, wegen der Festplatte die auf die DAtei zugreift.
-
Dann lad dir die Datei halt in den Speicher (oder lad dir handliche Stücke). Wie ~fricky schon sagte, du brauchst doch bestimmt nicht die ganze Zeit wahlfreien Zugriff auf die gesamte Datei (was aber bei entsprechender Größe auch irrelevant wäre) …
-
MPCPU schrieb:
Ich sag es mal so, er muß via Bruteforce eine Datei entschlüsseln und
auf die Kerne kann ich also nur das Schlüssel erzeugen auslagern,
die Datei entschlüsseln macht IMO nur auf einen Kern Sinn, wegen der Festplatte die auf die DAtei zugreift.Eine Datei Brute-Force entschlüsseln indem du für jeden Schlüssel-Kandidaten versuchst die ganze Datei zu entschlüsseln. Die so gross ist dass sie nichtmal ganz in den Speicher passt. OMG, denk mal drüber nach
-
hustbaer schrieb:
MPCPU schrieb:
Ich sag es mal so, er muß via Bruteforce eine Datei entschlüsseln und
auf die Kerne kann ich also nur das Schlüssel erzeugen auslagern,
die Datei entschlüsseln macht IMO nur auf einen Kern Sinn, wegen der Festplatte die auf die DAtei zugreift.Eine Datei Brute-Force entschlüsseln indem du für jeden Schlüssel-Kandidaten versuchst die ganze Datei zu entschlüsseln. Die so gross ist dass sie nichtmal ganz in den Speicher passt. OMG, denk mal drüber nach
Hab ich.
Glücklicherweise ist die Anzahl der möglichen Schlüssel stark eingeschränkt.
-
Wenn deine Berechnungen langsamer sind als die Plattenzugriffe, dann könnte es etwas bringen.
-
:xmas2: nimm einen profiler und schau was zeit braucht
immer das gleiche :xmas2:
-
Du könntest die Datei auf mehrere Platten aufteilen und auch teile in den RAM laden und dann alles auf der GPU berechnen. Bringts! Bin auch gerade dabei sowas zu machen!
-
versuche die daten mit mehreren schluesseln zu entschluesseln.
fopen(..) for(blockcount) { data=readblock(); DecodeKey(Key0,data); DecodeKey(Key1,data); DecodeKey(Key2,data); DecodeKey(Key3,data); ... }
wenn du es weiter optimieren willst, mach einen thread der die daten fuer den naechsten schleifendurchlauf liest, waehrend du die anderen kerne schon fuer diesen datenblock entschluesseln laesst. da daten oft per dma gelesen werden, lohnt es sich selbst bei einem single-core system noch 2threads laufen zu lassen.
-
rapso schrieb:
wenn du es weiter optimieren willst, mach einen thread der die daten fuer den naechsten schleifendurchlauf liest, waehrend du die anderen kerne schon fuer diesen datenblock entschluesseln laesst. da daten oft per dma gelesen werden, lohnt es sich selbst bei einem single-core system noch 2threads laufen zu lassen.
Dazu müßte ich wissen, wie so ein Truecrypt Volume aufgebaut ist
und wie man es genau entschlüsselt.
-
D.h. momentan ist das so gelöst, das mein Code den Volumenamen und das Passwort über einen Systemaufruf an Truecrypt gibt.
Also in etwa so:
system("truecrypt ....");
-
MPCPU schrieb:
hustbaer schrieb:
MPCPU schrieb:
Ich sag es mal so, er muß via Bruteforce eine Datei entschlüsseln und
auf die Kerne kann ich also nur das Schlüssel erzeugen auslagern,
die Datei entschlüsseln macht IMO nur auf einen Kern Sinn, wegen der Festplatte die auf die DAtei zugreift.Eine Datei Brute-Force entschlüsseln indem du für jeden Schlüssel-Kandidaten versuchst die ganze Datei zu entschlüsseln. Die so gross ist dass sie nichtmal ganz in den Speicher passt. OMG, denk mal drüber nach
Hab ich.
Glücklicherweise ist die Anzahl der möglichen Schlüssel stark eingeschränkt.So, mein Bruteforce Passwortherausfind Programm ist jetzt seit Mittwoch fertig und ich konnte meine beiden Truecrypt Volumes, bei denen ich das Passwort vergessen hatte, wieder öffnen.
Der Rechner hat jeweils ca. 6000-8000 Versuche gebraucht, dann hatte er das Passwort.
Truecrypt ist dadurch natürlich nicht unsicher geworden, sondern mein Bruteforce Programm war sehr spezifisch was die möglichen Schlüssel betrifft.
Ohne Kenntnis wie die Passwörter erstellt wurden, würde man die Passwörter übrigens als sehr sicher einstufen. Denn es sind Sonderzeichen, Gruß- und Kleinbuchstaben als auch Zahlen enthalten.
Außerdem war die Schlüssellänge ca. 16-34 Zeichen lang.Auf jedenfall hat sich die Mühe gelohnt, ich komme endlich wieder an meine Daten.