Implementación de una matriz en OPENMP
Enviado por Fran Soria • 28 de Enero de 2021 • Informe • 1.015 Palabras (5 Páginas) • 67 Visitas
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA EN SISTEMAS
CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
Materia: SIC616 – Computación Distribuida
Memoria Técnica
Tema: Implementación de una matriz en OPENMP
OpenMP
Es un api, la cual se puede hacer uso para implementar aplicaciones o programas con multiprocesamiento, pero en memoria compartida. Cabe recalcar que al ser un api y no se puede manejar los procesos en bajo nivel, OPENMP asigna los procesadores en donde se vayan a realizar las tareas asignadas.
Este código nos ayuda a paralelizar un problema que requiere mucho procesamiento en este caso calculo de números muy elevados de tipo long long en una multiplicación, para ello se utilizó #pragma que es una sentencia con la cual nosotros podemos “decirle” al compilador como se debe comportar para el siguiente programa dado.
Como se puede observar se ha divido el código en secciones y se les asignado un hilo para cada sección. Esto se defino en con la línea de código #pragma omp parallel sections num_threads(7).
Código:
#include <stdafx.h>
#include <iostream>
#include <omp.h>
using namespace std;
int _tmain(int arc, char* argv[])
{
const long long size = 12000000000;
float* a = (float*)malloc(3 * size * sizeof(float));
#pragma omp parallel sections num_threads(7)
{
#pragma omp section //1
{
for (long long i = 0; i < size * 20; i++) {
a[i % size] = 3.141926 + (i % size);
}
}
#pragma omp section //2
{
for (long long i = 0; i < size * 20; i++) {
a[i % size] = 3.141926 + (i % size);
}
}
#pragma omp section //3
{
for (long long i = 0; i < size * 20; i++) {
a[i % size] = 3.141926 + (i % size);
}
}
#pragma omp section //4
{
for (long long i = 0; i < size * 20; i++) {
...