Varios procesadores
Normalmente, los equipos con varios procesadores están diseñados para una de estas dos arquitecturas: acceso a memoria no uniforme (NUMA) o multiprocesamiento simétrico (SMP).
En un equipo NUMA, cada procesador está más cerca de algunas partes de memoria que otras, lo que hace que el acceso a la memoria sea más rápido para algunas partes de memoria que otras partes. En el modelo NUMA, el sistema intenta programar subprocesos en procesadores que están cerca de la memoria que se usa. Para obtener más información sobre NUMA, consulte Compatibilidad con NUMA.
En un equipo SMP, dos o más procesadores o núcleos idénticos se conectan a una sola memoria principal compartida. En el modelo SMP, cualquier subproceso se puede asignar a cualquier procesador. Por lo tanto, programar subprocesos en un equipo SMP es similar a programar subprocesos en un equipo con un único procesador. Sin embargo, el programador tiene un grupo de procesadores para que pueda programar subprocesos para que se ejecuten simultáneamente. La programación sigue determinada por la prioridad del subproceso, pero se puede influir estableciendo afinidad de subproceso y procesador ideal para subprocesos, como se describe en este tema.
Afinidad de subproceso
La afinidad de subproceso obliga a que un subproceso se ejecute en un subconjunto específico de procesadores. Por lo general, se debe evitar establecer la afinidad de subproceso, ya que puede interferir con la capacidad del programador de programar subprocesos de forma eficaz entre los procesadores. Esto puede reducir las ganancias de rendimiento generadas por el procesamiento paralelo. Un uso adecuado de la afinidad de subproceso está probando cada procesador.
El sistema representa la afinidad con una máscara de bits denominada máscara de afinidad de procesador. La máscara de afinidad es el tamaño del número máximo de procesadores del sistema, con bits establecidos para identificar un subconjunto de procesadores. Inicialmente, el sistema determina el subconjunto de procesadores de la máscara.
Puede obtener la afinidad de subproceso actual para todos los subprocesos del proceso llamando a la función GetProcessAffinityMask . Use la función SetProcessAffinityMask para especificar la afinidad de subproceso para todos los subprocesos del proceso. Para establecer la afinidad de subproceso para un único subproceso, use la función SetThreadAffinityMask . La afinidad de subproceso debe ser un subconjunto de la afinidad de proceso.
En los sistemas con más de 64 procesadores, la máscara de afinidad representa inicialmente procesadores en un único grupo de procesadores. Sin embargo, la afinidad de subproceso se puede establecer en un procesador de otro grupo, que modifica la máscara de afinidad para el proceso. Para obtener más información, consulte Grupos de procesadores.
Procesador ideal para subprocesos
Cuando se especifica un procesador ideal para subprocesos, el programador ejecuta el subproceso en el procesador especificado siempre que sea posible. Use la función SetThreadIdealProcessor para especificar un procesador preferido para un subproceso. Esto no garantiza que se elija el procesador ideal, pero proporciona una sugerencia útil para el programador. En los sistemas con más de 64 procesadores, puede usar la función SetThreadIdealProcessorEx para especificar un procesador preferido en un grupo de procesadores específico.
Temas relacionados