Me he dado cuenta de que varios de mis cálculos de subprocesos múltiples se ejecutan más rápido si desactivo el subprocesamiento en el BIOS.¿Deshabilitar hyperthreading vs. cambiar ProcessorAffinity?
También he aprendido que mediante programación puedo desactivar la CPU (lógico): s mediante la modificación de la afinidad del procesador para el proceso actual, por ejemplo como este en C#:
// using System.Diagnostics;
var current = Process.GetCurrentProcess();
var affinity = current.ProcessorAffinity.ToInt32();
current.ProcessorAffinity = new IntPtr(affinity & 0x5555);
al menos desde un punto de rendimiento de vista, deshabilitar cada segundo (lógico) CPU al cambiar la afinidad del procesador tiene el mismo efecto que deshabilitar hyperthreading por completo?
Hmm, la cuestión clave es: ¿vas a enviar tu máquina de desarrollo junto con tu software? –
Otra consideración podrían ser los procesos del sistema operativo. Si desactiva hyperthreading en el BIOS y su software intenta utilizar todos los núcleos, cuando un sistema operativo (u otro proceso de fondo) intente ejecutarlo, competirá con su software para acceder al procesador. La mejor opción puede ser simplemente probar y comparar ambas opciones y ver qué diferencias encuentras en los tiempos del proceso; la diferencia puede ser intrascendente para permitir la facilidad de no deshabilitar hyperthreading. NOTA: Si no tiene control de hardware, verifique si hay procesadores AMD que tengan núcleos dedicados sin hyperthreading. –
Gracias, Chris, una respuesta muy útil. Haré más benchmarking para ver si alguna de las opciones marcará una verdadera diferencia en un entorno de usuario normal. –