Practica 02 Clustering de Datos Con Hilos Bajo UNIX
Practica 02 Clustering de Datos Con Hilos Bajo UNIX
Practica 02 Clustering de Datos Con Hilos Bajo UNIX
Introducción
Un algoritmo de agrupamiento (clustering) es un procedimiento de agrupación de una serie de
vectores de acuerdo con un criterio de cercanía. Esta cercanía se define en términos de una
determinada función de distancia, como la euclídea, aunque existen otras más robustas o que
permiten extenderla a variables discretas.
El algoritmo de k-medias es sencillo, pero muy eficiente, siempre que el número de clases se
conozca a priori con exactitud.
Existen una serie matrices que constituyen el fundamento para la implementación de este algoritmo.
Partiendo de la matriz de datos a clasificar ⃗⃗⃗⃗ ⃗⃗⃗⃗ ⃗⃗⃗⃗ y del conjunto de elementos de la
clase j {⃗| ⃗ ⃗⃗⃗⃗ } el algoritmo de k-medias, realiza las siguientes operaciones.
1.- Inicialización: En el tiempo t=0, elija el número de clases K y sus respectivos centros ⃗⃗⃗⃗ .
Al aplicar el algoritmo de k-medias, sobre los datos de la figura con K=2, se encuentra que el valor de
los centros es C1(1,1) y C2(7,5.5).
Figura 2: Los hilos comparten la sección de variables globales (global data), código (code) y montículo (heap)
#include <pthread.h>
Los hilos POSIX son referenciados por un ID de tipo pthread_t. Cualquier hilo puede conocer su
ID invocando a:
pthread_t pthread_self(void);
Esta función retorna el ID del hilo que la invoca, no tiene errores definidos.
La función pthread_create crea un hilo. Esta función automáticamente pone en ejecución el hilo
que crea.
El parámetro thread apunta al ID del hilo recientemente creado. El parámetro attr representa un
objeto atributo que encapsula los atributos de un hilo. Si attr es NULL, el hilo nuevo tendrá los
atributos asignados por defecto. El tercer parámetro, start_routine, es el nombre de la función
que es invocada por el hilo cuando comienza su ejecución. La función start_routine recibe solo
un parámetro el cual es especificado por el parámetro arg.
Error Causa
EAGAIN El sistema no posee los recursos necesarios para crear el nuevo
hilo, o se excede el límite total del número de hilos permitidos por
el sistema.
EINVAL El parámetro attr es inválido
EPERM No se tienen los permisos suficientes para cambiar la política de
planificación o cualquier otro parámetro especificado en attr
Unir (join)
Esta función espera por la culminación de algún hilo. La función pthread_join suspende la ejecución del
hilo que la invoca hasta que el hilo objetivo , especificado por el primer parámetro, termine. El parámetro
valor_ptr es un apuntador al valor de retorno que el hilo objetivo pasa a la función pthread_exit o a
return. Si value_ptr es NULL, el hilo que invoca join no se recibe el valor de retorno del hilo objetivo.
Error Causa
EINVAL El hilo no corresponde a un hilo disponible para la unión
ESRCH No existe un hilo identificado por ID
Cálculo de las distancias a los centros de cada dato y cálculo de las pertenencias
En una segunda etapa busque también paralelizar el cálculo de los nuevos centros.
Revisar el código que se proporciona y muestre los resultados con el conjunto de datos de prueba
del iris_data (también se proporciona), buscado 3 y 5 clases sobre los datos.
ESCOM-IPN (Sistemas Operativos II - Practica 02)
Prof. Edgardo Adrián Franco Martínez
Página 5 de 6
Paralelizar la operación de
Calcula centros Calcula centros
cálculo de nuevos centros.
No No
Fin Fin
Requerimientos
• Portada
• Introducción
• Errores detectados (Si existe algún error detectado, el cuál no fue posible resolver o se
desconoce el motivo y solo ocurre con ciertas condiciones es necesario describirlo)
Observaciones
El reporte deberá de dar énfasis a los resultados de tiempo, por lo que es importante reportar
las características del equipo donde fue probado.
Reportar graficas de rendimiento para el conjunto de datos iris_data, probando con 3 y 5
centros.
*No hay prorrogas, ya que se cerrará la calificación del 1er Parcial el día Martes 14 de Septiembre.
http://computacion.cs.cinvestav.mx/~efranco/?p=recepcion_trabajos/index.php