CP Trabajo de Investigacion Unidad II EJ2022
CP Trabajo de Investigacion Unidad II EJ2022
CP Trabajo de Investigacion Unidad II EJ2022
Cómputo Paralelo.
Unidad 2: Open MP
Trabajo de Investigación
UNIDAD 2. OpenMP.
TOTAL 30
ING. ROMO MEDINA MARCO ALBERTO
Programación de threads
Cómputo Paralelo. Unidad 2 Ing. Marco Alberto Romo
Medina
Una thread es un único flujo de control dentro de un programa. Algunas veces es
llamado contexto de ejecución porque cada thread debe tener sus propios
recursos, como el program counter y el stack de ejecución, como el contexto de
ejecución.
NOTA: Es mucho más simple crear y destruir una thread que un proceso.
¿Qué es OpenMP?
OpenMP (Open Multi-Processing) es una interfaz de programación de aplicaciones
(API) para la programación multiproceso de memoria compartida en múltiples
plataformas. También podría definirse como un modelo de programación portable
y escalable que proporciona a los programadores una interfaz simple y flexible
para el desarrollo de aplicaciones paralelas para las plataformas que van desde
las computadoras de escritorio hasta los supercomputadores.
Directivas de OpenMP
Cómputo Paralelo. Unidad 2 Ing. Marco Alberto Romo
Medina
OpenMP comienza a través de directivas, con funciones propias (que pueden
ser condicionalmente compiladas) y variables de entorno, que pueden modificar
el comportamiento en tiempo de ejecución.
bloque de codigo
if(expresión escalar)
private(lista de variables)
firstprivate(lista de variables)
default(shared | none)
shared(lista de variables)
copyin(lista de variables)
reduction(operador:lista de variables)
num_threads(expresión entera)
Entre las clausulas que se pueden utilizar, las mas usadas son:
private(lista de variables)
firstprivate(lista de variables)
lastprivate(lista de variables)
reduction(operador:lista de variables)
ordered
schedule(categoria, tamaño_tramo)
nowait
Barrier Critical
Sincroniza todos los subprocesos en un Especifica que el código solo se ejecuta
equipo; todos los subprocesos se detienen en la en un subproceso a la vez.
barrera, hasta que todos los subprocesos ejecutan la
barrera.
Atomic Flush
Especifica que una ubicación de memoria se Especifica que todos los subprocesos
actualizará de forma atómica. tienen la misma vista de la memoria
para todos los objetos compartidos.
Variables de entorno
export OMP_NUM_THREADS=4
setenv OMP_NUM_THREADS 4
set OMP_NUM_THREADS=4
COMPILACION
Los comandos de compilación son:
Ejemplos de aplicación.
o Constructor for
Hace que el trabajo realizado en un for bucle dentro de una región paralela se
divida entre subprocesos.
Parámetros
Cláusulas
(Opcional) Cero o más cláusulas.
for_statement
Un for bucle. Se producirá un comportamiento indefinido si el código de usuario en
el for bucle cambia la variable de índice.
Observaciones
private
firstprivate
lastprivate
reduction
ordered
schedule
nowait
Si parallel también se especifica, clauses puede ser cualquier cláusula aceptada
por las directivas parallel o , excepto .for nowait
#include <stdio.h>
#include <math.h>
#include <omp.h>
#define NUM_THREADS 4
#define NUM_START 1
#define NUM_END 10
int main() {
unsigned(abs(nTmp))) / 2;
if (nTmp < 0)
nSumCalc = -nSumCalc;
omp_set_num_threads(NUM_THREADS);
nSum += i;
if (nThreads == NUM_THREADS) {
nRet = 0;
else {
NUM_THREADS, nThreads);
nRet = 1;
if (nSum != nSumCalc) {
nRet = 1;
else
o Constructor sections
Identifica las secciones de código que se dividirán entre todos los subprocesos.
PARÁMETROS
CLÁUSULAS
(Opcional) Cero o más cláusulas.
OBSERVACIONES
privado
primeroprivado
ultimoprivado
reducción
no, espera
// omp_sections.cpp
#include <stdio.h>
#include <omp.h>
int main() {
Output
2022, de https://users.dcc.uchile.cl/~mmarin/parallel/openMP/index.html
https://programmerclick.com/article/58941552399/
http://www.cenits.es/faq/preguntas-generales/que-es-openmp
de 2022, de
https://docs-microsoft-com.translate.goog/en-us/cpp/parallel/openmp/
reference/openmp-directives?view=msvc-
170&_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es-419&_x_tr_pto=sc