You are on page 1of 3

1-

Las cantidades totales de threads que se muestran en el print no son iguales


Porque primero muestra un hilo que en el que está ejecutando el programa y es de forma
secuencial.
Por otro lado muestra la cantidad total de hilos del sistema y luego de la sentencia #pragma
omp parallel, entra a una sección en la que se está ejecutando el programa en forma
paralela y están utilizando el total de hilos del sistema
Si movemos la línea 11 por debajo de la línea 9, podemos observar que el programa en su
sección paralela, imprime la cantidad total de hilos del sistema (una vez por cada hilo), es
decir, en cada hilo se ejecuta la sentencia “ printf("Total %d Threads\n", threads); ” que
es la que nos permite saber la cantidad de hilos que se están utilizando en esta sección.

2-
Lo que ocurre al cambiar private por shared es que la variable ID va a ser modificada por
cada hilo en la ejecución paralela, mientras que en private cada hilo hace una copia del ID
que es pasado como parámetro a la zona de ejecución paralela y al modificarlo no afecta a
la variable fuera de este bloque.
El valor de la variable ID al final de la ejecución va a ser en mi caso 3 que es el último hilo
que se encontró

3- En la sección paralela se ejecutan 4 hilos, que es la cantidad máxima de hilos en el


sistema operativo en el que se ejecutaron los códigos.
El thread 0 ejecuta 4 índices y ejecuta los siguientes: índice 0, índice 1, índice 2, índice 3.
El orden de los resultados varía por lo que cada hilo puede terminar antes o después una
ejecución, están ordenados en el orden de finalización de las mismas.

4- En la región paralela se ejecutan dos threads, el thread 0 ejecuta 8 índices

5- Los índices que procesa el thread 0 son : índice 0, índice 4, índice 8, índice 12
6- Secuencial tiempo: 10.419 segundos
Paralelo tiempo: 3.088 segundos
En ambos casos el resultado de la suma es el mismo (3423312640), únicamente varía el
tiempo de ejecución del programa. Por lo que concluimos en que el bloque en paralelo es
mucho más veloz que ejecutarlo secuencialmente.

7-
secuencial paralelo

10000 0.002299 0.001846

100000 0.005089 0.002976

1000000 0.026854 0.022931


8-
secuencial paralelo

TAM=50 0.01403 0.009869

TAM=100 0.0149 0.01354

TAM=200 0.06013 0.03421

g) Los resultados en las matrices de menor tamaño en cuanto a ejecución secuencial y


paralela no tienen mucha diferencia de tiempo, por lo que son menos datos que en los
tamaños superiores. Como podemos observar por ejemplo en las matrices de tamaño = 100
la diferencia es muy poca, ya en el tamaño = 200 podemos decir que la diferencia de tiempo
es más notable, por lo que para volúmenes más grandes de datos es más viable utilizar la
ejecución paralela.

9-

secuencial paralelo (2 paralelo (3 paralelo(4 hilos)


hilos) hilos)

10000 0.151 0.122 0.091 0.062

100000 14.32 12.007 8.696 6.084

400000 267.472 199.31 139.249 117.153

En cuanto a la ejecución con 10000 números primos podemos observar que la ejecución
tiene una pequeña variación ya sea que se ejecute secuencialmente, con dos, tres o cuatro
hilos del sistema, pero de secuencial a ejecutarse con 4 hilos la diferencia es notable.
Con esta demostración queremos hacer saber que es viable la ejecución paralela con
cualquier cantidad de hilos, nos ahorra mucho más tiempo con mayor cantidad de números,
es decir, es mucho más amplia la diferencia de tiempo de ejecución cuando trabajamos con
muchos datos

10-

secuencial paralelo (2 paralelo (3 paralelo (4


hilos) hilos) hilos)

50000 6.851 5.709 3.692 3.023

100000 27.93 22.801 14.734 11.827

250000 174.172 139.445 92.143 72.638

Dado a las limitaciones de la computadora en donde se ejecutaron los códigos no es posible


realizar las pruebas de ordenación con arreglos muy grandes.
Por consiguiente se realizaron pruebas con los tamaños 50000, 100000 y 250000, los
cuales nos dan un panorama en el que podemos observar diferencias notables entre las
ejecuciones con las diferentes cantidades de hilos, por lo que en este punto o ejercicio es
viable realizar la ejecución en paralelo con cualquier cantidad de threads, obviamente en
este caso, mientras más threads más rápida será la ejecución.

11-

secuencial paralelo (2 paralelo (3 paralelo (4


hilos) hilos) hilos)

0.00001 0.003 0.002 0.003 0.002


(uno / cien mil)

0.000001 0.023 0.022 0.022 0.021


(uno / un millón)

0.0000001 0.225 0.212 0.215 0.217


(uno / diez
millones)

Como podemos observar en los resultados la secuencia en paralelo con cualquier cantidad
de threads es similar, es decir, puede ejecutarse este algoritmo tanto de forma secuencial
como de forma paralela ya que la diferencia de los tiempos de ejecución no es amplia, lo
que lo hace viable.

You might also like