Szybki algorytm do obliczania Pi równolegle

Zaczynam uczyć się CUDA i myślę, że obliczanie długich cyfr pi byłoby miłym, wprowadzającym projektem.

Zaimplementowałem już prostą metodę Monte Carlo, która jest łatwo równoległa. Po prostu każdy wątek losowo generuje punkty na kwadracie jednostkowym, oblicz, ile leży w okręgu jednostkowym, i zlicz wyniki w operacji redukcji.

Ale z pewnością nie jest to najszybszy algorytm obliczania stałej. Wcześniej, kiedy robiłem to ćwiczenie na jednostopniowym CPU, użyłemFormuły podobne do machin wykonać obliczenia dla znacznie szybszej konwergencji. Dla zainteresowanych wymaga to wyrażenia pi jako sumy arktangentów i użycia szeregu Taylora do oceny wyrażenia.

Przykład takiej formuły:

Niestety, odkryłem, że paralelizacja tej techniki z tysiącami wątków GPU nie jest łatwa. Problem polega na tym, że większość operacji wykonuje po prostu wysoką precyzję matematyczną, w przeciwieństwie do wykonywania operacji zmiennoprzecinkowych na długich wektorach danych.

Zastanawiam się,jaki jest najbardziej wydajny sposób obliczania dowolnie długich cyfr pi na GPU?

questionAnswers(1)

yourAnswerToTheQuestion