Estoy empezando a aprender CUDA y creo que el cálculo de dígitos largos de pi sería un buen proyecto introductorio.Algoritmo rápido para calcular Pi en paralelo
Ya he implementado el método simple de Monte Carlo, que es fácil de paralelizar. Simplemente hago que cada hilo genere aleatoriamente puntos en el cuadrado unitario, calcule cuántos se encuentran dentro del círculo unitario y recuente los resultados usando una operación de reducción.
Pero eso ciertamente no es el algoritmo más rápido para calcular la constante. Antes, cuando hacía este ejercicio en una única CPU con hebras, utilicé Machin-like formulae para hacer el cálculo de una convergencia mucho más rápida. Para los interesados, esto implica expresar pi como la suma de arctangents y usar series de Taylor para evaluar la expresión.
Un ejemplo de tal fórmula:
Desafortunadamente, he encontrado que la paralelización de esta técnica para miles de hilos GPU no es fácil. El problema es que la mayoría de las operaciones simplemente realizan cálculos matemáticos de alta precisión en lugar de realizar operaciones de punto flotante en vectores largos de datos.
Así que me pregunto, ¿cuál es la forma más eficiente de calcular arbitrariamente dígitos largos de pi en una GPU?
¿Ha mirado esto: https://sites.google.com/a/nirmauni.ac.in/cudacodes/ongoing-projects/automatic-conversion-of-source-code-for-c-to -cuda-c/converted-programs/calculate-value-of-pi –
No creo que se hagan cálculos de precisión arbitrarios. – tskuzzy
@JamesBlack: el código al que se ha vinculado es totalmente absurdo.Parece ser una traducción automática increíblemente ingenua de una pieza serial de código C en una pieza serial de código GPU donde muchos hilos calculan los primeros 1000 elementos idénticos de la expansión de la serie. Literalmente, el 99.99% de la computación realizada por el código es redundante. – talonmies