Articles of ensamblaje de

Código de auto modificación siempre fallas de segmentación en Linux

Encontré un artículo sobre el código de auto modificación e intenté hacer algunos ejemplos, pero siempre recibo fallas de segmentación. Hasta donde puedo entender, hay una violación en los permisos de memoria. El segmento de código es (r) ead / e (x) ecute y, por lo tanto, el bash de escribir da como resultado este […]

Rendimiento inesperadamente pobre y extrañamente bimodal para el bucle de la tienda en Intel Skylake

Estoy viendo un rendimiento inesperadamente bajo para un simple bucle de tienda que tiene dos tiendas: una con un avance de 16 bytes y otra que siempre está en la misma ubicación 1 , como esta: volatile uint32_t value; void weirdo_cpp(size_t iters, uint32_t* output) { uint32_t x = value; uint32_t *rdx = output; volatile uint32_t […]

Optimizaciones de rendimiento del ensamblaje x86-64 – Alineación y predicción de bifurcación

Actualmente estoy codificando versiones altamente optimizadas de algunas funciones de cadenas de biblioteca estándar C99, como strlen() , memset() , etc., utilizando el ensamblaje x86-64 con instrucciones SSE-2. Hasta ahora he logrado obtener excelentes resultados en términos de rendimiento, pero a veces obtengo un comportamiento extraño cuando trato de optimizar más. Por ejemplo, agregar o […]

¿Dónde puedo encontrar el código fuente de la llamada del sistema?

En Linux, ¿dónde puedo encontrar el código fuente para todas las llamadas al sistema dado que tengo el árbol de fonts? Además, si tuviera que buscar el código fuente y el ensamblaje para una llamada al sistema en particular ¿hay algo que pueda escribir en terminal como -my_system_call?

¿Ejemplos de captura previa?

¿Alguien puede dar un ejemplo o un enlace a un ejemplo que utiliza __builtin_prefetch en GCC (o simplemente la instrucción asm prefetcht0 en general) para obtener una ventaja de rendimiento sustancial? En particular, me gustaría que el ejemplo cumpla con los siguientes criterios: Es un ejemplo simple, pequeño e independiente. Al eliminar la instrucción __builtin_prefetch […]

x86_64 – Ensamblaje – condiciones de lazo y fuera de servicio

No estoy pidiendo un punto de referencia. ( Si ese fuera el caso, lo habría hecho yo mismo ) . Mi pregunta: Tiendo a evitar los modos de direccionamiento indirecto / indexado por conveniencia. Como reemplazo, a menudo uso el direccionamiento inmediato, absoluto o de registro. El código: ; %esi has the array address. Say […]

¿Cómo se usan los registros fs / gs en Linux AMD64?

En la architecture x86-64, dos registros tienen un propósito especial: FS y GS. En Linux 2.6. *, El registro FS parece usarse para almacenar información local de subprocesos. ¿Es eso correcto? ¿Qué se almacena en fs: 0? ¿Hay alguna estructura C que describa este contenido? ¿Cuál es entonces el uso de GS?

¿Qué configuración hace REP?

Citando el manual de referencia de optimización de architectures Intel® 64 e IA-32 , §2.4.6 “Mejora de cadena REP”: Las características de rendimiento del uso de cadena REP se pueden atribuir a dos componentes: sobrecarga de inicio y rendimiento de transferencia de datos. […] Para la cadena REP de mayor transferencia de datos de granularidad, […]

¿Por qué el SSE escalar sqrt (x) es más lento que rsqrt (x) * x?

He estado perfilando algunas de nuestras operaciones matemáticas centrales en un Intel Core Duo, y mientras observo varios enfoques de raíz cuadrada, he notado algo extraño: al usar las operaciones escalares SSE, es más rápido tomar una raíz cuadrada recíproca y multiplicarla para obtener el sqrt, de lo que es usar el código de operación […]

Bloquea la manipulación de la memoria a través del ensamblaje en línea

Soy nuevo en el tema de bajo nivel, así que no me doy cuenta de qué tipo de problemas podrías enfrentar y ni siquiera estoy seguro de entender el término “atómico” correcto. En este momento estoy tratando de hacer lockings atómicos simples en torno a la manipulación de memoria a través de ensamblaje extendido. ¿Por […]