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
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 p>
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
.