Schneller Algorithmus zur parallelen Berechnung von Pi

Ich fange an, CUDA zu lernen, und ich denke, das Berechnen langer Stellen von pi wäre ein schönes Einführungsprojekt.

Ich habe bereits die einfache Monte-Carlo-Methode implementiert, die leicht parallelisierbar ist. Ich lasse einfach jeden Thread zufällig Punkte auf dem Einheitsquadrat generieren, finde heraus, wie viele innerhalb des Einheitskreises liegen, und zähle die Ergebnisse mithilfe einer Reduktionsoperation auf.

Das ist aber sicher nicht der schnellste Algorithmus zur Berechnung der Konstanten. Früher, als ich diese Übung auf einer Single-Threaded-CPU durchgeführt habe, habe ich verwendetMachin-ähnliche Formeln die Berechnung für eine weitaus schnellere Konvergenz zu tun. Für die Interessenten bedeutet dies, pi als die Summe der Arkustangens auszudrücken und Taylor-Reihen zu verwenden, um den Ausdruck zu bewerten.

Ein Beispiel für eine solche Formel:

Leider stellte ich fest, dass die Parallelisierung dieser Technik auf Tausende von GPU-Threads nicht einfach ist. Das Problem ist, dass die Mehrheit der Operationen einfach hochpräzise Mathematik ausführt, im Gegensatz zu Gleitkommaoperationen mit langen Datenvektoren.

Also frage ich mich,Was ist der effizienteste Weg, um auf einer GPU beliebig lange pi-Stellen zu berechnen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage