Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Correo: carlos-alvarado@outlook.com
Materia: Principios y Tcnicas de Investigacin
Unidad 3 Actividad 1
Elabora un prototipo de proyecto investigacin que contenga los siguientes
elementos:
Tema
Delimitacin
Justificacin
Objetivos
Hiptesis
Esquema preliminar
Marco terico
1
(! _ + ) _
1
= 200
(10!! 1 + 0) 5
Cmo paralelizamos?
Hay dos formas de paralelizar en computacin, la forma ms obvia y sencilla, es
hacer que un procesador ejecute una tarea de un programa, mientras otro
procesador, ejecuta otra tarea de otro programa, es decir, multitarea real, fuera ya
de la ingeniera que permita tener todo un sistema operativo con un solo
procesador al ejecutar fracciones de cdigo confiado a su velocidad de reloj.
La otra forma es haciendo programacin paralela, es decir, hacer efectivo que el
algoritmo de un solo programa se ejecute en paralelo por varios procesadores a la
vez, esto indudablemente es la paralelizacin real en computacin, pero
implementar realmente un algoritmo paralelo es ms difcil de lo que pareca.
La clasificacin de las arquitecturas paralelas (Ibarra, 1995)
En 1966, Flynn establece una clasificacin de los computadores paralelos en
funcin del nmero de flujos de instrucciones y datos. Su clasificacin, ahora
convertida en un clsico, distingue cuatro tipos de arquitecturas: SISD, SIMD,
MISD, MIMD.
La arquitectura SISD (Single Instruction, Single Data) posee un nico flujo de
instrucciones que procesa un nico flujo de datos, se corresponde con la
arquitectura de Von Neumann:
La arquitectura MISD (Multiple Instruction, Single Data) en ella, cada vez que un
dato es extrado de la memoria se le procesa mltiples veces. Se corresponde con
las arquitecturas sistlicas o segmentadas:
Paralelismo de control
La explotacin del paralelismo de control proviene de la constatacin natural de
que en una aplicacin existen acciones que podemos hacer al mismo tiempo.
Las acciones, llamadas tambin tareas o procesos pueden ejecutarse de manera
ms o menos independiente sobre unos recursos de clculo llamados tambin
procesadores elementales.
Como las acciones efectuadas en paralelo sobre los son idnticas, es posible
centralizar el control. Siendo los datos similares, la accin a repetir tomar el
mismo tiempo sobre todos los y el controlador podr enviar, de manera
sncrona, la accin a ejecutar a todos los .
Las limitaciones de este tipo de paralelismo vienen dadas por la necesidad de
dividir los datos vectoriales para adecuarlos al tamao soportado por la mquina,
la existencia de datos escalares que limitan el rendimiento y la existencia de
operaciones de difusin (un escalar se reproduce varias veces convirtindose en
un vector) y que no son puramente paralelas.
Paralelismo de flujo
La explotacin del paralelismo de flujo proviene de la constatacin natural de que
ciertas aplicaciones funcionan en modo cadena: disponemos de un flujo de datos,
generalmente semejantes, sobre los que debemos efectuar una sucesin de
operaciones en cascada.
Los recursos de clculo se asocian a las acciones y en cadena, de manera que los
resultados de las acciones efectuadas en el instante pasen en el instante + 1 al
siguiente. Este modo de funcionamiento se llama tambin segmentacin o
pipeline.
Los procesadores tienen una memoria local para sus propios clculos pero toda la
comunicacin entre ellos se efecta a travs de la memoria compartida. Todos los
procesadores ejecutan el mismo programa, pero cada procesador conoce su
propio ndice, llamado identificador de proceso (PID, Process ID) y conoce el
tamao de la entrada, que normalmente se designa con aunque a veces con un
par (, ) o algn otro conjunto fijo y pequeo de parmetros. El programa podra
ordenar a los procesadores hacer diferentes cosas dependiendo de sus . El
procesador usa su para calcular el ndice de la celda de memoria de la que
debe de leer o en la que debe escribir.
Los procesadores PRAM estn sincronizados; es decir, todos inician cada paso al
mismo tiempo, todos leen al mismo tiempo y todos escriben al mismo tiempo,
dentro de cada paso. Algunos procesadores tal vez no lean o escriban en algn
paso. Cada paso de tiempo tiene dos fases: la fase de lectura, en la que el
procesador puede leer de una celda de memoria y la fase de escritura en la que
podra escribir en una celda de memoria. Cada fase podra incluir algn clculo
(1) empleando variables locales antes y despus de su lectura o escritura. El
tiempo que se concede para dichos clculos es el mismo para todos los
procesadores y todos los pasos, de modo que las lecturas y escrituras se
mantengan sincronizadas. El modelo permite a los procesadores efectuar clculos
largos en un paso, porque, en los algoritmos paralelos, cabe esperar que la
comunicacin entre procesadores a travs de la memoria compartida tome mucho
ms tiempo que las operaciones locales dentro de un procesador.
! !!!
!
procesadores.
La estrategia consiste en comparar todos los pares de claves en paralelo y luego
comunicar los resultados a travs de la memoria compartida. Utilizaremos un
arreglo llamado perdedor. Recordemos que ste puede ocupar las celdas de
memoria n , , [2 1] ;, o algn otro segmento de la memoria global
escogido por el compilador. En un principio, todos los elementos de este arreglo
son cero (o se pueden inicializar con cero en un paso). Si ! pierde en una
comparacin, se asignar el valor 1 a perdedor[i].
Entradas: Las claves 0 , 1 , , [ 1] inicialmente en las celdas de memoria
0 , 1 , , 1 ; y el entero > 2.
Salidas: La clave ms grande estar en [0].
Los procesadores se denominan !,! para 0 1 . Cada procesador
calcular y a partir de su ndice con las frmulas = [
!"#
] y =
maxRapido(M, n)
1.- Calcular i y j a partir de pid;
if (i j) return;
P!,! lee ! (de M[i]);
2.- P!,! lee ! (de M[j]);
P!,! compara ! y ! ;
Sea
el
ndice
de
la
clave
ms
pequea
(i
si
hay
empate).
P!,! escribe 1 en perdedor[k].
// En este punto, todas las claves salvo la ms grande
// han perdido en una comparacin.
3.- P!,!!! lee perdedor[i] (y P!,!!! lee perdedor[n-1]).
El procesador que ley un 0 escribe ! en M[0]. ( P!,!!!
escribira x!!! .)
// Este procesador ya tiene en su memoria local el x que
// necesita, por los pasos 1 y 2.
!
!
!,! = ! + ( ) ( + ! )
!,! =
1
=
=
!,! + () ( + ) ( ! ) + ( 1 )()(1 + ! )
!
!
( )
!,!
( ! ) + ()( )(1 + ! )
!" ! + ( ) ( + ! )
( )
=
=
=
!
)
!
1 ! + !
!
!!
!
se
Ley de Gustafson
La ley de Gustafson (1988) viene a compensar el pesimismo dejado por la ley de
Amdahl. sta se refera a problemas con volumen de clculo fijo en que se
aumenta el nmero de procesadores. Sin embargo, en la prctica, el volumen del
problema no es independiente del nmero de procesadores, ya que con mayor
nmero de procesadores se pueden abordar problemas de mayores dimensiones.
Por ello, la ley de Gustafson se refiere al crecimiento del volumen de clculo
necesario para resolver un problema. En la mayora de los casos, cuando el
volumen del problema crece, lo hace slo en su parte paralela, no en su parte
secuencial. Ello hace que el cuello de botella secuencial tienda a cero cuando el
volumen del problema aumenta.
La razn de que cierto tipo de problemas adquieran gran volumen de clculo es la
disminucin del tamao de la malla de clculo o tambin el aumento la extensin
espacio-temporal del problema. Esto hace que el nmero de puntos aumente de
forma cbica respecto al grado de disminucin en la malla, si el problema es
tridimensional.
Hay muchos problemas en que, adems de las tres dimensiones del espacio,
tambin interviene el tiempo, por lo que el aumento del volumen de clculo es
todava mayor. Evidentemente, esto afecta, en general, a la parte paralelizable del
problema y no a su parte secuencial, o al menos no en la misma medida. Si
suponemos que el nmero de procesadores crece indefinidamente de la misma
forma que las dimensiones del problema tendremos que:
=0
!! + ( )
lim = lim
!!
(1) + ( )
=
()
+
Podra pensarse que hay una aparente contradiccin entre las leyes de Amdahl y
Gustafson. Esto no es as debido a que las premisas de ambas leyes son distintas:
la ley de Amdahl se refiere a procesos con un volumen de calculo fijo mientras que
la ley de Gustafson se refiere a problemas cuyo volumen de clculo puede
aumentar segn el nmero de procesadores (esto se suele denominar escalado
del problema). Afortunadamente, esta ltima situacin es ms cercana a la
realidad.
Comparativas
El software utilizado para comparar el rendimiento en single-core y en multi-core
ha sido Geekbench de Primatelabs que es ampliamente utilizado en el
benchmarking; para la comparativa, se prueba uno de los productos ms
publicitados del segmento de alto nivel: la Mac Pro, en sus diferentes
configuraciones de procesador y de memoria para el modelo de finales del ao
2013.
Multi-Core
Score
24900
Result Information
Upload Date
Views
June 05 2014
12:00 AM
26
System Information
Operating
System
Model
Processor
Processor ID
L1 Instruction
Cache
L1 Data Cache
L2 Cache
L3 Cache
Motherboard
BIOS
Memory
F60DEB81FF30ACF6 MacPro6,1
Apple Inc.
MP61.88Z.0116.B04.1312061508
16384 MB 0 MHz RAM
Integer Performance
Single-core
Multi-core
AES
Single-core
AES
Multi-core
Twofish
Single-core
Twofish
Multi-core
SHA1
Single-core
SHA1
Multi-core
SHA2
Single-core
SHA2
Multi-core
BZip2 Compress
Single-core
BZip2 Compress
Multi-core
BZip2 Decompress
Single-core
BZip2 Decompress
Multi-core
JPEG Compress
Single-core
JPEG Compress
Multi-core
JPEG Decompress
Single-core
JPEG Decompress
Multi-core
PNG Compress
Single-core
PNG Compress
4310
27737
3752
3.21 GB/sec
10036
8.59 GB/sec
4162
233.6 MB/sec
34781
1.91 GB/sec
4700
510.2 MB/sec
29710
3.15 GB/sec
5157
223.2 MB/sec
30075
1.27 GB/sec
3598
14.6 MB/sec
28454
115.7 MB/sec
3719
20.2 MB/sec
30378
164.6 MB/sec
4396
61.3 Mpixels/sec
35025
487.9 Mpixels/sec
5854
144.7 Mpixels/sec
39002
964.1 Mpixels/sec
4043
3.23 Mpixels/sec
35168
Multi-core
PNG Decompress
Single-core
PNG Decompress
Multi-core
Sobel
Single-core
Sobel
Multi-core
Lua
Single-core
Lua
Multi-core
Dijkstra
Single-core
Dijkstra
Multi-core
28.1 Mpixels/sec
4479
51.6 Mpixels/sec
35382
407.9 Mpixels/sec
4767
173.5 Mpixels/sec
34227
1.25 Gpixels/sec
3915
3.52 MB/sec
28476
25.6 MB/sec
4028
14.5 Mpairs/sec
12879
46.2 Mpairs/sec
Floating Point Performance
Single-core
Multi-core
BlackScholes
Single-core
BlackScholes
Multi-core
Mandelbrot
Single-core
Mandelbrot
Multi-core
Sharpen Filter
Single-core
Sharpen Filter
Multi-core
Blur Filter
Single-core
Blur Filter
Multi-core
SGEMM
Single-core
SGEMM
Multi-core
DGEMM
Single-core
DGEMM
4488
32753
5224
23.3 Mnodes/sec
41686
185.5 Mnodes/sec
4001
4.10 Gflops
40170
41.2 Gflops
3694
2.74 Gflops
27998
20.8 Gflops
2936
2.80 Gflops
25844
24.6 Gflops
5036
14.1 Gflops
32318
90.5 Gflops
4960
7.29 Gflops
32586
Multi-core
SFFT
Single-core
SFFT
Multi-core
DFFT
Single-core
DFFT
Multi-core
N-Body
Single-core
N-Body
Multi-core
Ray Trace
Single-core
Ray Trace
Multi-core
47.9 Gflops
4057
4.28 Gflops
25222
26.6 Gflops
4367
3.98 Gflops
28951
26.4 Gflops
6390
2.37 Mpairs/sec
41223
15.3 Mpairs/sec
5173
6.10 Mpixels/sec
36990
43.6 Mpixels/sec
Memory Performance
Single-core
Multi-core
Stream Copy
Single-core
Stream Copy
Multi-core
Stream Scale
Single-core
Stream Scale
Multi-core
Stream Add
Single-core
Stream Add
Multi-core
Stream Triad
Single-core
Stream Triad
Multi-core
3187
3523
3973
15.9 GB/sec
4299
17.2 GB/sec
3015
12.0 GB/sec
3194
12.8 GB/sec
2943
13.3 GB/sec
3283
14.8 GB/sec
2928
12.9 GB/sec
3420
15.0 GB/sec
La segunda serie de pruebas es para una Mac Pro (Late 2013) con 8
procesadores Intel Xeon E5-1680 v2 @ 3.00 GHz y 16 hilos de procesamiento:
Mac Pro (Late 2013)
SingleCore
Score
3635
Multi-Core Score
26097
Result Information
Upload Date
Views
January 28 2014
12:00 AM
15
System Information
Operating
System
Model
Processor
Processor ID
L1 Instruction
Cache
L1 Data Cache
L2 Cache
L3 Cache
Motherboard
BIOS
Memory
Integer Performance
Single-core
Multi-core
AES
Single-core
AES
Multi-core
Twofish
Single-core
Twofish
Multi-core
SHA1
Single-core
SHA1
Multi-core
SHA2
Single-core
SHA2
Multi-core
BZip2 Compress
Single-core
BZip2 Compress
Multi-core
BZip2 Decompress
Single-core
BZip2 Decompress
Multi-core
JPEG Compress
Single-core
JPEG Compress
Multi-core
JPEG Decompress
Single-core
JPEG Decompress
Multi-core
3654
30200
3295
PNG Compress
Single-core
3351
2.68 Mpixels/sec
PNG Compress
Multi-core
34511
27.6 Mpixels/sec
2.82 GB/sec
20555
17.6 GB/sec
3461
194.3 MB/sec
34187
1.87 GB/sec
3907
424.1 MB/sec
28807
3.05 GB/sec
4285
185.4 MB/sec
29311
1.24 GB/sec
2983
12.1 MB/sec
28022
113.9 MB/sec
3101
16.8 MB/sec
29974
162.5 MB/sec
3673
51.2 Mpixels/sec
34620
482.3 Mpixels/sec
5002
123.7 Mpixels/sec
39414
974.3 Mpixels/sec
PNG Decompress
Single-core
3754
43.3 Mpixels/sec
PNG Decompress
Multi-core
35470
408.9 Mpixels/sec
Sobel
Single-core
4169
151.7 Mpixels/sec
Sobel
Multi-core
33753
1.23 Gpixels/sec
Lua
Single-core
3181
Lua
Multi-core
27805
Dijkstra
Single-core
3835
13.8 Mpairs/sec
Dijkstra
Multi-core
22252
79.9 Mpairs/sec
2.86 MB/sec
25.0 MB/sec
3801
32169
4460
19.8 Mnodes/sec
40368
179.6 Mnodes/sec
3271
3.35 Gflops
39421
40.4 Gflops
3120
2.31 Gflops
27728
20.6 Gflops
2481
2.36 Gflops
25462
24.3 Gflops
4607
12.9 Gflops
31765
89.0 Gflops
4194
Single-core
DGEMM
Multi-core
SFFT
Single-core
SFFT
Multi-core
6.16 Gflops
32098
47.2 Gflops
3404
3.59 Gflops
24751
26.1 Gflops
DFFT
Single-core
3647
DFFT
Multi-core
28751
N-Body
Single-core
5340
N-Body
Multi-core
40014
Ray Trace
Single-core
4361
Ray Trace
Multi-core
36390
3.32 Gflops
26.2 Gflops
1.98 Mpairs/sec
14.9 Mpairs/sec
5.14 Mpixels/sec
42.9 Mpixels/sec
Memory Performance
Single-core
3265
Multi-core
5749
Stream Copy
4126
Single-core
16.5 GB/sec
Stream Copy
6949
Multi-core
27.7 GB/sec
Stream Scale
3336
Single-core
13.3 GB/sec
Stream Scale
5474
Multi-core
21.9 GB/sec
Stream Add
2790
Single-core
12.6 GB/sec
Stream Add
5279
Multi-core
23.9 GB/sec
Stream Triad
2960
Single-core
13.0 GB/sec
Stream Triad
Multi-core
5440
23.9 GB/sec
Finalmente, el Mac Pro con 12 procesadores Intel Xeon E5-2697 v2 @ 2.97 GHz y
24 hilos de procesamiento:
Mac Pro (Late 2013)
Single-Core
Score
3533
Multi-Core
Score
35799
Result Information
User
Upload Date
Views
pcb355
January 29 2014
12:00 AM
295
System Information
Operating
System
Model
Processor
Processor ID
L1 Instruction
Cache
L1 Data Cache
L2 Cache
L3 Cache
Motherboard
BIOS
Memory
Single-core
Multi-core
AES
Single-core
AES
Multi-core
Twofish
Single-core
Twofish
Multi-core
SHA1
Single-core
SHA1
Multi-core
SHA2
Single-core
SHA2
Multi-core
BZip2 Compress
Single-core
BZip2 Compress
Multi-core
BZip2 Decompress
Single-core
BZip2 Decompress
Multi-core
JPEG Compress
Single-core
JPEG Compress
Multi-core
JPEG Decompress
Single-core
JPEG Decompress
Multi-core
PNG Compress
Single-core
PNG Compress
Multi-core
PNG Decompress
Single-core
PNG Decompress
3599
40712
3194
2.73 GB/sec
18677
16.0 GB/sec
3443
193.2 MB/sec
49704
2.72 GB/sec
3868
419.9 MB/sec
42137
4.47 GB/sec
4253
184.0 MB/sec
42248
1.79 GB/sec
2934
11.9 MB/sec
40129
163.1 MB/sec
3069
16.6 MB/sec
42822
232.1 MB/sec
3649
50.8 Mpixels/sec
49765
693.3 Mpixels/sec
4968
122.8 Mpixels/sec
53461
1.32 Gpixels/sec
3337
2.66 Mpixels/sec
49386
39.4 Mpixels/sec
3724
42.9 Mpixels/sec
51166
Multi-core
Sobel
Single-core
Sobel
Multi-core
Lua
Single-core
Lua
Multi-core
Dijkstra
Single-core
Dijkstra
Multi-core
589.9 Mpixels/sec
3953
143.9 Mpixels/sec
46495
1.69 Gpixels/sec
3163
2.84 MB/sec
38740
34.8 MB/sec
3713
13.3 Mpairs/sec
24554
88.1 Mpairs/sec
Floating Point Performance
Single-core
Multi-core
BlackScholes
Single-core
BlackScholes
Multi-core
Mandelbrot
Single-core
Mandelbrot
Multi-core
Sharpen Filter
Single-core
Sharpen Filter
Multi-core
Blur Filter
Single-core
Blur Filter
Multi-core
SGEMM
Single-core
SGEMM
Multi-core
DGEMM
Single-core
DGEMM
Multi-core
SFFT
Single-core
SFFT
3767
46193
4498
20.0 Mnodes/sec
59035
262.7 Mnodes/sec
3301
3.38 Gflops
57106
58.5 Gflops
3105
2.30 Gflops
39029
28.9 Gflops
2455
2.34 Gflops
36057
34.4 Gflops
4554
12.8 Gflops
44058
123.4 Gflops
4200
6.17 Gflops
46410
68.2 Gflops
3343
3.53 Gflops
35931
Multi-core
DFFT
Single-core
DFFT
Multi-core
N-Body
Single-core
N-Body
Multi-core
Ray Trace
Single-core
Ray Trace
Multi-core
37.9 Gflops
3555
3.24 Gflops
41520
37.8 Gflops
5274
1.96 Mpairs/sec
58276
21.6 Mpairs/sec
4247
5.01 Mpixels/sec
52458
61.9 Mpixels/sec
Memory Performance
Single-core
Multi-core
Stream Copy
Single-core
Stream Copy
Multi-core
Stream Scale
Single-core
Stream Scale
Multi-core
Stream Add
Single-core
Stream Add
Multi-core
Stream Triad
Single-core
Stream Triad
Multi-core
2936
5188
3486
13.9 GB/sec
6230
24.9 GB/sec
2974
11.9 GB/sec
5052
20.2 GB/sec
2648
12.0 GB/sec
4710
21.3 GB/sec
2708
11.9 GB/sec
4887
21.5 GB/sec
Single-core
Multi-core
4156
24900
3635
26097
3533
35799
6 procesadores
Mac Pro (Late 2013)
8 procesadores
Mac Pro (Late 2013)
12 procesadores
Rendimiento Single-core
Mac Pro (Late 2013) 12
procesadores
Single-core
3400
3600
3800
4000
4200
4400
Rendimiento Multi-core
Mac Pro (Late 2013) 12
procesadores
Multi-core
10000
20000
30000
40000
Conclusiones
sta serie de pruebas demuestra que aquel usuario que realice tareas
secuenciales primordialmente, no se vera beneficiado al adquirir la configuracin
ms cara y con ms procesadores, por ms que el marketing de Apple quiera
hacer creer lo contrario; adems las mayores velocidades de reloj se obtienen con
menos procesadores y esto es obvio, dada la complejidad de los chips con ms
procesadores y la dificultad para disipar el calor.
Ahora el rendimiento en multi-core, que como ya vimos, es realmente
aprovechado para tener varios procesos en paralelo, o bien con programas
realizados con algoritmos paralelos, es decir, depende de un enfoque que requiera
paralelizacin para sacarle provecho; otra conclusin es que el rendimiento multicore sube bastante ms que la bajada de rendimiento en el sigle-core, lo que deja
una muy buena ventana de oportunidad para desarrollar cada vez ms y mejores
algoritmos paralelos y aprovechar esta subida de rendimiento de los equipos de
computacin actuales.
Bibliografa
Sara B., Allen Van G. (2002) Algoritmos Computaciones. Introduccin al anlisis y
al diseo. 3ra Ed. Mxico: Pearson Educacin. pp. 229-231, 611-630
Jeffrey J. (2009) Analysis of Algorithms: An Active Learning Approach. Sudbury,
Massachusetts: Jones and Bartlett Publishers. pp. 177-183
Sedgewick R. (1989). Algorithms. Princeton University: Addison-Welsey. pp. 569575
Ibarra F. (1995). Introduccin a las Arquitecturas Paralelas. Alicante Universidad:
Grficas CELARAYN. pp. 17-22
Lpez G. (2009) Anlisis y diseo de algoritmos. 1ra Ed. Buenos Aires: Alfaomega
Grupo Editor Argentino pp. 4-5
Ley de Amdahl, Wikipedia, Recuperado el 29 de septiembre de 2014, de:
http://es.wikipedia.org/wiki/Ley_de_Amdahl
Geekbench browser, Recuperado el 18 de octubre de 2014, de:
http://browser.primatelabs.com/geekbench3/375788
http://browser.primatelabs.com/geekbench3/374968
http://browser.primatelabs.com/geekbench3/605014