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:
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?
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- –
Nie sądzę, że wykonujemy arbitralne obliczenia dokładności. – tskuzzy
@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