2012-06-05 14 views
17

Zaczynam się uczyć CUDA i myślę, że obliczanie długich cyfr pi byłoby miłym, wstępnym projektem.Szybki algorytm obliczania Pi równolegle

Zaimplementowałem już prostą metodę Monte Carlo, która jest łatwa do zrównoleglenia. Po prostu każę nić losowo generować punkty na kwadracie jednostki, dowiedzieć się, ile znajduje się w kółku jednostki, i porównać wyniki za pomocą operacji redukcji.

Ale to z pewnością nie jest najszybszy algorytm do obliczania stałej. Wcześniej, kiedy robiłem to ćwiczenie na pojedynczym procesorze z gwintem, użyłem Machin-like formulae, aby wykonać obliczenia dla znacznie szybszej konwergencji. Dla zainteresowanych, obejmuje to wyrażanie pi jako sumę arcus tangensów i wykorzystanie serii Taylora do oceny ekspresji.

Przykładem takiego wzoru:

enter image description here

Niestety, okazało się, że parallelizing tę technikę do tysięcy wątków GPU nie jest łatwe. Problem polega na tym, że większość operacji polega po prostu na wykonywaniu precyzyjnych obliczeń matematycznych, a nie wykonywaniu operacji zmiennoprzecinkowych na długich wektorach danych.

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

+0

Pan spojrzał na to: https://sites.google.com/a/nirmauni.ac.in/cudacodes/ongoing-projects/automatic-conversion-of-source-code-for-c-to -cuda-c/skonwertowane-programy/wartość-obliczeń-z- –

+0

Nie sądzę, że wykonujemy arbitralne obliczenia dokładności. – tskuzzy

+2

@JamesBlack: kod, do którego jesteś podłączony, jest kompletnym nonsensem.Wydaje się to być niewiarygodnie naiwnym automatycznym tłumaczeniem seryjnego fragmentu kodu C na seryjny fragment kodu GPU, w którym wiele wątków obliczy identyczne pierwsze 1000 elementów rozszerzenia serii. Dosłownie 99,99% obliczeń wykonanych przez kod jest zbędne. – talonmies

Odpowiedz

12

Należy użyć Bailey–Borwein–Plouffe formula

Dlaczego? Przede wszystkim potrzebujesz algorytmu, który można zepsuć. Tak więc pierwszą rzeczą, jaka przyszła mi do głowy, jest przedstawienie pi jako nieskończonej sumy. Następnie każdy procesor po prostu oblicza jeden termin, a na końcu sumuje je wszystkie.

Następnie zaleca się, aby każdy procesor manipulował wartościami o małej dokładności, w przeciwieństwie do bardzo precyzyjnych. Na przykład, jeśli chcesz mieć miliard dziesiętnych, a używasz niektórych wyrażeń używanych jako here, takich jak Chudnovsky algorithm, każdy z procesorów będzie musiał manipulować liczbą o wartości miliarda. To po prostu nie jest odpowiednia metoda dla GPU.

Podsumowując, formuła BBP pozwoli na obliczenie cyfr pi oddzielnie (algorytm jest bardzo fajny) i procesorów "niskiej precyzji"! Przeczytaj „BBP-cyfrowy algorytm ekstrakcji dla Õ”

Zalety algorytmu BBP do obliczania gatunku Ten algorytm oblicza gatunku bez konieczności niestandardowe typy danych o tysiące lub nawet miliony cyfr. Metoda oblicza n-tą cyfrę bez obliczania pierwszych n-1 cyfr i może użyć małych, wydajnych typów danych. Algorytm jest najszybszym sposobem obliczenia n-tej cyfry (lub kilku cyfr w sąsiedztwie n-tego), ale algorytmy obliczania π używające dużych typów danych zachowują się szybciej, gdy celem jest obliczenie wszystkich cyfr od 1 do n.

+1

Rozumiem więc ideę, że obliczasz wszystkie cyfry, których potrzebujesz (zawstydzając) równolegle. Ale to nie gwarantuje, że ten algorytm jest * wydajny *; każdy procesor/GPU może przetwarzać informacje, które inni mogą udostępniać. Może ten algorytm jest skuteczny i po prostu nie powiedziałeś nam, jak. Ale jeśli nie, nie będziesz chciał zrównoleglić nieefektywnego algorytmu tylko dlatego, że możesz. (Być może bardziej użyteczną miarą byłyby cyfry/tranzystory lub cyfry/watt). –

+1

Cóż, to "przyzwoity" algorytm. Nie jest najlepszy (zapisy są w posiadaniu innych algorytmów), ale wciąż jest przyzwoity. I pamiętajmy także, że OP nie chce pobić rekordów, ale "Zaczynam się uczyć CUDA i myślę, że wyliczenie długich cyfr pi byłoby miłym, wstępnym projektem." – Fezvez

+0

To jest dobry program do wypróbowania. (Widziałem ludzi próbujących tworzyć równoległe programy w Pythonie, co jest tłumaczem, Eh co?) –

Powiązane problemy