“Algunas personas se relajan con una buena bebida junto a la piscina, yo me relajo jugando con [código ensamblador] en línea”, como una buena cita del día, como explicó Linus Torvalds después de que asumió la mejora de un parche de optimización del rendimiento que se propuso para la ventana de combinación de Linux 6.5 en curso.
Ese parche de optimización de rendimiento para csum_partial se envió hoy a través de x86/solicitud de extracción miscelánea. Mientras Linus Torvalds revisaba el código, comentó en la lista de correo:
“Honestamente, mirando ese parche, mi reacción es”¿por qué se desplegó en fragmentos de 64 bytes, si 40 bytes es el valor mágico”?
Especialmente cuando hay que”hacer un carry op cada 32 bytes para hacer que los fragmentos de 32 bytes sean independientes y aumentar el ILP”. Así que incluso el caso de 64 bytes no es *realmente* haciendo un desenrollado de 64 bytes, en realidad está haciendo dos desenrollados de 32 bytes en paralelo.
Así que tiene tres valores”mágicos”y el el único que realmente importa es probablemente el de 40 bytes.
Sí, sí, 64 bytes es el tamaño habitual de caché y es”tradicional”para desenrollar. Pero no hay nada realmente mágico al respecto aquí.
Resultado final: ¿no hubiera sido bueno hacer solo fragmentos de 40 bytes y hacer que los”dos fragmentos de 32 bytes superpuestos”de 64 bytes fueran dos de los fragmentos de 40 bytes?
¿Algo como el parche adjunto (¡TOTALMENTE NO PROBADO!)?
Otra vez: esto *no* está probado. Eché un vistazo rápido al ensamblaje generado y se parecía más o menos a lo que esperaba, pero puede ser una completa basura.
Agregué un par de cosas”probables()”solo porque hizo que el ASM generado pareciera más natural (es decir, siguió el orden del código fuente allí), de lo contrario, son anotaciones cuestionables.
Finalmente: ¿ya mencioné que esto no se ha probado en absoluto?”
Después de enviar ese mensaje, se dio cuenta de un simple error en su código ensamblado escrito a mano y agregado:
“… Me di cuenta de esto mirando el parche una vez más. No se han realizado *pruebas* reales. Todavía podría ser basura con errores incluso con ese”+r”. Es solo un poco * menos * basura con errores.
Ahora regresaré a mi cueva y continuaré sacando cosas, solo tenía que hacer otra cosa por un tiempo. Algunas personas se relajan con una buena bebida junto a la piscina, yo me relajo jugando con asm en línea”.
Linus Torvalds terminó fusionando el parche de optimización csum_partial original mientras su versión se somete a más comentarios/discusiones.
Ingeniero de AMD Linux Borislav Petkov que administró la solicitud de extracción x86/misc respondió al mensaje de Linus Torvalds con:
“Y hay un tercer tipo que se relaja junto a la piscina con una buena bebida, *mientras* juega con un asm en línea. ;-P”