Sto iniziando ad apprendere CUDA e penso che il calcolo di lunghe cifre di pi sarebbe un bel progetto introduttivo.Algoritmo veloce per calcolare Pi in parallelo
Ho già implementato il semplice metodo Monte Carlo che è facilmente parallelizzabile. Semplicemente, ogni thread ha generato in modo casuale punti sul quadrato di unità, capire quanti giacciono all'interno del cerchio unitario e calcolare i risultati utilizzando un'operazione di riduzione.
Ma questo non è certamente l'algoritmo più veloce per il calcolo della costante. Prima, quando ho fatto questo esercizio su una singola CPU con thread, ho usato Machin-like formulae per fare il calcolo per una convergenza molto più veloce. Per chi è interessato, ciò implica esprimere pi come la somma degli arcotangenti e usare la serie di Taylor per valutare l'espressione.
Un esempio di una tale formula:
Purtroppo, ho trovato che parallelizzare questa tecnica per migliaia di fili GPU non è facile. Il problema è che la maggior parte delle operazioni sta semplicemente facendo matematica ad alta precisione anziché eseguire operazioni in virgola mobile su lunghi vettori di dati.
Quindi mi chiedo, qual è il modo più efficiente per calcolare cifre arbitrariamente lunghe di pi su una GPU?
Hai visto questo: https://sites.google.com/a/nirmauni.ac.in/cudacodes/ongoing-projects/automatic-conversion-of-source-code-for-c-to -cuda-c/programmi convertiti/calcolo-valore-di-pi –
Non penso che si facciano calcoli di precisione arbitrari. – tskuzzy
@JamesBlack: il codice a cui ti sei collegato è una sciocchezza totale.Sembra essere una traduzione automatica incredibilmente ingenua di un pezzo seriale di codice C in un pezzo seriale di codice GPU in cui molti thread calcolano gli stessi primi 1000 elementi dell'espansione della serie. Letteralmente il 99,99% del calcolo eseguito dal codice è ridondante. – talonmies