Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Programa de ejemplo para OC */
- #include <stdio.h>
- #include <math.h>
- #include <unistd.h>
- #define LONGIT 16000 /* Longitud del vector */
- #define PROC_MAX 32 /* Numero de procesadores */
- MAIN_ENV /* No es necesario con Limes */
- unsigned int inicio,final;
- double vector[LONGIT]; /* Vector compartido */
- int PrId; /* Identificador de proceso */
- LOCKDEC(PrIdLock) /* Cerrojo usado para la variable anterior */
- /* Este es la rutina ejecutada por cada hilo lanzado */
- void Proceso(void)
- {
- int i,trozo,pr;
- LOCK(PrIdLock);
- pr=PrId; /* Cada identificador de proceso debe ser unico */
- PrId++; /* por eso se protege con un cerrojo */
- UNLOCK(PrIdLock);
- trozo=LONGIT/PROC_MAX;
- /* for (i=pr; i<LONGIT) ; i=i+PROC_MAX) /* Reparto Entrelazado*/
- for (i=trozo*pr;(i<trozo*(pr+1)) && (i<LONGIT) ;i++) /* Reparto Consecutivo*/
- {
- vector[i]= (i+1.0);
- vector[i]= vector[i]/8.0;
- vector[i]=sqrt(vector[i]); /* Calculos tontos para gastar tiempo */
- }
- }
- main()
- {
- int i;
- MAIN_INITENV(); /* Inicio de la parte principal */
- memsim_init(); /* Inicia la memoria del simulador */
- CLOCK(inicio); /* tomamos cuenta del tiempo inicial */
- PrId=0; /* El padre es el proceso # 0 */
- LOCKINIT(PrIdLock); /* Inicializa cerrojo */
- for (i=0;i<PROC_MAX;i++)
- {
- CREATE(Proceso); /* Este bucle lanza PROC_MAX hilos */
- }
- WAIT_FOR_END(PROC_MAX); /* Se espera a que terminen los hijos */
- CLOCK(final); /* Medimos el tiempo al terminar */
- printf("\n Tiempo TOTAL = %14ld ciclos\n", final-inicio);
- MAIN_END;
- } /* Fin de la parte principal */
Add Comment
Please, Sign In to add comment