OpenMP operación atómica atómica

En el programa OpenMP, la función de las operaciones atómicas por #pragma omp atomicproporcionar orientación directiva del compilador. criticaloperación sección crítica capaz de actuar sobre un bloque de cualquier tamaño, y la operación atómica sólo pueden afectar a una sola instrucción de asignación , C \ C ++ disponibles operación atómica es la siguiente:+ - * / & ^ | << >>

atómica en uso necesidad de prestar atención a:

  1. Cuando una operación atómica de datos, los datos no se pueden proteger sección crítica
  2. Cuando la operación de usuario para el mismo patio usando una celda de memoria, es necesario que todas las partes de la asignación variable de paralelo implica la protección, se añadieron en una operación atómica.

Ejemplo:

#include <stdio.h>
#include <omp.h>

int main()
{
    omp_set_num_threads(2);
    int counter = 0, i;
#pragma omp parallel
    {
        for (i = 0; i < 10000; i++)
        {
#pragma omp atomic
            counter++;
        }
    }
    printf("counter = %d\n", counter);
    return 0;
}

Debido a la utilización de los enunciados atómicos, para evitar la posible competencia de acceso a datos, los resultados finales de la aplicación son los mismos, los resultados son siempre counter = 20000(suponiendo que hay dos procesos simultáneos).

Publicados 673 artículos originales · ganado elogios 644 · vistas 380 000 +

Supongo que te gusta

Origin blog.csdn.net/zhaohaibo_/article/details/90408969
Recomendado
Clasificación