06/10/15 13:57
osharko
ho implementato il multithreading utilizzando lo standard posix (per la portabilità e per il fatto che l'ho già usato).
Purtroppo ho notato che con l'implementazione del multithreading:
1) l'algoritmo funziona più lentamente
2) verso la fine mi vengono scritti alcuni numeri primi replicati.
Ho pensato che il rellantamente dell'algoritmo fosse dovuto all'utilizzo dei mutex, ne utilizzo due per due operazioni differenti:
-Mutex_lista : lo uso quando devo fare l'inserimento di un elemento in coda alla lista + stampa annessa
-Mutex_Corrente: lo uso quando devo acquisire l'elemento corrente da calcolare, acquisisco il valore in una variabile locale e poi incremento il valore di 2 e sblocco il mutex, così da non avere interferenze durante l'operazione.
Fondamentalmente nella funzione eseguita dal thread vengono eseguite poche funzioni:
inizializzazione di variabili
inizio del ciclo do while
mutex_corrente per l'acquisizione del valore corrente
ciclo for con controllo se il numero corrente è primo
mutex_lista per l'inserimento del valore primo trovato (se c'è
fine ciclo do while
fine thread
Pensate che in questo caso l'utilizzo dei mutex possa soltanto rendere il multithread inutile, visto che i thread sono rallentati dal dover aspettare lo sblocco mutex?
La perdità di efficienza temporale con il multithread è di circa il 5-10%
Purtroppo ho notato che con l'implementazione del multithreading:
1) l'algoritmo funziona più lentamente
2) verso la fine mi vengono scritti alcuni numeri primi replicati.
Ho pensato che il rellantamente dell'algoritmo fosse dovuto all'utilizzo dei mutex, ne utilizzo due per due operazioni differenti:
-Mutex_lista : lo uso quando devo fare l'inserimento di un elemento in coda alla lista + stampa annessa
-Mutex_Corrente: lo uso quando devo acquisire l'elemento corrente da calcolare, acquisisco il valore in una variabile locale e poi incremento il valore di 2 e sblocco il mutex, così da non avere interferenze durante l'operazione.
Fondamentalmente nella funzione eseguita dal thread vengono eseguite poche funzioni:
inizializzazione di variabili
inizio del ciclo do while
mutex_corrente per l'acquisizione del valore corrente
ciclo for con controllo se il numero corrente è primo
mutex_lista per l'inserimento del valore primo trovato (se c'è
fine ciclo do while
fine thread
Pensate che in questo caso l'utilizzo dei mutex possa soltanto rendere il multithread inutile, visto che i thread sono rallentati dal dover aspettare lo sblocco mutex?
La perdità di efficienza temporale con il multithread è di circa il 5-10%
aaa