O
Okraten
Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas compañeros de FotoBeta, estoy cursando 2ºDAM y mi profesor ha puesto un ejercicio de paralelización que tenemos que entregar a ver quien consigue que le tarde menos tiempo. Os dejo el codigo, basicamente lo que hace el codigo es buscar el mayor producto de la multiplicación de todas las posiciones del array, se puede cambiar codigo siempre cuando siga haciendo lo mismo, a ver si podeis ayudarme a paralelizar con openmp lo más rápido posible. Gracias , Un SALUDO 🙂
CODIGO:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
int main()
{
long N = 200000;
double v1[N];
double v2[N];
double mayor = -1;
long pos_mayor = -1;
double omp_get_wtime();
double inicio=0;
double fin=0;
srand(time(NULL));
//Rellenar v1 y v2
for (int i = 0 ; i < N ; i++)
{
v1 = rand() % 1000;
v2 = rand() % 1000;
printf("%f\n",v1);
}
inicio = omp_get_wtime();
omp_set_num_threads(4);
#pragma omp parallel
{
#pragma omp for
for (int i = 0 ; i < N ; i++)
{
for (int j = 0 ; j < N ; j++)
{
if (mayor < abs(v1*v2[j]))
{
mayor = abs(v1*v2[j]);
}
}
}
fin = omp_get_wtime();
}
printf("%f\n",fin-inicio);
printf("%f\n", mayor);
}
CODIGO:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
int main()
{
long N = 200000;
double v1[N];
double v2[N];
double mayor = -1;
long pos_mayor = -1;
double omp_get_wtime();
double inicio=0;
double fin=0;
srand(time(NULL));
//Rellenar v1 y v2
for (int i = 0 ; i < N ; i++)
{
v1 = rand() % 1000;
v2 = rand() % 1000;
printf("%f\n",v1);
}
inicio = omp_get_wtime();
omp_set_num_threads(4);
#pragma omp parallel
{
#pragma omp for
for (int i = 0 ; i < N ; i++)
{
for (int j = 0 ; j < N ; j++)
{
if (mayor < abs(v1*v2[j]))
{
mayor = abs(v1*v2[j]);
}
}
}
fin = omp_get_wtime();
}
printf("%f\n",fin-inicio);
printf("%f\n", mayor);
}

