Ich schreibe ein paralleles Programm mit OpenMP in C++.OpenMP set_num_threads() funktioniert nicht
Ich möchte die Anzahl der Threads im Programm mit omp_set_num_threads()
steuern, aber es funktioniert nicht.
#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;
}
Die Programmausgaben:
sum = 4.5e+007
threads=1
Wie die Anzahl der Threads kontrollieren?
Aber ich konnte keine Beschleunigung bekommen, indem ich die Anzahl der Threads änderte und auch omp_set_dynamic (0) ?? – Nurlan
Zuerst dauert die _serial_ Version 50 ms auf meiner CPU. Sie können aufgrund des OpenMP-Overhead keine Beschleunigung für solch schnelle Codes erwarten. Setzen Sie 100x mehr Interaktionen in die Schleife. Zweitens fehlt in Ihrem ursprünglichen Code die "parallele" Region. Sie haben '#pragma omp for ...' geschrieben, während es '#pragma omp parallel for ...' sein sollte. Drittens mischen Sie MPI und OpenMP. Sind Sie sicher, dass Sie genau wissen, was Sie tun? –
@HristoIliev kann ein Benutzer die Anzahl der Threads dynamisch steuern? h., anstatt eine hartcodierte "4" zu verwenden. benutze eine Variable? – manatttta