Viết trong lắp ráp sẽ không cung cấp cho bạn sự gia tăng tốc độ kỳ diệu do số lượng chi tiết (phân bổ đăng ký, v.v.) có thể bạn sẽ viết thuật toán tầm thường nhất từng có.
Ngoài ra, với bộ xử lý hiện đại (đọc - được thiết kế sau 70-80) sẽ không cung cấp cho bạn đủ số lượng chi tiết để biết điều gì đang xảy ra (nghĩa là - trên hầu hết các bộ xử lý). PU hiện đại (CPU và GPU) khá phức tạp theo hướng dẫn lập lịch. Biết các kiến thức cơ bản về lắp ráp (hoặc giả) sẽ cho phép hiểu các sách / khóa học về kiến trúc máy tính sẽ cung cấp thêm kiến thức (bộ nhớ cache, thực hiện không theo thứ tự, MMU, v.v.). Thông thường, bạn không cần biết ISA phức tạp để hiểu chúng (MIPS 5 khá phổ biến IIRC).
Tại sao hiểu bộ xử lý? Nó có thể giúp bạn hiểu nhiều hơn những gì đang diễn ra. Giả sử bạn viết phép nhân ma trận theo cách ngây thơ:
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]
Nó có thể là 'đủ tốt' cho mục đích của bạn (nếu là ma trận 4 x 4 thì nó có thể được biên dịch thành các hướng dẫn vectơ). Tuy nhiên, có những chương trình khá quan trọng khi bạn biên dịch các mảng lớn - làm thế nào để tối ưu hóa chúng? Nếu bạn viết mã trong hội đồng, bạn có thể có một vài% cải thiện (trừ khi bạn sẽ làm như hầu hết mọi người làm - cũng theo cách ngây thơ, sử dụng không đúng các thanh ghi, tải / lưu trữ vào bộ nhớ liên tục và thực tế là có chương trình chậm hơn bằng ngôn ngữ HL) .
Tuy nhiên, bạn có thể đảo ngược các dòng tho và đạt được hiệu suất một cách kỳ diệu (tại sao? Tôi để nó là 'bài tập về nhà') - IIRC tùy thuộc vào các yếu tố khác nhau cho ma trận lớn, nó có thể thậm chí là 10 lần.
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]
Điều đó nói rằng - đang làm việc trên các trình biên dịch có thể làm điều đó ( than chì cho gcc và Polly cho bất cứ điều gì sử dụng LLVM). Họ thậm chí có khả năng biến nó thành (xin lỗi - tôi đang viết chặn khỏi bộ nhớ):
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]
Tóm lại - việc biết những điều cơ bản của một hội đồng cho phép bạn đào sâu vào nhiều 'chi tiết' khác nhau từ thiết kế bộ xử lý cho phép bạn viết các chương trình nhanh hơn. Có thể là tốt để biết sự khác biệt giữa các kiến trúc RISC / CISC hoặc VLIW / vector / SIMD / .... Tuy nhiên tôi sẽ không bắt đầu với x86 vì chúng có xu hướng khá phức tạp (có thể cả ARM nữa) - biết đăng ký là gì, vv là IMHO đủ để bắt đầu.