Estoy usando OpenMP para hacer subprocesos con mis bucles anidados. Como soy nuevo en esto, no estoy seguro de si estoy usando OpenMP de la manera correcta para que realmente pueda hacer la programación paralela. Entonces, me gustaría saber si puedo medir el rendimiento de mi programa C++ que usa OpenMP, así que puedo decir que realmente funciona y estoy en el camino correcto. Como cuántos subprocesos se ejecutan en paralelo y cuánto tardan en terminarlos. ¡Gracias y saludos!Cómo saber si OpenMP funciona en mi programa C++
Respuesta
#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 necesita ot proporcionar las dos funciones de temporizador, pero esa es la esencia. Las funciones de OMP son bastante auto explicativas. También asegúrese de que su entorno esté configurado correctamente y de que esté compilando con los mecanismos adecuados. La opción g ++ es -fopenmp. En Visual Studio vaya a la configuración del proyecto, C++, Language, y habilite "OpenMP Support".
Puede usar el administrador de tareas de Windows (CTRL-SHIFT-ESC) en las ventanas para monitorear el uso de la CPU, o arriba en las casillas * nix.
Sólo tienes que comprobar si se utilizan muchos núcleos o no
Puede utilizar el depurador (Visual Studio si estás en Windows) para:
- ver cómo pueden las discusiones se están ejecutando
- ver que codifican cada uno de ellos se está ejecutando
- pausa de algunos de ellos, mientras que dejar que otros continúan
¿Sabes cómo hacer esto con gdb/en Linux? – Tim
Esto debería ayudar: http://www.delorie.com/gnu/docs/gdb/gdb_25.html Vea también los enlaces en la parte inferior de esa página. (Advertencia: lo encontré con Google; no soy un usuario de GDB). – RichieHindle
En Linux siempre puedes usar 'top' para ver todos tus núcleos y comprobar lo que están haciendo. – Anna
- 1. ¿Cómo saber si OpenMP está funcionando?
- 2. C++ OpenMP programa
- 3. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
- 4. OpenMP set_num_threads() no funciona
- 5. ¿Cómo saber si un programa se bloqueó con un subproceso?
- 6. ¿Cómo puedo saber si mi programa tiene ARC habilitado o no?
- 7. ¿Cómo saber si mi componente Java está en un Applet?
- 8. OpenCL: funciona bien con OpenMP, puedo conectarle otros idiomas, etc.
- 9. OpenMP y C parallel for loop: ¿por qué mi código se ralentiza cuando se usa OpenMP?
- 10. ¿Cómo puedo verificar si mi programa tiene datos conectados
- 11. ¿Cómo puedo saber si mi contexto aún es válido?
- 12. ¿Cómo puedo saber si mi servidor ejecuta mongodb 64 bits?
- 13. ¿Cómo puedo saber si mi aplicación PHP usa demasiada memoria?
- 14. ¿Cómo puedo saber si RenderAction llama a mi acción?
- 15. ¿Cómo saber si mi consulta LINQ devuelve null
- 16. ¿Cómo saber si mi procesador tiene 32 o 64 bits en C#?
- 17. ¿Cómo puedo saber si mi servidor tiene NUMA?
- 18. ¿Cómo saber si mi proyecto Xcode iPhone está usando ARC?
- 19. Extensiones Python y OpenMP C
- 20. ¿Cómo funciona la directiva de SECCIONES en OpenMP Distribuir trabajo?
- 21. Manejo de señales en el programa paralelo OpenMP
- 22. Vectores compartidos en OpenMP
- 23. Cómo saber si un GraphicsPath contiene un punto en C#
- 24. ¿Cómo saber si existe un archivo en C#/.NET?
- 25. ¿Cómo puedo saber si mi subproceso está esperando mi entrada (en python3) sp.py
- 26. Cómo usar COM dll en mi programa C++
- 27. C#: cómo: para saber si tengo la codificación correcta
- 28. ¿Cómo saber si mi DirectoryEntry está realmente conectado a mi directorio LDAP?
- 29. ¿Cómo puedo saber si mi servidor PostgreSQL está utilizando la configuración regional "C"?
- 30. Usando C#, ¿cómo saber si mi máquina es de 64 bits o 32 bits?
¡Mis disculpas por confundir OpenMP con OpenMPI! ¡Gracias a Dirk Eddelbuettel por señalar educadamente mi error! –