RISOLTO openmp esercizio

Stato
Discussione chiusa ad ulteriori risposte.

toni1705

Nuovo Utente
98
9
ciao ragazzi sto svolgendo un piccolo esercizio( senza avere soluzioni)
la traccia richiede che un processore legga un vettore di lunghezza 8 e che moltiplichi il vettore per il proprio identificativo
specificamente il primo processore deve moltiplicare N numeri e il secondo la restante N parte per il proprio identificativo avendo a disposizione 2 core/threads;
(i primi 4 numeri devono essere moltiplicati per il primo processore che ha identificativo 0)
( gli ultimi 4 n moltiplicati per il processore con identificativo 1);
il problema sta con l'esecuzione del programma col primo thread perchè in quel caso moltiplicando per 0 il risultato dovrebbe essere 0 per 4 numeri invece vengono salvati due volte i numeri dato dal prodotto con il 2 thread
C:
#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
#define DUAL_CORE 2
#define N 8

int main()
{
    int i, v[N], id, nloc,nproc,v2[N];
    srand(time(NULL));
    for (i = 0; i < N; i++)
        v[i] = rand() % 10 + 1;

    for (i = 0; i < N; i++)
        printf("%d ", v[i]);


    printf("\n");
    omp_set_num_threads(DUAL_CORE); //che è lo stesso di impostare la clausola num_threads(2)
#pragma omp parallel private(i, id, nloc) shared(v)
    {
        id = omp_get_thread_num();
        nproc=omp_get_num_threads();
        nloc = N / omp_get_num_threads();
        //printf("nproc:%d id:%d  nloc:%d \n", nproc,id,nloc);


        
        for (i = 0; i < nloc; i++) {
        
            v[i] = v[i + nloc * id] * id;
            
        }/*
                                      i=0, 0+4*0=0,
                                      i=1, 1+4*0=1,
            i + (nloc*id) se id=0 =>  ...
                                      i=3, 3+4*0=0

        */
    }

    //se eventualmente vogliamo stampare il nuovo vettore...
    for (i = 0; i < N; i++)
    {
        printf("%d  ", v[i]);
    }
        
}
 
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili