publicidad

inglés

1.4 Memory Model 1.4.1 Structure of the OpenMP Memory Model The OpenMP API provides a relaxed-consistency, shared-memory model. All OpenMP threads have access to a place to store and to retrieve variables, called the memory. In addition, each thread is allowed to have its own temporary view of the memory. The temporary view of memory for each thread is not a required part of the OpenMP memory model, but can represent any kind of intervening structure, such as machine registers, cache, or other local storage, between the thread and the memory. The temporary view of memory allows the thread to cache variables and thereby to avoid going to memory for every reference to a variable. Each thread also has access to another type of memory that must not be accessed by other threads, called threadprivate memory. A directive that accepts data-sharing attribute clauses determines two kinds of access to variables used in the directive’s associated structured block: shared and private. Each variable referenced in the structured block has an original variable, which is the variable by the same name that exists in the program immediately outside the construct. Each reference to a shared variable in the structured block becomes a reference to the original variable. For each private variable referenced in the structured block, a new version of the original variable (of the same type and size) is created in memory for each task or SIMD lane that contains code associated with the directive. Creation of the new version does not alter the value of the original variable. However, the impact of attempts to access the original variable during the region associated with the directive is unspecified; see Section 2.14.3.3 on page 159 for additional details. References to a private variable in the structured block refer to the private version of the original variable for the current task or SIMD lane. The relationship between the value of the original variable and the initial or final value of the private version depends on the exact clause that specifies it. Details of this issue, as well as other issues with privatization, are provided in Section 2.14 on page 146. The minimum size at which a memory update may also read and write back adjacent variables that are part of another variable (as array or structure elements) is implementation defined but is no larger than required by the base language. A single access to a variable may be implemented with multiple load or store instructions, and hence is not guaranteed to be atomic with respect to other accesses to the same variable. Accesses to variables smaller than the implementation defined minimum size or to C or C++ bit-fields may be implemented by reading, modifying, and rewriting a larger unit of memory, and may thus interfere with updates of variables or fields in the same unit of memory. If multiple threads write without synchronization to the same memory unit, including cases due to atomicity considerations as described above, then a data race occurs. Similarly, if at least one thread reads from a memory unit and at least one thread writes without synchronization to that same memory unit, including cases due to atomicity considerations as described above, then a data race occurs. If a data race occurs then the result of the program is unspecified. A private variable in a task region that eventually generates an inner nested parallel region is permitted to be made shared by implicit tasks in the inner parallel region. A private variable in a task region can be shared by an explicit task region generated during its execution. However, it is the programmer’s responsibility to ensure through synchronization that the lifetime of the variable does not end before completion of the explicittask region sharing it. Any other access by one task to the private variables of another task results in unspecified behavior.

español

