Escribir en conjunto no le daría un aumento mágico de la velocidad, ya que debido a la cantidad de detalles (asignación de registros, etc.) probablemente escribirá el algoritmo más trivial de la historia.
Además, con los procesadores modernos (leídos - diseñados después de los años 70-80), el ensamblaje no le proporcionará una cantidad suficiente de detalles para saber qué está sucediendo (es decir, en la mayoría de los procesadores). Las PU modernas (CPU y GPU) son bastante complejas en lo que respecta a las instrucciones de programación. Conocer los conceptos básicos de ensamblaje (o seudoensamblaje) permitirá comprender los libros / cursos de arquitectura de computadoras que proporcionarían más conocimientos (cachés, ejecución fuera de orden, MMU, etc.). Por lo general, no necesita conocer ISA complejo para comprenderlos (MIPS 5 es un IIRC bastante popular).
¿Por qué entender procesador? Podría darte mucha más comprensión de lo que está sucediendo. Digamos que escribes multiplicación matricial de manera ingenua:
for i from 0 to N
for j from 0 to N
for k from 0 to N
A[i][j] += B[i][k] + C[k][j]
Puede ser 'lo suficientemente bueno' para su propósito (si es una matriz 4x4, podría compilarse de todas formas con instrucciones vectoriales). Sin embargo, hay programas bastante importantes cuando compila matrices masivas: ¿cómo optimizarlas? Si escribe el código en ensamblado, podría tener un pequeño porcentaje de mejora (a menos que haga lo que la mayoría de la gente hace, también de manera ingenua, subutilizando registros, cargando / almacenando en la memoria constantemente y, de hecho, teniendo un programa más lento que en lenguaje HL) .
Sin embargo, puede revertir las líneas y ganar rendimiento mágicamente (¿por qué? Lo dejo como 'tarea'): IIRC, dependiendo de varios factores para matrices grandes, puede ser incluso 10x.
for i from 0 to N
for k from 0 to N
for j from 0 to N
A[i][j] += B[i][k] + C[k][j]
Dicho esto, se está trabajando en que los compiladores puedan hacerlo ( grafito para gcc y Polly para cualquier cosa que use LLVM). Incluso son capaces de transformarlo en (lo siento, estoy escribiendo bloqueo de memoria):
for i from 0 to N
for K from 0 to N/n
for J from 0 to N/n
for kk from 0 to n
for jj from 0 to n
k = K*n + kk
j = J*n + jj
A[i][j] += B[i][k] + C[k][j]
Para resumir: conocer los conceptos básicos de un ensamblaje le permite profundizar en varios 'detalles' del diseño del procesador que le permitiría escribir programas más rápidos. Puede ser bueno saber las diferencias entre las arquitecturas RISC / CISC o VLIW / procesador vectorial / SIMD / ... Sin embargo, no comenzaría con x86, ya que tienden a ser bastante complicados (posiblemente ARM también): saber lo que es un registro, etc. es IMHO suficiente para comenzar.