Parallelisierung zweier BigInteger-Funktionen

thomas235

Mitglied
Hallo zusammen,

ich arbeite zurzeit an einem Programm, das 2 mal hintereinander die Methode BigInteger.probablePrime aufruft. Ich initialisiere diese mit einer SecureRandom Instanz und einer relativ großen Bitlänge (> 2048 Bit).
Demnach ist die Ausführung entsprechend langsam.
Also meine Frage: ist es möglich die probablePrime Methode an sich zu parallelisieren?

Falls nein: kann ich die beiden Methoden wenigstens in 2 verschiedenen Threads ausführen lassen und wie?
meine Idee:
Java:
            Thread t1 = new Thread(new Runnable() {

                @Override
                public void run() {
                    p1 = BigInteger.probablePrime(bitLength, rnd);
                }
            });
            t1.start();
            Thread t2 = new Thread(new Runnable() {

                @Override
                public void run() {
                    p2 = BigInteger.probablePrime(bitLength, rnd);
                }
            });
            t2.start();
Problem: woran merke ich, dass beide Primzahlen berechnet sind?

gruß thomas
 

thomas235

Mitglied
Danke :)

bin noch nicht so erfahren mit Threads ;)
immerhin hab ich jetzt die Ausführungszeit schonmal halbiert

gibt es auch eine Möglichkeit die Methode probablePrime() selbst zu parallelisieren?

gruß thomas235
 
S

SlaterB

Gast
abgesehen davon dass ich wohl nicht genau definieren/ verstehen könnte was du unter 'eine Methode parallelisieren' meinst, dürfte gelten:
nein, das geht nicht (außer vielleicht mit ganz verrücken Dingen wie AOP) und ist auch normalerweise nicht nötig,

lasse die Methode einfach nur rechnen, erstelle eine neue Methode irgendwo probablePrimeXY(), die probablePrime() aufruft und drumherum noch anderes macht,
wie man allerdings an deinem Aufbau sieht, ist es mit einer einzelnen Methode wohl kaum getan,
was genau soll die Methode machen? selbst wenn sie einen neuen Thread startet, wie geht es weiter,
kehrt sie sofort zurück/ was gibt sie zurück?

wenn sie auf das Ende des gestarteten Threads warten müsste, wäre es doch nicht anders als direkt probablePrime() auszuführen,
man muss schon mehrere Threads starten und auf die Ergebnisse warten, ein größerer Verbund an Arbeit


edit:
ach ja, vielleicht meinst du die interne Berechnung, den Suchzahlraum aufsplitten usw.
 
Zuletzt bearbeitet von einem Moderator:

Empire Phoenix

Top Contributor
Statt zwei threads einfach nen ThreadPoolExecutor mit processoranzalh nehmen (unter der annahme das du mehr als nur zwei tests machst. Dann skaliert es immerhin schonmal schön über multicores.
 

thomas235

Mitglied
Die Methode soll 2 große Primzahlen wählen, die zum Diffie-Hellman Schlüsselaustauschprotokoll gebraucht werden.
Diese Berechnung (also die Aufrufe der Methoden probablePrime()) nimmt mit Abstand den größten Teil der Zeit in Anspruch (sonstige Berechnungen nur ca. eine Sekunde).
Ich bin nun aber zu dem Schluss gekommen, dass die Parallelisierung der Methode BigInteger.probablePrime() einen Eingriff in deren Implementierung erfordern würde.

gruß thomas235
 

Marco13

Top Contributor
Oder eine Neuimplementierung. Notfalls mit Copy & Paste aus BigInteger.java :D Aber .. BigInteger an sich ist AFAIR ziemlich unperformant, es gibt sicher Bibliotheken für große Ganzzahlen die schneller sind...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
B Kollision zweier Kugeln im R² Allgemeine Java-Themen 2
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
I Vergleich zweier Felder Allgemeine Java-Themen 3
F Vergleich zweier Listen Allgemeine Java-Themen 4
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
P gegenseitige Methodenaufrufe zweier Klassen Allgemeine Java-Themen 14
MQue Verbindung zweier Klasse Allgemeine Java-Themen 13
D Generalisierungsbeziehung zweier Klassen Allgemeine Java-Themen 5
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
J vergleich zweier datenstrukturen Allgemeine Java-Themen 6
Z Verknüpfung zweier Klassen! Allgemeine Java-Themen 2
N Vergleich zweier Hashtable / mehrere Enumerations Allgemeine Java-Themen 7
M run()-Code zweier Threads strikt abwechselnd ausführen Allgemeine Java-Themen 7
M BigInteger auf 128Bit kürzen Allgemeine Java-Themen 5
M BigInteger Allgemeine Java-Themen 8
C BigInteger nach ASCII Code in String Allgemeine Java-Themen 11
G BigInteger aus DB nach einlesen in JAVA eingeklammert Allgemeine Java-Themen 3
C BigInteger in Exponentialschreibweise darstellen Allgemeine Java-Themen 2
J BigInteger und BigDecimal im Eclipse-Debugger Allgemeine Java-Themen 3
B BigInteger und Int Allgemeine Java-Themen 17
T BigInteger Bedingungsfehler Allgemeine Java-Themen 5
T BigInteger DataInputStrea Allgemeine Java-Themen 5
T "unsigned" byte[] -> BigInteger Allgemeine Java-Themen 2
J BigInteger mit Tausenderpunkt Allgemeine Java-Themen 2
D Palinddrom-Programm mit BigInteger Allgemeine Java-Themen 4
M BigInteger-Problem Allgemeine Java-Themen 12
T Profifrage: java.lang.StackOverflowError bei BigInteger Allgemeine Java-Themen 27
0 Keine clone-Methode für BigDecimal und BigInteger? Allgemeine Java-Themen 3
A BigInteger for-Schleife schreiben ?! Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben