Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-06-2011, 16:33   #1
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
[C] Chiarimento sui Threads

Ciao a tutti, per ora sto imparando ad usare i threads in C, però vorrei un chiarimento a livello teorico da qualcuno che li sa usare:
da quanto ha detto il prof, ho capito che si usano i threads perchè dovrebbero essere meno dispendiosi a livello di risorse perchè sono parti dello stesso processo e inoltre dovebbero lavorare contemporaneamente giusto?
Solo che io ho fatto un programmino per il calcolo dei numeri primi e fra l'uso dei threads e delle normali funzioni non c'è differenza a livello di tempo, dipende dal fatto che ho usato i join (altrimenti non funzionava) giusto?
Io volevo fare in modo che i 4 threads che ho creato mi cercassero contemporaneamente i numeri primi in modo da ridurre ad 1/4 il tempo di ricerca che si avrebbe richiamando 4 volte la funzione ricerca... ma si vede che non ho saputo usarli bene... per questo prima di scervellarmi chiedo se la teoria dei threads è quella che ho capito o no... ed eventualmente se qualcuno mi può anche illuminare su come modificare il programma che ho fatto (poi lo posto) come avevo in mente di farlo io..

Grazie
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 09:57   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
se hai un processore con più core (fisici o logici, cosa molto probabile nel 2011 ) 2 thread possono essere seguiti in maniera parallela, ovviamente tocca al sistema operativo schedularli su processori diversi (se hai più thread che core ovviamente vanno solo a dividersi i core), ovviamente sta a te dividere un compito in modo tale che i thread possano lavorare in maniera abbastanza indipendente da essere efficienti

comunque l'altro vantaggio dei thread rispetto ai processi è che condividono la memoria, che non è cosa da poco
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 10:05   #3
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
allora facendo un programma come questo:
Codice:
//------ con i threads
pthread_t thread1;
pthread_t thread2;
pthread_t thread3;
pthread_t thread4;

pthread_create (&thread1,NULL,&trovaprimo,&num1);
pthread_create (&thread2,NULL,&trovaprimo,&num2);
pthread_create (&thread3,NULL,&trovaprimo,&num3);
pthread_create (&thread4,NULL,&trovaprimo,&num4);

pthread_join (thread1, (void *) &primo1);
pthread_join (thread2, (void *) &primo2);
pthread_join (thread3, (void *) &primo3);
pthread_join (thread4, (void *) &primo4);

//------ con le funzioni
int candidate1= (int)trovaprimo(&num1);
int candidate2= (int)trovaprimo(&num2);
int candidate3= (int)trovaprimo(&num3);
int candidate4= (int)trovaprimo(&num4);
con i threads non dovrebbe trovare più velocemente gli n-esimi numeri primi richiesti rispetto all'ultima parte dove si richiama 4 volte la stessa funzione??
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 10:47   #4
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
cosa fa trovaprimo?
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 10:57   #5
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
cosa fa trovaprimo?
trova l'n-esimo numero primo.
per esempio se come argomento passo 4 mi trova 5, se passo 5 mi trova 7 ecc.. se passo 15000 mi trova il 25000° numero primo, quindi ci sta un po..
per vedere giusta la differenza ieri ho fatto la prova a cercare il 150000°, 149500°, 149000°, 148500°,
entrambi i metodi ci sono stati circa 20 minuti per la ricerca, ma con i threads addirittura c'è stato più che con le funzioni!!
quando invece in teoria ci dovrebbe impiegare il tempo che ci sta per trovare quello maggiore (perchè gli altri threads dovrebbero finire prima..), invece con le funzioni ogni volta deve cominciare da capo..

ti posto l'intero programma dove c'è anche la funzione time per calcolare i tempi ed ho messo anche una printf in modo da fare stampare subito quando trova i numeri..

Codice:
#include <pthread.h>
#include <stdio.h>
#include <time.h>


void *trovaprimo (void *num){
int n = *((int *)num);
int i;
int candidate=1;

while(1){
int var=1;
for (i=2; i<=(candidate/2); i++){
	if(candidate%i == 0) {
		var=0;
		break;
		}
	}
	if (var){
	n--;
	if(n==0){
	printf("Il %d° numero primo è %d\n", *((int *)num), candidate);
	return (int *)candidate;
	}
	}
candidate++;
}//fine while
}

