Montajda yazmanız, ayrıntıların miktarına bağlı olarak size hızda sihirli bir artış sağlamaz (kayıt tahsisi vb.) Muhtemelen şimdiye kadarki en önemsiz algoritmayı yazacaksınız.
Ek olarak, modern (70-80'lerden sonra okunan tasarımlı) işlemciler montajı size neler olduğunu (çoğu işlemcide) ne olduğunu bilmek için yeterli sayıda ayrıntı vermeyecektir. Modern PU (CPU ve GPU'lar), zamanlama talimatlarının yürüdüğü kadar karmaşıktır. Montajın (veya sözde montajın) temellerini bilmek, daha fazla bilgi sağlayacak bilgisayar mimarisi kitapları / kurslarını (önbellek, sıra dışı çalıştırma, MMU vb.) Anlamayı sağlayacaktır. Genellikle onları anlamak için karmaşık ISA'yı bilmeniz gerekmez (MIPS 5 oldukça popülerdir IIRC).
Neden işlemci anlamak? Neler olup bittiğini anlamanız size daha fazla bilgi verebilir. Diyelim ki matris çarpımını saf bir şekilde yazdınız:
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]
Amacınız için 'yeterince' iyi olabilir (4x4 matris ise, yine de vektör talimatlarıyla derlenebilir). Ancak, büyük dizileri derlerken oldukça önemli programlar var - bunları nasıl optimize edersiniz? Kodu derleme bölümüne yazarsanız, iyileştirmenin% birkaçına sahip olabilirsiniz (çoğu kişinin yapacağı gibi yapmazsanız - naif bir şekilde, kayıtları yetersiz kullanmak, sürekli belleğe yüklemek / saklamak ve daha sonra HL dilinde daha yavaş programa sahip olmak) .
Bununla birlikte, tho satırlarını tersine çevirebilir ve sihirli bir performans elde edebilirsiniz (neden? Bunu 'ev ödevi' olarak bırakıyorum) - IIRC, büyük matrisler için çeşitli faktörlere bağlı olarak 10x bile olabilir.
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]
Dedi - bunu yapmak mümkün derleyiciler üzerinde çalışıyoruz ( LLVM kullanarak herhangi bir şey için gcc ve Polly için grafit ). Hatta bunu dönüştürebiliyorlar bile (üzgünüm - bellekten engelleme yazıyorum):
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]
Özetlemek gerekirse - bir montajın temellerini bilmek, işlemci tasarımından daha hızlı programlar yazmanıza olanak tanıyan çeşitli 'ayrıntılara' bakmanıza olanak tanır. RISC / CISC veya VLIW / vektör işlemci / SIMD / ... mimarileri arasındaki farkları bilmek iyi olabilir. Ancak x86 ile başlamayacağım çünkü oldukça karmaşık olma eğilimindedirler (muhtemelen ARM de) - bir sicilin ne olduğunu bilmek vb. Başlangıç için IMHO yeterlidir.