Prime Cores V1.0 Freeware
-
ok, tra una cosa e l'altra ho quasi terminato,
se mi date l'ok trasformo questa pre release in final,

aspetto i vostri commenti....
-
direi che è OK


l'unico appunto è che la prima esecuzione ha tirato fuori un tempo + alto di circa 4/10 sec.
Dalla seconda in poi, praticamente medesimo tempo

-
ok

anche a me nella seconda esecuzione da valori inferiori..ma ben diversi da quelli di toto!!

la funzione salva non è ancora implementata?
-

funziona, bel lavoro bonis62:clapclap:
-
Provato!

Ottimo lavoro. Funziona alla grande.

-
Bel programma!
funziona pero' se lo eseguo piu' volte c'è un'oscillazione del valore e questo scarto arriva anche a 2 secondi.
-
funziona anche troppo bene tanto che l'ultimo step per il maggior numero di numeri primi, imho, è anche troppo veloce... 35sec circa sul mio superpippa II!!
alla fine sei arrivato ad un algoritmo anche troppo efficiente
:asd:
-
apix_1024 ha scritto:
funziona anche troppo bene tanto che l'ultimo step per il maggior numero di numeri primi, imho, è anche troppo veloce... 35sec circa sul mio superpippa II!!alla fine sei arrivato ad un algoritmo anche troppo efficiente
:asd:
per ogni core parto da 0 e arrivo a trovare max 21336354 numeri primi
quindi il tuo computer non calcola 512072496 numeri primi reali ,
ma (0 -> 21336354) * (numero di core)
21336354 * 24 = 51207249
in queste ore ho messo a punto (e funziona) lo stesso algoritmo
ma con il THREAD_PRIORITY_HIGHEST settato su ON per migliorarne
l'efficenza, senza toccare la priorità dell'intero processo, ho implementato
anche un multithreading sui singoli processi restanti
per migliorare la latenza,
e ho scoperto che i benchmark multicore che danno sempre lo stesso tempo
su sistemi multicore o.... sono ottimizzati da piccoli omini verdi o.... secondo
me non sono reali.....

come Toto ti potra confermare , il 75 % del codice è in C ,
la routine che estrapola i numeri primi è in Assembler (INLINE nel codice C),
quindi Thread gestiti in C e calcoli in Assembler.
-
mi servirebbe una cortesia, il risultato esatto
del livello 1 con Primecores appena lanciato.
solo per chi ha un quad core o superiore.
grazie
-
bonis62 ha scritto:
mi servirebbe una cortesia, il risultato esattodel livello 1 con Primecores appena lanciato.
solo per chi ha un quad core o superiore.
grazie
Eccolo:


-
-
-
anche se l'E5200 non è un quad, posto ugualmente lo score del livello 01 (potrebbe esserti utile ugualmente):

livello 02:

-
-
principino1984 ha scritto:
se provi i livelli 1 2 4 8 e 24... dovrebbe funzionare tutto,
gli altri livelli li sto ancora ottimizzando....

-
Ciao,
ecco una nuova versione in cui dovrei aver stabilizzato i tempi dei test
con un controllo più accurato dei vari thread,
i livelli attivi sono da 01 a 10 e il 24 per ora.
http://www.xstreme.it/NewPrimeCores.zip 
.
-
stai facendo davvero un lavoro superlativo

Complimenti, soprattutto per la velocità dell'algoritmo :clapclap:
-
Totocellux ha scritto:
stai facendo davvero un lavoro superlativo
Complimenti, soprattutto per la velocità dell'algoritmo :clapclap:
grazie
anche se devo dire che il codice che gestisce
fino a 24 cores non è da meno dell'algoritmo
,il "wait" del multithread ho dovuto riscriverlo a modo mio,
altrimenti il ciclo, in attesa che uno dei threads terminava,
non mi permetteva di uscire nel momento in cui si premeva
il pulsante di abort....essendo multitasking se termini
il processo che ha lanciato il task , non vuol dire terminare
il task in esecuzione.. non so se mi sono spiegato...bene...
in altri termini...se atterri chi ha lanciato la pietra...non vuol dire che la pietra smetta la sua corsa