int main (){
time_t tempo1, tempo2, tempo3, tempo4;
int tempotrascorso1;
int tempotrascorso2;


int num1, num2, num3, num4, primo1, primo2, primo3, primo4;
printf("inserire n-esimo numero prima che si cerca: ");
scanf("%d", &num1);
printf("\ninserire n-esimo numero prima che si cerca: ");
scanf("%d", &num2);
printf("\ninserire n-esimo numero prima che si cerca: ");
scanf("%d", &num3);
printf("\ninserire n-esimo numero prima che si cerca: ");
scanf("%d", &num4);


pthread_t thread1;
pthread_t thread2;
pthread_t thread3;
pthread_t thread4;

pthread_create (&thread1,NULL,&trovaprimo,&num1);
pthread_create (&thread2,NULL,&trovaprimo,&num2);
pthread_create (&thread3,NULL,&trovaprimo,&num3);
pthread_create (&thread4,NULL,&trovaprimo,&num4);

tempo1= time(NULL);
pthread_join (thread1, (void *) &primo1);
pthread_join (thread2, (void *) &primo2);
pthread_join (thread3, (void *) &primo3);
pthread_join (thread4, (void *) &primo4);
tempo2= time(NULL);

printf("\nCon i threads:\n");
printf("Il %d° numero primo è %d\n", num1, primo1);
printf("Il %d° numero primo è %d\n", num2, primo2);
printf("Il %d° numero primo è %d\n", num3, primo3);
printf("Il %d° numero primo è %d\n", num4, primo4);

tempotrascorso1 = difftime(tempo2, tempo1);
printf("Sono trascorsi %d secondi!\n\n", tempotrascorso1);

tempo3= time(NULL);
int candidate1= (int)trovaprimo(&num1);
int candidate2= (int)trovaprimo(&num2);
int candidate3= (int)trovaprimo(&num3);
int candidate4= (int)trovaprimo(&num4);
tempo4= time(NULL);

tempotrascorso2 = difftime(tempo4, tempo3);
printf("\nCon le funzioni:\n");
printf("Il %d° numero primo è %d\n", num1, candidate1);
printf("Il %d° numero primo è %d\n", num2, candidate2);
printf("Il %d° numero primo è %d\n", num3, candidate3);
printf("Il %d° numero primo è %d\n", num4, candidate4);
printf("Sono trascorsi %d secondi!\n\n", tempotrascorso2);

return 0;
}
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 11:50   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12847
Non tutti gli algoritmi sono parallelizzabili.

In particolare il tuo trova-primo non sfrutta in alcun modo le informazioni generate in precedenza, ogni volta ricomincia da 2 per testare se l'i-esimo numero è primo.

Praticamente esegui 4 volte la funzione per numeri diversi, e non sfrutti nessuna delle informazioni generate prima.

Comunque indenta meglio il codice perché così è illeggibile.

Prima di provare con i thread ti suggerisco di ottimizzare il codice attuale.

Ultima modifica di WarDuck : 18-06-2011 alle 11:53.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 13:13   #7
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Non tutti gli algoritmi sono parallelizzabili.

In particolare il tuo trova-primo non sfrutta in alcun modo le informazioni generate in precedenza, ogni volta ricomincia da 2 per testare se l'i-esimo numero è primo.

Praticamente esegui 4 volte la funzione per numeri diversi, e non sfrutti nessuna delle informazioni generate prima.

Comunque indenta meglio il codice perché così è illeggibile.

Prima di provare con i thread ti suggerisco di ottimizzare il codice attuale.
quindi per usare i threads al meglio si deve cercare di sfruttarli fra di loro.. allora non è come pensavo che lavorassero contemporaneamente...

per quanto riguarda l'indentatura è scritto così perchè uso linux con i semplici file di testo e li scrive senza aggiungere spaziatura automatica.. ero abituato male con eclipse che usavo per il java...

inoltre qualcuno ha qualche suggerimento su come si potrebbero sfruttare i threads in questo esempio?
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 13:26   #8
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
lavorano contemporaneamente, dipende dallo scheduler, onestamente lì è strano che tu non abbia proprio vantaggi, certo non è ottimizzato benissimo, ma comunque già se 2 di quei 4 venissero eseguiti contemporaneamente dovresti avere un vantaggio

comunque... 5 sarebbe il quarto numero primo?
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 13:38   #9
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
lavorano contemporaneamente, dipende dallo scheduler, onestamente lì è strano che tu non abbia proprio vantaggi, certo non è ottimizzato benissimo, ma comunque già se 2 di quei 4 venissero eseguiti contemporaneamente dovresti avere un vantaggio

comunque... 5 sarebbe il quarto numero primo?
se i numeri primi sono 1 2 3 5 7 11 13 17 19... il 4° numero primo è 5.....
ovviamente ho tenuto conto anche del numero 1 come primo...

comunque bo... non riesco a capire com'è che non abbia vantaggi.....
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 15:04   #10
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da Balop Guarda i messaggi
se i numeri primi sono 1 2 3 5 7 11 13 17 19... il 4° numero primo è 5.....
ex falso sequitur quodlibet ^_^
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 15:26   #11
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
ex falso sequitur quodlibet ^_^
infatti ho specificato sotto che ho tenuto conto del numero 1 come primo... anche se fooorse... ma vabbè... la cosa importante era un'altra!! =)
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 16:10   #12
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12847
Quote:
Originariamente inviato da Balop Guarda i messaggi
quindi per usare i threads al meglio si deve cercare di sfruttarli fra di loro.. allora non è come pensavo che lavorassero contemporaneamente...

per quanto riguarda l'indentatura è scritto così perchè uso linux con i semplici file di testo e li scrive senza aggiungere spaziatura automatica.. ero abituato male con eclipse che usavo per il java...

inoltre qualcuno ha qualche suggerimento su come si potrebbero sfruttare i threads in questo esempio?
Quote:
Originariamente inviato da Balop Guarda i messaggi
se i numeri primi sono 1 2 3 5 7 11 13 17 19... il 4° numero primo è 5.....
ovviamente ho tenuto conto anche del numero 1 come primo...

comunque bo... non riesco a capire com'è che non abbia vantaggi.....
NOTA: 1 non è un numero primo.

I thread sono semplici esecutori a cui va detto esplicitamente quello che devono fare e comunque la loro utilità dipende dal contesto.

Ad esempio avresti più facilità a vedere i vantaggi del multi-threading nell'ordinamento merge-sort, piuttosto che in questo caso.

