Está en la página 1de 3

Universidad del Valle de Guatemala

Facultad de Ingeniería
Departamento de Ciencias de la Computación
CC3086 Programación de microprocesadores Ciclo 2 de
2,023

Laboratorio 04
Instrucciones.
Esta actividad se realizará en parejas. Al finalizar los períodos de laboratorio o clase, deberá dejar
constancia de sus avances en Canvas. Cuidar la limpieza y orden de su código.

1. 10 pts. Modifica el código de pthread_hello1.cpp para calcular la raíz cuadrada del valor de
threadNumber, e imprimirlo desde la subrutina. Recuerda que la función sqrt pertenece a la
librería <math.h>, requiere utilizar parámetros long o double para realizar el cálculo.

2. 20 pts. Descarga, analiza y ejecuta el programa primes1.cpp. Responde:


PREGUNTA RESPUESTA
Describe el funcionamiento del programa El programa pide un número n y mediante el uso
de p_threads los hilos buscan un número impar
entre 0 y 10^n. Al final se imprime un mensaje con
el número de secuencia individual del hilo en que
se encontró un número primo y su ID.
¿Cuántos hilos utiliza para efectuar el cálculo? Utiliza 10^n hilos
¿El pthread_join se encuentra dentro del mismo for No. Como se emplea paralelismo se utiliza un for 1
donde se crean los hilos (con para la creación de pthreads y luego se quiere
pthread_create)?¿Por qué? sincronizar los hilos con un for 2 utilizando
pthread_join. Si se colocaran dentro de un for
habría sincronización en una programación
secuencial
¿Cuál es el valor máximo de exponente que La variable que almacena 10^exponente es de un
permite ingresar? ¿Por qué? tipo long, por lo que el valor no debe exceder 32
bits siendo 10^9, por lo tanto el exponente no debe
de ser mayor a 9.

3. 20 pts. Descarga, analiza y ejecuta el programa primes2.cpp. Responde:


PREGUNTA RESPUESTA
Describe el funcionamiento del programa Se le solicita al usuario un exponente para el
numero 10. Luego calcula los primos que esten
dentro del 0 y este número de potencia.
¿Cuántos hilos utiliza para efectuar el cálculo? El programa utiliza la misma cantidad de hilos
según el exponente ingresado por el usuario. Pues
cada hilo verificara si el numero es un primo o no .
Y se imprimirá su identificador junto con el numero.

Pero al inicio se es definido 4 hilos aunque no se


llega a usar. .
¿El pthread_join se encuentra dentro del mismo for Sí. El join sirve básicamente para hacer esperar a
donde se crean los hilos (con los hilos a que los demas terminen la ejecución. En
pthread_create)?¿Por qué? este caso se espera que los hilos realicen su
trabajo dentro del for. Para que el programa
Universidad del Valle de Guatemala
Facultad de Ingeniería
Departamento de Ciencias de la Computación
CC3086 Programación de microprocesadores Ciclo 2 de
2,023

principal al final de que todos terminen imprima el


valor del tiempo total de ejecución.
¿Cuál es el valor máximo de exponente que El valor maximo del exponente es de 9. Pues se
permite ingresar? ¿Por qué? calcula la potencia de 10. Y como este valor es
ingresado a una variable de tipo long el cual su
maximo de valor es de 2.14 * 10^9 El cual
corresponde al tipo de esta potencia.

Si no se ingresa como debe causaría un


desbordamiento, pues el largo de palabra del valor
ingresado sería muchísimo mayor al permitido.

Cabe aclara que tambien puede variar


dependiendo de la potencia que tenga el equipo.

4. 25 pts. Modifica el programa primes3.cpp, para agregar la funcionalidad de preguntar al


usuario cuántos hilos se desean utilizar en la ejecución. Esto debe permitir distribuir
equitativamente la cantidad de valores a verificar en cada hilo. Por ejemplo:
● Si el usuario ingresa como exponente el valor 2, esto implica que se evaluará si los números
del 0 al 100 son primos. Además, si el usuario ingresa cantidad de hilos 4, entonces:
- El hilo 123490 verificará si son primos, los números entre 0 y 24.
- El hilo 123491 verificará si son primos, los números entre 25 y 49.
- El hilo 123492 verificará si son primos, los números entre 50 y 74.
- El hilo 123493 verificará si son primos, los números entre 75 y 100.

5. 10 pts. Utiliza el ejemplo pthread_hello1.cpp, y responde las siguientes preguntas:


a) ¿Qué es un puntero a void (void *)?

Es una manera de identificar que una variable que no se ha definido dentro de la sección de
datos o en el mismo programa. Pues aquí se esperará que sea de cualquier tipo de datos.

b) ¿Por qué es necesario usar punteros de tipo (void *) en el código?

Es una estándar de POSIX que los parámetros que se le pase a la función creadora de hilos
sean de este tipo. Pues el puntero a void solo almacena la información sin procesar. Ya que un
pthread recibe como parámetro un tipo de dato genérico. Después es posible castearlo para
poder usarlo normalmente.
.
c) ¿Por qué rutinas que ejecutan los hilos de POSIX deben ser de tipo void *?
Esto se da por flexibilidad. Básicamente se crea un molde (API) donde es posible pasarle
argumentos de cualquier tipo a la función. Y esta retornara argumentos de cualquier tipo. De esta
manera es flexible y se puede reutilizar muchas veces, siendo innecesario crear una función de
tipo distinta para cada tipo de dato primitivo.

Inclusive gracias a esto puede recibir la función una estructura o devolver una. Pues el puntero
solo indicará en qué posición de la memoria se encuentra el dato que deseas.
Universidad del Valle de Guatemala
Facultad de Ingeniería
Departamento de Ciencias de la Computación
CC3086 Programación de microprocesadores Ciclo 2 de
2,023

d) ¿Qué ocurriría si rc = pthread_join(tid[i], NULL); se colocara dentro del mismo for


donde se crean los hilos?
El resultado al ejecutarse sería el mismo, pero el tiempo de ejecución cambiaría entre una
versión y otra. Pues al realizarlo utilizando un solo for. Será mucho mayor el tiempo, pues el
programa esperará a que todos los hilos terminen para seguir ejecutándose. En cambio en for
separada la sincronización se realizará de una manera más eficiente, pues no se esperará a que
por cada hilo se termine el proceso sino que lleguen al mismo punto.

De igual manera al tener 2 fors se respeta el paralelismo. pues ya no se ejecutaría de manera


secuencial la misma parte del código

6. 15 pts. Investiga y completa la información solicitada para las siguientes funciones de tipo
Pthread:

Función/Objeto Descripción Parámetros


pthread_create Crea un nuevo hilo en - pthread_t = variable puntero que guarda el
el proceso actual. identificador del hilo.
- pthread_attr_t = puntero a una estructura
que se usa para especificar atributos
personalizados.
- void *(*start_routine)(void *) = rutina que
ejecutara el hilo creado.
- void *restrict arg = puntero void que
servira para el paso de parametros a la
funcion.

pthread_exit Termina la llamada o *retraval = valor que se desea devolver


proceso que este cuando el hilo ha terminado su proceso. Se
realizando el hilo. coloca NULL sino se quiere devolver nada.
pthread_join
pthread_detach
pthread_attr_init
pthread_attr_setdetachstate
pthread_attr_getdetachstate
pthread_attr_destroy
pthread_self
pthread_equal

También podría gustarte