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 […]
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 […]
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 […]
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?
¿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 […]
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 […]
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?
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, […]
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 […]
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 […]