Estoy escribiendo un programa paralelo usando OpenMP en C++.OpenMP set_num_threads() no funciona
Quiero controlar el número de subprocesos en el programa usando omp_set_num_threads()
, pero no funciona.
#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;
}
Los productos de los programas:
sum = 4.5e+007
threads=1
Cómo controlar el número de hilos?
Pero no pude obtener ninguna aceleración cambiando el número de subprocesos y también configurando el omp_set_dynamic (0) ?? – Nurlan
Primero, la versión_serial_ lleva 50 ms en mi CPU. No puede esperar una aceleración para códigos tan rápidos debido a la sobrecarga de OpenMP. Ponga 100x más interacciones en el bucle. En segundo lugar, te falta la región 'parallel' en tu código original. Has escrito '#pragma omp for ...' mientras que debería ser '#pragma omp parallel for ...'. En tercer lugar, está mezclando MPI y OpenMP. ¿Estás seguro de que sabes exactamente lo que estás haciendo? –
@HristoIliev ¿puede un usuario controlar dinámicamente el número de subprocesos? es decir, en lugar de usar un '4' codificado. usar una variable? – manatttta