Red de conocimiento informático - Material del sitio web - Cómo utilizar la optimización del código VS y la computación paralela openmp para mejorar la velocidad de ejecución del programa

Cómo utilizar la optimización del código VS y la computación paralela openmp para mejorar la velocidad de ejecución del programa

En el pasado, utilicé subprocesos múltiples para acelerar la velocidad de ejecución de una gran cantidad de programas informáticos, pero también sé que la sincronización y depuración de subprocesos múltiples son un gran obstáculo. Recientemente, aprendí un poco sobre la optimización del código. configuración en VS y uso de openmp para acelerar los cálculos para proyectos de laboratorio. Estos son algunos métodos muy básicos para mejorar la velocidad de ejecución del programa. Siempre que modifique ligeramente el código y la configuración, puede hacer que el programa se ejecute más rápido. Después de la verificación con subprocesos múltiples y la función clock(), la velocidad de ejecución de mi programa se puede aumentar en un 60%, de la siguiente manera:

Optimización de código:

Propiedades->Configuración propiedades->C/ C++->Generación de código: habilite el conjunto de instrucciones mejorado, extensiones SIMD de transmisión opcionales 2 (/arch:SSE2) (/arch:SSE2) (/arch:SSE2) (/arch:SSE2) (/arch:SSE2 ) arch:SSE2 ), Stream Processing SIMD Extension 2 (/arch:SSE2) (/arch:SSE2) se usa para acelerar el modelo de punto flotante, opcional fast (/fp:fast) se usa para acelerar las operaciones de datos de punto flotante

Propiedades ->Propiedades de configuración->C/C++->Optimización: Maximizar velocidad opcional (/O2) para optimización. La opción de optimización completa del programa es (/GL), que no se puede configurar en la versión de depuración y debe configurarse en la versión de lanzamiento

Computación paralela Openmp:

En vs2012, propiedades del proyecto -Lenguaje "C/ C++-", soporte openmp, la opción es incluir el archivo de encabezado "omp.h", para programación multiproceso basada en diversidad de datos, OpenMP es una buena opción.

Instrucciones comunes de OpenMP

paralelo: se usa antes de un segmento de código, lo que indica que el código será ejecutado en paralelo por varios subprocesos

para: se usa antes de un for bucle, lo que indica Asigne el bucle a varios subprocesos para la ejecución en paralelo, y debe asegurarse de que no haya correlación entre cada bucle

paralelo para: una combinación de declaraciones paralelas y declaraciones for, también se usa antes para los bucles para representar bucles for El código será ejecutado en paralelo por múltiples subprocesos

Sección: se utiliza antes de una sección de código que puede ejecutarse en paralelo

Sección paralela: una combinación de instrucciones y secciones paralelas declaraciones.

Crítico: se usa antes de una sección de código crítica

Subproceso único: se usa antes de una sección de código ejecutada solo por un solo subproceso, lo que indica que la sección de código posterior será ejecutada por un solo subproceso. thread

Barrera: se utiliza para sincronizar subprocesos en un segmento de código paralelo. Antes de que todos los subprocesos alcancen la barrera, la ejecución de todos los subprocesos en la barrera se detendrá. Todos los subprocesos se detendrán al alcanzar la barrera y no continuarán la ejecución hasta que todos los subprocesos alcancen la barrera

Atomic: se usa para especificar el área de memoria que se actualizará frenando

master: se usa Especificar que el bloque de código será ejecutado por el hilo principal

Ordenado: usado para especificar que los bucles en la región paralela se ejecutan en orden

threadprivate: usado para especificar variables como hilo privado variables

threadprivate: se usa para especificar que las variables son variables privadas de subprocesos

threadprivate: se usa para especificar que las variables son variables privadas de subprocesos

Además de las instrucciones anteriores , OpenMP también tiene muchas funciones de biblioteca, que se enumeran a continuación. Hay algunas funciones de biblioteca de uso común:

omp_get_num_procs: devuelve el número de procesadores en el multiprocesador que ejecuta este hilo

omp_get_num_threads: devuelve el número de hilos activos en la región paralela.

Número de subprocesos activos en la región paralela

omp_get_thread_num: devuelve el número de subprocesos

omp_set_num_threads: establece el número de subprocesos al ejecutar código en paralelo

omp_init_lock: Inicializa un bloqueo simple

p>

omp_set_lock.lock: operación de bloqueo

omp_unset_lock: operación de desbloqueo, emparejado con la función omp_set_lock

omp_destroy_lock: emparejado con la función omp_init_lock, utilizada para cerrar el candado

.