Articles of micro optimización

¿Qué métodos se pueden usar para extender eficientemente la duración de la instrucción en x86 moderno?

Imagine que desea alinear una serie de instrucciones de ensamblaje x86 con ciertos límites. Por ejemplo, es posible que desee alinear los bucles en un límite de 16 o 32 bytes, o las instrucciones del paquete para que se coloquen de manera eficiente en el caché uop o lo que sea. La forma más sencilla […]

¿Cuál es la forma más rápida de encontrar si un número es par o impar?

¿Cuál es la forma más rápida de encontrar si un número es par o impar?

¿Cuál es la mejor opción para dividir un número entero por 2?

¿Cuál de las siguientes técnicas es la mejor opción para dividir un número entero por 2 y por qué? Técnica 1: x = x >> 1; Técnica 2: x = x / 2; Aquí x es un número entero.

¿Cuándo, si es que alguna vez, el bucle sigue siendo útil?

He estado tratando de optimizar algún código extremadamente crítico para el rendimiento (un algoritmo de clasificación rápida que se llama millones y millones de veces dentro de una simulación de monte carlo) al desenrollar el bucle. Aquí está el ciclo interno que estoy tratando de acelerar: // Search for elements to swap. while(myArray[++index1] < pivot) […]

¿Debo usar el String.format () de Java si el rendimiento es importante?

Tenemos que construir cadenas todo el tiempo para la salida de registro, etc. Sobre las versiones de JDK hemos aprendido cuándo usar StringBuffer (muchos anexos, seguridad de subprocesos) y StringBuilder (muchos anexos, no seguros para subprocesos). ¿Cuál es el consejo sobre el uso de String.format() ? ¿Es eficiente, o nos vemos obligados a seguir con […]

Alineación de bifurcación para bucles que implican instrucciones microcodificadas en CPU de la familia Intel SnB

Esto está relacionado, pero no es lo mismo, con esta pregunta: optimizaciones del rendimiento del ensamblaje x86-64: alineación y predicción de bifurcación y está ligeramente relacionado con mi pregunta anterior: sin signo de conversión de 64 bits a doble: por qué este algoritmo de g ++ El siguiente es un caso de prueba no real […]

¿Qué debería saber todo progtwigdor sobre la memoria?

Me pregunto cuánto de Ulrich Drepper es lo que todo progtwigdor debería saber sobre la memoria de 2007 sigue siendo válido. Además, no pude encontrar una versión más nueva que 1.0 o una errata.

¿Por qué los bucles siempre se comstackn en el estilo “do … while” (salto de cola)?

Al tratar de comprender el ensamblado (con la optimización del comstackdor activada), veo este comportamiento: Un ciclo muy básico como este outside_loop; while (condition) { statements; } A menudo se comstack en (pseudocódigo) ; outside_loop jmp loop_condition ; unconditional loop_start: loop_statements loop_condition: condition_check jmp_if_true loop_start ; outside_loop Sin embargo, si la optimización no está activada, […]

¿Por qué mulss toma solo 3 ciclos en Haswell, diferente de las tablas de instrucciones de Agner?

Soy un novato en la optimización de instrucciones. Hice un análisis simple sobre una función simple dotp que se usa para obtener el producto escalar de dos matrices flotantes. El código C es el siguiente: float dotp( const float x[], const float y[], const short n ) { short i; float sum; sum = 0.0f; […]

Pruebe si un registro es cero con CMP reg, 0 frente a OR reg, reg?

¿Hay alguna diferencia de velocidad de ejecución usando el siguiente código? cmp al, 0 je done y lo siguiente: or al, al jz done Sé que las instrucciones JE y JZ son las mismas, y también que el uso de OR mejora el tamaño de un byte. Sin embargo, también me preocupa la velocidad del […]