Si utilizo una variable compartida, digamos una doble, para calcular algún tipo de suma a lo largo de la ejecución del programa. ¿Sería eso de alguna manera vulnerable a las operaciones no estables? Quiero decir, ¿sería posible que más de un núcleo accedería a esta variable de forma asíncrona y causaría resultados inestables?C++: protección de memoria compartida OpenMP
Por ejemplo: esta es una variable global:
double totalTime = 0;
y en cada núcleo de un comando se llama:
totalTime += elapsedTime;
Esta última operación/sentencia se ejecuta tomando el valor de totalTime , ponlo en el registro de CPU, y luego haz la suma. Puedo imaginar que más de un núcleo tomaría el mismo valor en el mismo instante, y luego agregaría el nuevo tiempo transcurrido, y luego el valor almacenado en tiempo total se sobrescribirá con el valor incorrecto, debido a la latencia. ¿Es eso posible? y como puedo resolver esto?
Gracias.
Gracias, amigo :) –
Me pregunto cómo OpenMP admite las adiciones atómicas para los tipos de datos de punto flotante en x86; no hay instrucciones nativas para ello. Secciones críticas? – snemarch
@snemarch: No pude encontrar nada definitivo al respecto, así que supongo que usa bloqueos. – Tudor