1.4 modelo de memoria 1.4.1 Estructura del modelo de memoria OpenMP La API de OpenMP proporciona un modelo de memoria compartida de consistencia relajada. Todos los subprocesos de OpenMP tienen acceso a un lugar para almacenar y recuperar variables, llamado la memoria. Además, cada subproceso puede tener su propia vista temporal de la memoria. La vista temporal de la memoria para cada hilo no es una parte requerida del modelo de memoria OpenMP, pero puede representar cualquier tipo de estructura intermedia, como registros de la máquina, caché u otro almacenamiento local, entre el hilo y la memoria. los La vista temporal de la memoria permite que el subproceso almacene variables en la memoria caché y, por lo tanto, evite ir a la memoria por cada referencia a una variable. Cada subproceso también tiene acceso a otro tipo de memoria a la que no pueden acceder otros subprocesos, llamada memoria privada de subprocesos. Una directiva que acepta cláusulas de atributos de intercambio de datos determina dos tipos de acceso a las variables utilizadas en el bloque estructurado asociado de la directiva: compartido y privado. Cada variable referenciada en el bloque estructurado tiene una variable original, que es la variable con el mismo nombre que existe en el programa inmediatamente fuera del constructo. Cada referencia a una variable compartida en el bloque estructurado se convierte en una referencia al original variable.Para cada variable privada a la que se hace referencia en el bloque estructurado, se crea una nueva versión de la variable original (del mismo tipo y tamaño) en la memoria para cada tarea o carril SIMD que contiene el código asociado con la directiva. La creación de la nueva versión no altera el valor de la variable original. Sin embargo, el impacto de los intentos de acceso a la variable original durante la región asociada con la directiva no está especificado; vea la Sección 2.14.3.3 en la página 159 para detalles adicionales. Referencias a un La variable privada en el bloque estructurado se refiere a la versión privada de la variable original para la tarea actual o el carril SIMD. La relación entre el valor de la variable original y el valor inicial o final de la versión privada depende de la cláusula exacta que lo especifica. Los detalles de este problema, así como otros problemas relacionados con la privatización, se proporcionan en la Sección 2.14 en la página 146. El tamaño mínimo en el que una actualización de la memoria también puede leer y escribir las variables adyacentes que forman parte de otra variable (como elementos de matriz o de estructura). ) se define la implementación pero no es más grande que lo requerido por el lenguaje base. Un solo acceso a una variable puede implementarse con múltiples instrucciones de carga o almacenamiento, y por lo tanto no se garantiza que sea atómico con respecto a otros accesos a la misma variable.Los accesos a las variables más pequeñas que el tamaño mínimo definido por la implementación o a los campos de bits C o C ++ pueden implementarse leyendo, modificando y reescribiendo una unidad de memoria más grande, y por lo tanto pueden interferir con las actualizaciones de variables o campos en la misma unidad de memoria . Si varios subprocesos escriben sin sincronización en la misma unidad de memoria, incluidos los casos debido a las consideraciones de atomicidad descritas anteriormente, se produce una carrera de datos. De manera similar, si al menos un hilo lee desde una unidad de memoria y al menos un hilo escribe sin sincronización con esa misma unidad de memoria, incluidos los casos debido a consideraciones de atomicidad como se describió anteriormente, entonces se produce una carrera de datos. Si se produce una carrera de datos, el resultado del programa no se especifica. Se permite que una variable privada en una región de tarea que eventualmente genere una región paralela anidada interna sea compartida por tareas implícitas en la región paralela interna. Una variable privada en una región de tarea puede ser compartida por una región de tarea explícita generada durante su ejecución. Sin embargo, es responsabilidad del programador garantizar a través de la sincronización que la vida útil de la variable no finalice antes de completar la región de tareas explícitas que la comparte. Cualquier otro acceso por una tarea a las variables privadas de otra tarea da como resultado un comportamiento no especificado.

publicidad

Condiciones del Servicio

Asegúrese de cumplir con las reglas de redacción y el idioma de los textos que traducirá. Una de las cosas importantes que los usuarios deben tener en cuenta cuando usan el sistema de diccionario Traductor.com.ar es que las palabras y textos utilizados al traducir se guardan en la base de datos y se comparten con otros usuarios en el contenido del sitio web. Por esta razón, le pedimos que preste atención a este tema en el proceso de traducción. Si no desea que sus traducciones se publiquen en el contenido del sitio web, póngase en contacto con →"Contacto" por correo electrónico. Tan pronto como los textos relevantes serán eliminados del contenido del sitio web.


Política de Privacidad

Los proveedores, incluido Google, utilizan cookies para mostrar anuncios relevantes ateniéndose las visitas anteriores de un usuario a su sitio web o a otros sitios web. El uso de cookies de publicidad permite a Google y a sus socios mostrar anuncios basados en las visitas realizadas por los usuarios a sus sitios web o a otros sitios web de Internet. Los usuarios pueden inhabilitar la publicidad personalizada. Para ello, deberán acceder a Preferencias de anuncios. (También puede explicarles que, si no desean que otros proveedores utilicen las cookies para la publicidad personalizada, deberán acceder a www.aboutads.info.)