Numero ottimale di processi paralleli

3

Ho appena finito di scrivere un ray trac (di base) in C # per divertimento e per l'esperienza di apprendimento. Ora voglio approfondire questa esperienza di apprendimento. Mi sembra che il ray tracing sia un candidato ideale per l'elaborazione parallela, il che è qualcosa su cui ho poca esperienza. La mia domanda è questa: come faccio a sapere il numero ottimale di processi concorrenti da eseguire?

Il mio primo istinto mi dice: dipende da quanti core ha il mio processore, ma come ho detto sono nuovo per questo e potrei trascurare qualcosa.

    
posta System Down 11.04.2012 - 18:00
fonte

2 risposte

4

Il framework .NET ha un'impostazione integrata che ottimizza il numero di thread simultanei se si utilizza ThreadPool direttamente o più conveniente API della libreria parallela dell'attività . Credo che sia qualcosa come 20 per nucleo logico (ma non lo vedo più nella documentazione). Se si desidera controllare direttamente i thread, è comunque possibile chiamare il GetMaxThreads di ThreadPool . a> funzione per vedere cosa consiglia il framework. Per una demo davvero accurata di sfruttare le funzionalità di C #, controlla questo raytracer implementato usando LINQ

    
risposta data 11.04.2012 - 18:17
fonte
2

Il massimo miglioramento che si può ottenere è descritto da legge di Amdahl . Quanto può diventare parallelizzabile la tua applicazione è una combinazione del compito e degli algoritmi utilizzati. Per determinare il numero ottimale di core del processore è necessario misurare le prestazioni e probabilmente la simulazione.

    
risposta data 11.04.2012 - 18:32
fonte

Leggi altre domande sui tag