números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...generar números...
TRANSCRIPT
![Page 1: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/1.jpg)
Números aleatorios
Clase 10
![Page 2: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/2.jpg)
Generar números aleatorios en paralelo
"anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin"
John von Neumann
John von Neumann (registrado al nacer como Neumann János Lajos; Budapest, Imperio austrohúngaro, 28 de diciembre de 1903-Washington, D. C., Estados Unidos, 8 de febrero de 1957) fue un matemático húngaro-estadounidense que realizó contribuciones fundamentales en física cuántica, análisis funcional, teoría de conjuntos, teoría de juegos, ciencias de la computación, economía, análisis numérico, cibernética, hidrodinámica, estadística y muchos otros campos.Es considerado como uno de los más importantes matemáticos de la historia moderna.
![Page 3: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/3.jpg)
![Page 4: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/4.jpg)
Generar números (pseudo)aleatorios en paralelo
Muchos algoritmos que usan números aleatorios son muy paralelizables
El problema es que usualmente necesitamos muchísimos, y garantizar que estos satisfagan ciertas condiciones (batería de tests)
![Page 5: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/5.jpg)
Aplicaciones
● Métodos de Monte Carlo:
– Se basan en el “sampleo aleatorio” para obtener resultados numéricos estadísticos, cuando otros métodos se vuelven muy muy difíciles de usar.
– Ciencias Naturales: Cálculo de propiedades de sistemas interactuantes con muchos grados de libertad (Física, Química, Biología, etc, etc)
– Matemática: optimización, integración multidimensional, sampleo de distribuciones de probabilidad complicadas, finanzas, inteligencia artificial, un montón de etc.
● Ecuaciones diferenciales estocásticas:
– Ciencias Naturales: Sistemas con ruido, tipicamente térmico, movimiento browniano de párticulas mesoscópicas, ruido en circuitos, etc.
– Matemática: Ecuaciones diferenciales estocásticas, etc.
● Etc estocástico.
Todos necesitan generar una gran cantidad de numeros aleatorios
![Page 6: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/6.jpg)
Monte Carlo
● Direct Monte Carlo:
– Modelado con numeros aleatorios
– Muy simple de implementar ● Monte Carlo integration
– Cálculo de integrales con números random
– En particular, integrales multidimensionales● Metropolis Monte Carlo
– Se genera una cadena de Markov que converge a números sampleados con una distribución deseada (ejemplo: Boltzmann)
![Page 7: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/7.jpg)
Integración con Monte Carlo
https://en.wikipedia.org/wiki/Monte_Carlo_integration
![Page 8: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/8.jpg)
Integración con Monte Carlo
https://en.wikipedia.org/wiki/Monte_Carlo_integration
Este resultado NO depende del número de dimensiones de la integral.
Esa es la gran ventaja de la integración de Monte Carlo contra casi todos los métodos deterministas que dependen exponencialmente con la dimension.
Tiende a 0 si Var(f) acotada...
![Page 9: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/9.jpg)
Calcular Pi ...
![Page 10: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/10.jpg)
Calcular Pi ...
2017 | Alumnos de ICNPG 2017 | cluster de GPUs/CAB | ya veremos...
![Page 11: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/11.jpg)
![Page 12: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/12.jpg)
Calculando
usando números aleatorios?
![Page 13: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/13.jpg)
Calculando Pi usando números aleatorios
4 Azules/(Negros + Azules) → ?
![Page 14: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/14.jpg)
Calculando usando números aleatorios
4 Azules/(Negros + Azules) →
while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi = 4*Azules/Totales
0
1
1
Versión Serial
¿ Versión Paralela ?¿ Porque conviene ?¿ Que cuidados hay que tener ?
¿ Que cuidados hay que tener con los RNs ?
![Page 15: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/15.jpg)
cuda
![Page 16: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/16.jpg)
Calculando Pi usando números aleatorios
¿Versión Paralela? → M tiradores tiran N dardos¿Porque conviene? → Debería ser como si un solo tirador tirara NxM ¿Que cuidados hay que tener?
![Page 17: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/17.jpg)
Calculando Pi usando números aleatorios
Semilla0while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla1while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla2while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla3while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla4while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla5while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Reducción: Pi = (Pi[0] + Pi[1] + Pi[2] + Pi[3] + Pi[4] + Pi[5])/6
Semilla0, Semilla1, Semilla2, Semilla3, Semilla4, Semilla5
Transformación
Reducción
![Page 18: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/18.jpg)
Calculando Pi usando números aleatorios Semilla0, Semilla1, Semilla2, Semilla3, Semilla4, Semilla5
Transformación
Si N (dardos) y M (tiradores) son N>>1 y M>>1
● Como elegimos las M semillas?● Como se que cada tirador tira una buena secuencia? (tiros uniformes y descorrelacionados)● Como se que la secuencia de cada tirador esta descorrelacionada con los demas?
Semilla0while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla1while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla2while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla3while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla4while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla5while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
![Page 19: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/19.jpg)
Cual elegimos?
![Page 20: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/20.jpg)
Cual elegimos?
![Page 21: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/21.jpg)
Simulando una cuerda elástica
![Page 22: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/22.jpg)
Desorden
L
M
U
X
Interpolación lineal entre números random:
![Page 23: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/23.jpg)
El problema con el Desorden
L
M
U
X
● Necesitamos simular muestras L x M, con: L>2^16 = 65536 y M ~ L^{5/4}~2^20.
● Si guardaramos el desorden en una matriz de L x M > 2^{16+20} floats = 256 Gb (!!).
[koltona@compute-0-5 deviceQuery]$ ./deviceQuery
Device 0: "GeForce GTX TITAN Black" CUDA Driver Version / Runtime Version 7.5 / 6.5 CUDA Capability Major/Minor version number: 3.5 Total amount of global memory: 6143 MBytes (6441730048 bytes) (15) Multiprocessors, (192) CUDA Cores/MP: 2880 CUDA Cores
● Guardar (todo) el desorden precalculado no es una opción...● Otras variantes son muy complicadas...● La mas simple → Generar dinámicamente usando un RNG paralelo.
![Page 24: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/24.jpg)
Desorden generado “dinámicamente”
L
M
U
X
Interpolación lineal entre números random:
![Page 25: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/25.jpg)
¿Y si la cuerda retrocede?
L
M
U
X
Interpolación lineal entre números random:
![Page 26: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/26.jpg)
Problema
● Generador de números aleatorio de buena calidad ...
● Que me permita recuperar números que ya genero, rapidamente …
● Generador serial y paralelo ...
![Page 27: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/27.jpg)
Problema
● Generador de números aleatorio de buena calidad ...
● Que me permita recuperar números que ya genero, rapidamente …
● Generador serial y paralelo … interface portable.
![Page 28: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/28.jpg)
Cual elegimos?
DIFICIL
Cou
nte
r-ba
sed
RN
Gs
Regeneración sencilla de números ya generados?
![Page 29: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/29.jpg)
Counter-based RNGs
http://www.thesalmons.org/john/random123/releases/1.06/docs/[koltona@gpgpu-fisica examples]$ ls /share/apps/codigos/Random123-1.07/examples/
● The Random123 library is a collection of counter-based random number generators (CBRNGs) for CPUs (C and C++) and GPUs (CUDA and OpenCL), as described in Parallel Random Numbers: As Easy as 1, 2, 3, Salmon, Moraes, Dror & Shaw, SC11, Seattle, Washington, USA, 2011, ACM
● They are intended for use in statistical applications and Monte Carlo simulation and have passed all of the rigorous SmallCrush, Crush and BigCrush tests in the extensive TestU01 suiteof statistical tests for random number generators.
● They are not suitable for use in cryptography or security even though they are constructed using principles drawn from cryptography.
![Page 30: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/30.jpg)
Parallel Random Numbers: As Easy as 1, 2, 3
John K. Salmon, Mark A. Moraes, Ron O. Dror, David E. Shaw
“.. We demonstrate that independent, keyed transformations of counters produce a large alternative class of PRNGs with excellent statistical properties... are ideally suited to modern multicore CPUs, GPUs, clusters, and special-purpose hardware because they vectorize and parallelize well, and require little or no memory for state. ... All our PRNGs pass rigorous statistical tests and produce at least 2^64 unique parallel streams of random numbers, each with period 2^128 or more. In addition to essentially unlimited parallel scalability, our PRNGs offer excellent single-chip performance: Philox is faster than the CURAND library on a single NVIDIA GPU.
Counter-based RNGs
http://www.thesalmons.org/john/random123/releases/1.06/docs/[koltona@gpgpu-fisica examples]$ ls /share/apps/codigos/Random123-1.07/examples/
![Page 31: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/31.jpg)
Parallel Random Numbers: As Easy as 1, 2, 3
“.. We demonstrate that... 2^64 unique parallel streams of random numbers, each with period 2^128 or more...”.
Counter-based RNGs
2
1
2^64
….
1
2 3 4 2^128
…............…. …............…. …............…. …............….
“Thread ID”
“iteración”
![Page 32: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/32.jpg)
Overview Random123● Unlike conventional RNGs, counter-based RNGs are stateless functions (or
function classes i.e. functors) whose arguments are a counter, and a key and whose return value is the same type as the counter.
– value = CBRNGname(counter, key)
● The returned value is a deterministic function of the key and counter.
● The result is highly sensitive to small changes in the inputs.
● CBRNGs are as fast as, or faster than conventional RNGs, much easier to parallelize, use minimal memory/cache resources, and require very little code.
● The CBRNGs in the Random123 library work with counters and keys consisting of of N words, where words have a width of W bits, encapsulated in r123arrayNxW structs, or equivalently, for C++, in the ArrayNxW typedefs in the r123 namespace.
![Page 33: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/33.jpg)
Calculando Pi usando números aleatorios
Semilla0while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla1while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla2while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla3while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla4while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Semilla5while(Totales < N){ x, y números random en [0,1] Azules += ((x*x + y*y) < 1) Totales ++;}Pi[0] = 4*Azules/Totales
Reducción: Pi = (Pi[0] + Pi[1] + Pi[2] + Pi[3] + Pi[4] + Pi[5])/6
Semilla0, Semilla1, Semilla2, Semilla3, Semilla4, Semilla5
Transformación
Reducción
numero random = CBRNGname(Totales, tid)
![Page 34: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/34.jpg)
Calculando Pi usando números aleatorios
![Page 35: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/35.jpg)
CORES DRAM
Calculando Pi usando números aleatorios
CORES DRAM
CORES DRAM
+
transform reduce
Transform_reduce + implicit sequence
semillas
Estimaciones de pi
semillas
Estimaciones de Pi
N
N N
k
k+1
k
k+1HRAM
1
HRAM
1
Adaptado de sumade cuadrados de
![Page 36: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/36.jpg)
Hands-on
"Hands-on" refers to human interaction, often with technology. It implies active participation in a direct and
practical way.
● $ cp -a /share/apps/codigos/alumnos_icnpg2017/clase_10 .● $ cd clase_10/Simple_Pi● $ ls● $ make ● $ ls
¿ Que compila el make ?
![Page 37: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/37.jpg)
Thrust transform_reduce → Pistruct estimate_pi{...}using namespace thrust;int main(void){//uso 30K tiradores independientes, y cada uno tira 10K dardos int M = 30000;
float estimate; estimate = transform_reduce(
counting_iterator<int>(0), counting_iterator<int>(M), estimate_pi(), 0.0f, thrust::plus<float>() );
estimate /= M; // 300K dardos tirados...(comparar tiempos con CPU)
std::cout << "pi es aproximadamente " << estimate << std::endl;
return 0;}
Una secuencia (implícita) de semillas 0,1,2,..., M-1
Que se genera con cada semilla
Valor incial y operación de reducción
Pi.cu
![Page 38: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/38.jpg)
Functor de Thruststruct estimate_pi{ __device__ float operator()(unsigned int thread_id){
RNG philox; RNG::ctr_type c={{}}; RNG::key_type k={{}}; RNG::ctr_type r;
k[0]=thread_id;
float sum = 0; unsigned int N = 10000; // muestras por thread
for(unsigned int i = 0; i < N; ++i){ c[0]=i; r = philox(c, k);
float x=(u01_closed_closed_32_53(r[0])); float y=(u01_closed_closed_32_53(r[1]));
float dist = sqrtf(x*x + y*y); // distancia al origen
if(dist <= 1.0f) sum += 1.0f; } sum *= 4.0f; return sum / N; }};
Una “key” distintaPara cada tirador
Un “counter” distintoPara cada dardo del tirador
Tira el dardo
Estimación de Pi del tirador
Pi.cu
![Page 39: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/39.jpg)
Hands-on
"Hands-on" refers to human interaction, often with technology. It implies active participation in a direct and
practical way.
● $ cp -a /share/apps/codigos/alumnos_icnpg2017/clase_10 .● $ cd clase_10/Simple_Pi● $ ls● $ make ● $ ls● $ qsub submit_cpuNslots.sh ● $ qsub submit_gpu.sh ● Lea los outputs, relance con otros parámetros, etc...
Notar:➔ El generador paralelo philox funciona serial o con OMP (en su laptop!) y en CUDA → portabilidad➔ Librería de solo headers... esfuerzo de instalacion ~ 0➔ El generador tiene suficientes grados de libertad (semilla global, de thread, de counter)➔ El generador da en general mas de un número random por llamada...
![Page 40: Números aleatoriosfisica.cab.cnea.gov.ar/gpgpu/images/2017/clase...Generar números (pseudo)aleatorios en paralelo Muchos algoritmos que usan números aleatorios son muy paralelizables](https://reader030.vdocuments.net/reader030/viewer/2022040918/5e941da80cd89a7ad015ed7d/html5/thumbnails/40.jpg)
¿ Converge a Pi ?