specialmente se chi tira la pietra è scritto in C, e la pietra e scritta in assembler....
mi fermo qui....è meglio....

-
bonis62 ha scritto:
grazieanche se devo dire che il codice che gestisce
fino a 24 cores non è da meno dell'algoritmo
,il "wait" del multithread ho dovuto riscriverlo a modo mio,
altrimenti il ciclo, in attesa che uno dei threads terminava,
non mi permetteva di uscire nel momento in cui si premeva
il pulsante di abort....essendo multitasking se termini
il processo che ha lanciato il task , non vuol dire terminare
il task in esecuzione.. non so se mi sono spiegato...bene...
in altri termini...se atterri chi ha lanciato la pietra...non vuol dire che la pietra smetta la sua corsa

non so quanto sia nidificato e profondo tale tipo di controllo, hai calcolato quanto ha inciso sull'efficienza, cioè quanto ti è costato in termini di % sul ciclo primario?
-
Totocellux ha scritto:
non so quanto sia nidificato e profondo tale tipo di controllo, hai calcolato quanto ha inciso sull'efficienza, cioè quanto ti è costato in termini di % sul ciclo primario?in multithreading non devi più ragionare cosi.....
mi spiego meglio...con un esempio
{
un cavo porta corrente a 24 lampadine
questo è quando lavoravi senza multithreading
}
{
24 cavi portano corrente a 24 lampadine
questo è quando lavori con il multithreading
}
{
la lampadina senza corrente si spegne
}
{
un thread per restare "acceso" deve rimanere all'interno
un ciclo che ne permette la sua esecuzione fino alla fine
}
quindi....
se fai un controllo per verificare, per esempio che
il thread n. 15 ha terminato, se il controllo
non è lui stesso inserito in un contesto multithreading,
ritorniamo alla singola esescuzione monocorde,
per non nidificare basta creare un multithreading nel multithreading,
dove cè la classe multithreading che esegue i cicli di calcolo,
((la classe multithreading al suo interno non deve contenere
thread figli, altrimenti il controllo del singolo threads va a pallini
))l'atro mutithreading controlla che la classe multithreadig "calcoli"
abbia terminato di far lavorare tutti i thread aperti sui singoli cores,
quando la classe multithreading "controllo" ha tutti i registri a zero,
significa che tutti i threads "calcoli" hanno concluso,
preleva il tempo trascorso e lo visualizza;
finchè lavori in mono linguaggio questo è releativamente
semplice, ma come tu ben sai, il pacchetto e composto
da 3 linguaggi, --- basic , c , assembler ---
il basic racchiude il C, il C racchiude l'assembler,
quindi
con l'assembler faccio i calcoli,
con il C gestisco la classe multhithread "calcoli"
con il basic gestisco la classe multithread "controllo"
basic > controlla C > controlla assembler > controlla calcoli
con un return del C ho il tempo impiegato,
con il basic lo stampo a schermo
The End
:uglystupid2:
:uglystupid2:
:uglystupid2:ps
nella versione che sto scrivendo, nei tempi morti di controllo
della classe multithread "calcoli" ho inserito una pezza scritta
in C che esegue un "memmove" a 20Kb di dati 100 volte al
secondo in modo che nel risultato finale rientri anche la
velocità delle memorie, ho usato 20Kb per rimanere sempre
in ambito memoria fisica, altrimenti mi usava lo swap da disco
con i vecchi pentium o amd.
Ciao! Sembra che tu sia interessato a questa conversazione, ma non hai ancora un account.
Stanco di dover scorrere gli stessi post a ogni visita? Quando registri un account, tornerai sempre esattamente dove eri rimasto e potrai scegliere di essere avvisato delle nuove risposte (tramite email o notifica push). Potrai anche salvare segnalibri e votare i post per mostrare il tuo apprezzamento agli altri membri della comunità.
Con il tuo contributo, questo post potrebbe essere ancora migliore 💗
Registrati Accedi

