ciao ragazzi mi sto esercitando con open mp
devo svolgere un programma che legga in input 4 vettori( io li ho generati con una rand per comodità) di lunghezza 8
ogni vettore deve fare la somma ed inserire il risultato in un vettore diverso.
insomma ho provato a fare cosi ma mi blocco sulla parte parallela perchè non saprei come distribuire il lavoro trai thread.. :/
ho pensato quindi di fare con un altro modo
creo una matrice di lunghezza 8 di circa 4 righe quindi una matrice bidimensionale [4][8]
bene vado ad alllocare la memoria tutto perfetto.
mi blocco sulla parte parallela di nuovo perchè dovrei sommare le righe e distribuire il lavoro
ho pensato di farlo in un modo
//il processore p0 calcola la prima riga
P1 calcola la 2 riga
e cosi via...
ho provato così ma mi sono bloccato mentalmente :(
devo svolgere un programma che legga in input 4 vettori( io li ho generati con una rand per comodità) di lunghezza 8
ogni vettore deve fare la somma ed inserire il risultato in un vettore diverso.
insomma ho provato a fare cosi ma mi blocco sulla parte parallela perchè non saprei come distribuire il lavoro trai thread.. :/
ho pensato quindi di fare con un altro modo
creo una matrice di lunghezza 8 di circa 4 righe quindi una matrice bidimensionale [4][8]
bene vado ad alllocare la memoria tutto perfetto.
mi blocco sulla parte parallela di nuovo perchè dovrei sommare le righe e distribuire il lavoro
ho pensato di farlo in un modo
//il processore p0 calcola la prima riga
P1 calcola la 2 riga
e cosi via...
C:
/*
Scrivere un programma parallelo per l'ambiente QUAD-CORE (p=4) che impieghi il linguaggio C ed utilizzi
la libreria OpenMP;
il programma dev'essere organizzato come segue:
il core master deve leggere 4 differenti vettori
di reali di lunghezza 8;
ogni core deve sommare tra loro gli elementi di
uno dei vettori.
Infine i risultati devono essere concatenati in un unico vettore di lunghezza 4 e stampati.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#define N 8
#define M 4
int main()
{
int i, j, id, sum,nproc,nloc;
float** v, * vet_sum;
vet_sum = (float*)malloc(M * sizeof(float)); //vettore delle somme
//gestisco i 4 vettori come righe di una matrice
v = (float**)malloc(M * sizeof(float*));
for (i = 0; i < 4; i++)
v[i] = (float*)malloc(N * sizeof(float));
sum = 0;
srand(time(NULL));
//lettura vettori in maniera automatica (generazione di numeri casuali)
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
v[i][j] = rand() % 30 + 1; // oppure scanf("%d", &v[i][j]);
for (i = 0; i < M; i++) {
printf("\n");
for (j = 0; j < N; j++)
printf(" %lf ", v[i][j]);
}
omp_set_num_threads(4);
#pragma omp parallel private (id,i,sum) shared (vet_sum)
{
id = omp_get_thread_num();
sum = 0;
nproc = omp_get_num_threads();
for (i = 0; i <4; i++)
{for (j=0;j<8;j++)
{
sum += v[i][j] ;
}
vet_sum[i] = sum;
}// fine for
}// fine regione parallela
}