Pregunta

Estoy utilizando OpenMP hacer multithreading con mis bucles anidados. Desde nuevo en estas cosas, no estoy seguro de si estoy usando OpenMP en el camino correcto para que lo que realmente puede hacer la programación paralela. Así que me gustaría saber si puedo medir el rendimiento de mi programa en C ++ que utiliza OpenMP por lo que puede decir lo que realmente funciona y estoy en el camino correcto? Al igual que el número de hilos se ejecutan en paralelo y cuánto tiempo se necesita para cada uno de ellos a fin. Gracias y saludos!

¿Fue útil?

Solución

#include <omp.h>

...
int target_thread_num = 4;
omp_set_num_threads(target_thread_num);
unsigned long times[target_thread_num];

// Initialize all the times
#pragma omp parallel
{
   int thread_id = omp_get_thread_num();
   times[thread_id] = start_time();

   std::cout << "Thread number: " << omp_get_thread_num() << endl;

   times[thread_id] = end_time();
}
...

Obviamente se necesita ot proporcionar las dos funciones de temporizador, pero eso es lo esencial. Las funciones de OMP son bastante auto-explicativo. También asegúrese de que su entorno está configurado correctamente y que se está compilando con los mecanismos adecuados. opción g ++ es -fopenmp. En Visual Studio ir a la configuración, C ++, idioma del proyecto, y active "Soporte OpenMP".

Otros consejos

Se puede usar ventanas administrador de tareas (CTRL-SHIFT-ESC) en las ventanas para supervisar el uso de la CPU, o la parte superior de las cajas de * nix.

Sólo tienes que comprobar si muchos núcleos se utilizan o no

Puede utilizar el depurador (Visual Studio si estás en Windows) a:

  • ver cómo pueden las discusiones se están ejecutando
  • ver que codifican cada uno de ellos se está ejecutando
  • hacer una pausa en algunos de ellos, mientras que dejar que otros continúan
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top