Non hai vantaggi perché sostanzialmente il tuo algoritmo non sfrutta il parallelismo, poi ho visto ora che hai messo JOIN, che in sostanza serve per aspettare che gli altri thread finiscano (praticamente lavori sequenzialmente con in più tutto l'overhead dei thread).

Al di là dei thread, se vuoi migliorare le prestazioni del tuo algoritmo dovresti prima di tutto cercare di sfruttare le informazioni che hai.

Se sai che 7 è il 4° numero primo è perché prima hai calcolato gli altri. Dunque ti conviene crearti una tabella (un array ad esempio) di quelli già calcolati.

Per esempio avresti che:

Codice:
index  1  2  3  4  5
value  2  3  5  7  11
Dunque sia X l'indice che vuoi cercare:
  • se X < lunghezza array: ritorna l'elemento array[X]
  • se X > lunghezza array: calcola a partire dall'ultimo elemento dell'array

La tua funzione invece riparte sempre da 0 nel calcolare l'i-esimo primo, dunque ti ricalcoli quelli che hai già calcolato.

Ultima modifica di WarDuck : 18-06-2011 alle 16:13.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 16:20   #13
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
NOTA: 1 non è un numero primo.

I thread sono semplici esecutori a cui va detto esplicitamente quello che devono fare e comunque la loro utilità dipende dal contesto.

Ad esempio avresti più facilità a vedere i vantaggi del multi-threading nell'ordinamento merge-sort, piuttosto che in questo caso.

Non hai vantaggi perché sostanzialmente il tuo algoritmo non sfrutta il parallelismo, poi ho visto ora che hai messo JOIN, che in sostanza serve per aspettare che gli altri thread finiscano (praticamente lavori sequenzialmente con in più tutto l'overhead dei thread).

Al di là dei thread, se vuoi migliorare le prestazioni del tuo algoritmo dovresti prima di tutto cercare di sfruttare le informazioni che hai.

Se sai che 7 è il 4° numero primo è perché prima hai calcolato gli altri. Dunque ti conviene crearti una tabella (un array ad esempio) di quelli già calcolati.

Per esempio avresti che:

Codice:
index  1  2  3  4  5
value  2  3  5  7  11
Dunque sia X l'indice che vuoi cercare:
  • se X < lunghezza array: ritorna l'elemento array[X]
  • se X > lunghezza array: calcola a partire dall'ultimo elemento dell'array

La tua funzione invece riparte sempre da 0 nel calcolare l'i-esimo primo, dunque ti ricalcoli quelli che hai già calcolato.
Intanto grazie per la proposta, ma oltre all'algoritmo che può essere più o meno efficiente (il tuo è palesemente migliore), sto imparando ad usare i threads e a che c'ero volevo vederne l'utilità pratica con questo algoritmo parzialmente modificato da un esempio preso dal libro..

per quanto riguarda i JOIN, li ho dovuti aggiungere perchè altrimenti non sapevo come fare ritornare i valori trovati nel main (ovviamente senza utilizzare quella printf dentro la funzione trovaprimo che era solo per vedere quando trovava i numeri..).
sai come potrei fare ritornare il valore trovato dai threads dentro il main?
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 17:22   #14
*andre*
Senior Member
 
Iscritto dal: Sep 2007
Messaggi: 1071
se vuoi trovare i numeri primi fino ad un certo numero, prova ad implementare questo algoritmo http://it.wikipedia.org/wiki/Crivello_di_Eratostene.

Lo puoi dividere efficentemente in vari threads.
I vantaggi o svantaggi dell'utilizzo dei thread conviene che li testi con un numero molto grande di operazioni, se no oltre a non notare vantaggi a volte noti pure un decadimento delle prestazioni.
__________________
Affari: ariakasneverborne, PanCar, Luk@°°°, Fabio310, kintaro oe, krike, fabry180384, dariox am2, chiadoz, windsofchange, dado1979, Rudyduca, aleforumista, Sheva77
*andre* è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2011, 21:59   #15
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
la join fa aspettare il main thread che la chiama aspettando che finiscano i 4, non gli altri.. quindi non è che abbia una spiegazione diversa da "lo scheduler del tuo os fa schifo " magari ha creato troppi thread rispetto ai core che può usare l'os? anche se usi 2 (e non 4) thread è meglio con il flusso singolo che con i thread?

ps: se la cpu che stai usando è l'e8400 (leggo la firma) è probabile che vada meglio con 2 thread anziché 4, certamente 4 thread non potranno andare in parallelo.. se ci metti che comunque l'uso di thread comporta uno overhead dovuto allo scheduling, se non lo ammortizzi eseguendo davvero parallelamente, non hai nessun vantaggio

Ultima modifica di tuccio` : 18-06-2011 alle 22:08.
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2011, 11:07   #16
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
no ragazzi studio con il portatile e il processore è un i5 450m.
comunque ci avevo pensato anche io che fosse colpa del join (ragà ve l'ho scritto pure nel primo post ma nessuno ci ha fatto caso!! xD)
ma come ho scritto poco sopra, senza usarlo non saprei come fare tornare il valore trovato dentro il main, qualcuno sa come fare?
di pome lo rivedo un po.... vedo di provare con una variabile globale in modo da eliminare i join...
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2011, 11:14   #17
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
non capisco quale sarebbe il problema nel join
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2011, 11:23   #18
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
non capisco quale sarebbe il problema nel join
i join hanno la funzione di aspettare la fine del thread passato come argomento...
però ora che ci penso, aspetta il thread passato come argomento prima di deallocare le risorse, non prima di essere eseguito...
infatti con la printf messa nella funzione trovaprimo vedo che se passo per esempio 25, 10, 16, 5
mi trova prima il 5° poi il 10° poi il 16° e poi il 25°, quindi i threads funzionano,
invece con le funzioni mi trova i numeri per come glieli passo io, quindi prima il 25° poi il 10° ecc...
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2011, 12:30   #19
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12847
Ribadisco il concetto: il tuo problema è l'algoritmo che così com'è mi sembra poco parallelizzabile, join o non join, parametri passati o meno tra thread...
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2011, 14:39   #20
Rsk
Senior Member
 
L'Avatar di Rsk
 
Iscritto dal: Dec 2006
Messaggi: 314
Come ti hanno già suggerito, implementa il crivello di eratostene.
E' facilmente parallelizzabile.
Se hai n core e vuoi utilizzare n thread, puoi suddividere lo spazio dei numeri in n partizioni e assegnare ad ogni thread un set di S/n elementi su cui lavorare, dove S è il limite superiore del tuo insieme.
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB
Rsk è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Le sonde spaziali ESA ExoMars e Mars Exp...
Roscosmos: static fire per i propulsori ...
Alcune partite NBA saranno trasmesse in ...
Intel Core 13000 e 14000 aumentano uffic...
Gemini sta per arrivare in Google Maps: ...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:25.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v