Sto scrivendo un programma parallelo che utilizza OpenMP in C++.OpenMP set_num_threads() non funziona
Voglio controllare il numero di thread nel programma utilizzando omp_set_num_threads()
, ma non funziona.
#include <iostream>
#include <omp.h>
#include "mpi.h"
using namespace std;
int myrank;
int groupsize;
double sum;
double t1,t2;
int n = 10000000;
int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD,&groupsize);
omp_set_num_threads(4);
sum = 0;
#pragma omp for reduction(+:sum)
for (int i = 0; i < n; i++)
sum+= i/(n/10);
cout<<"sum="<<sum<<endl;
cout<<"threads="<<omp_get_num_threads()<<endl;
MPI_Finalize();
return 0;
}
I risultati del programma:
sum = 4.5e+007
threads=1
Come controllare il numero di thread?
Ma non ho potuto ottenere alcuna accelerazione modificando il numero di thread e anche impostando il omp_set_dynamic (0) ?? – Nurlan
Innanzitutto, la versione _serial_ richiede 50 ms sulla mia CPU. Non è possibile aspettarsi un aumento della velocità per codici così veloci a causa del sovraccarico di OpenMP. Metti 100 volte più interazioni nel ciclo. Secondo, ti manca la regione 'parallela' nel tuo codice originale. Hai scritto '#pragma omp per ...' mentre dovrebbe essere '#pragma omp parallelo per ...'. Terzo, stai mixando MPI e OpenMP. Sei sicuro di sapere esattamente cosa stai facendo? –
@HristoIliev un utente può controllare dinamicamente il numero di thread? cioè invece di usare un '4' hardcoded. usa una variabile? – manatttta