Ich fange an, CUDA zu lernen, und ich denke, die Berechnung langer Ziffern von Pi wäre ein schönes, einleitendes Projekt.Schneller Algorithmus Pi parallel zu berechnen
Ich habe bereits die einfache Monte-Carlo-Methode implementiert, die leicht parallelisiert werden kann. Ich lasse jeden Faden zufällig Punkte auf dem Einheitsquadrat erzeugen, finde heraus, wie viele innerhalb des Einheitskreises liegen, und ordne die Ergebnisse mit einer Reduktionsoperation zusammen.
Aber das ist sicherlich nicht der schnellste Algorithmus zur Berechnung der Konstante. Vorher, als ich diese Übung auf einer Single-Thread-CPU gemacht habe, habe ich Machin-like formulae verwendet, um die Berechnung für eine viel schnellere Konvergenz durchzuführen. Für Interessierte bedeutet dies, dass pi als die Summe der arctangences ausgedrückt wird und Taylor-Reihen verwendet werden, um den Ausdruck zu bewerten.
Ein Beispiel für eine solche Formel:
Leider fand ich, dass Tausende von GPU-Threads, um diese Technik zu parallelisieren ist nicht einfach. Das Problem besteht darin, dass die Mehrzahl der Operationen einfach Hochpräzisions-Mathematik durchführt, im Gegensatz zu Gleitkommaoperationen an langen Datenvektoren.
Also frage ich mich, Was ist die effizienteste Möglichkeit, beliebig lange Ziffern von Pi auf einer GPU zu berechnen?
Haben Sie sich das angesehen: https://sites.google.com/a/nirmauni.ac.in/cudacodes/ongoing-projects/automatic-conversion-of-source-code-for-c-to -cuda-c/konvertierte-programme/berechne-wert-von-pi –
Ich glaube nicht, dass man willkürliche Präzisionsberechnungen macht. – tskuzzy
@JamesBlack: der Code, den Sie verknüpft haben, ist völliger Unsinn.Es scheint eine unglaublich naive automatische Übersetzung eines seriellen Teils von C-Code in einen seriellen Teil von GPU-Code zu sein, wo viele Threads die identischen ersten 1000 Elemente der Reihenentwicklung berechnen. Buchstäblich 99,99% der durch den Code durchgeführten Berechnung sind redundant. – talonmies