Primzahlen(Bench) seit Version 3.0 mit Quadcoreunterstützung!

Hi K.I.L.L.U.A
wirklich tolle Arbeit, super Progi!
kannst du mir verraten wie das geht?
gibts da einen fertigen code der sagt man soll die primzahlen rechnen oder wie funktioniert das?
ps. bestimmt c++ odere?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
n kann max. 4.294.967.295 sein ... für 5.000.000 hat mein rechner schon über 2h gebraucht :fresse: (da war aber noch kein multithreading implementiert)
Kann aber auch problemlos auf
[int64 unsinged] = 18.446.744.073.709.551.615 bzw.
[int128 unsinged] ≈ 3,40282*10^38
erhöht werden ... wenn der Arbeitsspeicher nicht ausgeht ;P (ab Version 3.0, da erst da ein Array implementiert ist)



ne halbe stunde mit'm 45nm quad @3,72ghz...dachte wäre ein tick schneller ;) ach und ja, steigt der der verwendete arbeitsspeicher mit n an oder bleibt er gleich, da das prog gerade mal 20mb verbrauchte.

ansonsten klasse sache, und mit dem dosfenster im matrixlook um einiges spannender als prime95 :shot:

was ich mir wünsche: 64bit support, simd4 unterstützung und dann das ganze mit'm neuesten intel fortan compiler kompiliert :d
 
@pupsi666:
er steigt an !

öffne einfach den taskmanager und geh zu den prozessen
bei prim_3.1.exe kannst du sehen wie die Arbeitsspeicherreservierung ansteigt

aber kritisch wird das erst bei größeren Zahlen

die größte bekannte Primzahl ist (2^30402457) -1

und 2^(304) hat schon 91 Stellen vor dem Komma :fresse:


@ pes-forever

ja das Programm wurde in cpp geschrieben

den Algorithmus hab ich im ersten Post beschrieben ... ist aber nicht mehr ganz aktuell

momentan testet der Algorithmus alle ungeraden zahlen bis n ob diese durch ihre ungeraden Vorgänger teilbar ist

und wie Hiradur schon richtig bemerkte:
Habs jetzt nur überflogen, aber du kannst bereits bei n/2 aufhören zu teilen, da alle Zahlen > n/2 niemals mit einer natürlichen Zahl multipliziert n ergeben können.

kann der Algorithmus verbessert werden.
 
Zuletzt bearbeitet:
Version 3.2 ist da und nutzt einen effizienteren Algorithmus (thx Hiradur für den Hinweis ... musste dafür aber ganzschön was am code ändern, da ich von n bis 3 rückwärts getestet hatte und nicht von 3 bis n)

--> ist sehr viel schneller als v3.1 !
 
Zuletzt bearbeitet:
So habs nochmal neu hochgeladen jetzt gibt er euch immer erst am Ende die Zeit und das "Fertig" aus :)

@daysleeper83: so lange ??

n=100.000
100qy8.png


Hab zwar den den -Intel Fortran Compiler- benutzt aber dadurch ist das Programm nicht schneller geworden.
Und ne x86_64 Build bringt auch nichts für die Geschwindigkeit.

n=1.000.000
-->>26.02056 s
 
Zuletzt bearbeitet:
Habs nochmal getestet komm auf 0.5s, bei 1.000.000 brauch ich mal eben 36 sek :d. Denk mal das läuft eh nur auf der x87 FPU, da zieht Intel natürlich davon ;D
 
Zuletzt bearbeitet:
Hab zwar den den -Intel Fortran Compiler- benutzt aber dadurch ist das Programm nicht schneller geworden.
Und ne x86_64 Build bringt auch nichts für die Geschwindigkeit.

schade :( obwohl das mehr auch als spass gedacht war; bei so simplen sachen wie primzahlenberechnung dürfte das einerlei sein. werde die neue mal später testen. :)


Hinzugefügter Post:

Habs nochmal getestet komm auf 0.5s, bei 1.000.000 brauch ich mal eben 36 sek :d. Denk mal das läuft eh nur auf der x87 FPU, da zieht Intel natürlich davon ;D

yup:

aufzeichnenpb7.jpg


:d

5.000.000 = 153.62588 s.
so mal eben aus ner halben stunde berechnungen 2.5min gemacht: thx. haridur ;)
 
Zuletzt bearbeitet:
^_^ laut Wikipedia

integer[x-bit] unsigned
größte darstellbare Zahl: (2^(x))-1
Vorkommastellen: obere Gauß-Klammer [log10{2^x}]

-->> d.h. um die größte bekannte Primzahl (2^(30402457)) -1 darzustellen benötigt man einen integerwert mit 30.402.457 bit :fresse:

edit: bin ich blöd dafür brauch man kein wikipedia XD
 
Zuletzt bearbeitet:
das liegt an dem implementierten array

ich weis noch nicht wie ich das löse -_-

Code:
DWORD a;                
...
DWORD *array;
...
array = (DWORD *) calloc(a, sizeof(DWORD));

hier tritt dann der Feher auf wenn a = 500.000.000

die größte Zahl die man eingeben kann ist 410.714.091


in das Array schreibe ich die Primzahl p an die Stelle p-1, da das array mit 0 bis (a-1) initialisiert wird
array[p-1]=p;
der rest bleibt 0 ---> somit kann ich die Primzahlen leicht ausgeben ohne sortieren zu müssen

edit:
hab was brauchbares gefunden

Der Index eines Arrays muss immer ein ordinaler Typ mit einem Wertebereich von maximal 2 GB sein. Damit wird die maximale Größe eines Arrays beschränkt.
 
Zuletzt bearbeitet:
Du könntest natürlich am Ende noch einen Quicksort drüberlaufen lassen, damit am Ende alle Zahlen sortiert sind (ein kleiner Bench ist es auch noch ;)).

//EDIT: Oh, ist mir gar nicht aufgefallen:
prim_3.2 -> nutzt einen verbesserten Algorithmus (thx Hiradur für den Hinweis ... obwohl ich mir das auch schon überlegt hatte ), unterstützt Dualcore- und Quadcoreprozessoren und legt eine Datei (alle_primzahlen_geordnet.txt) mit allen berechneten Primzahlen in der richtigen Reihenfolge an
Bei mir wird die Datei mit prim_3.3 nicht erstellt, normal?

//EDIT2: Ich sollte die Dinge wohl besser untersuchen. Anscheinend speichert prim_3.3 nur noch auf Wunsch.
Naja, einen Bug gibt es aber trotzdem noch: Wenn man ein zweites Mal P-Zahlen berechnen lässt, ohne das Programm neuzustarten, wird
a) die Zeit nicht aktualisiert
b) nur noch in der ersten Spalte Zahlen angezeigt werden.
 
Zuletzt bearbeitet:
hier mal meine werte mit einem q6600@3400mhz :
version prim_3.2

n=100.000 = 1,35169
n=200.000 = 2,93015
n=1.000.000= 11,71432
 
prim 3.3
n=100.000 = 7,229s
n=200.000 = 10,646s
n=1.000.000 = 99,695s


Lastet im übrigen nur einen Thread von den 16 meines R7 1700 aus. Dieser läuft auf 3,6GHz
 
@CubeZero3485656 Dir ist schon bewusst das der Thread aus 2008 ist ?
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh