การเขียนในแอสเซมบลีจะไม่ให้ความเร็วเพิ่มขึ้นเนื่องจากจำนวนรายละเอียด (การจัดสรรการลงทะเบียน ฯลฯ ) คุณอาจจะเขียนอัลกอริธึมที่ไม่สำคัญที่สุด
นอกจากนี้ด้วยชุดตัวประมวลผลที่ทันสมัย (อ่าน - ออกแบบหลังจาก 70-80) จะไม่ให้รายละเอียดจำนวนมากพอที่จะรู้ว่าเกิดอะไรขึ้น (นั่นคือ - ในตัวประมวลผลส่วนใหญ่) PU สมัยใหม่ (ซีพียูและ GPU) ค่อนข้างซับซ้อนเท่าที่คำแนะนำในการกำหนดตารางเวลาดำเนินไป การรู้พื้นฐานของแอสเซมบลี (หรือ pseudoassembly) จะช่วยให้เข้าใจหนังสือ / หลักสูตรสถาปัตยกรรมคอมพิวเตอร์ซึ่งจะให้ความรู้เพิ่มเติม (แคชการดำเนินการนอก MMO ฯลฯ ) โดยปกติแล้วคุณไม่จำเป็นต้องรู้จัก ISA ที่ซับซ้อนเพื่อทำความเข้าใจกับมัน (MIPS 5 ค่อนข้างเป็นที่นิยม IIRC)
ทำไมต้องเข้าใจโปรเซสเซอร์ มันอาจทำให้คุณเข้าใจมากขึ้นว่าเกิดอะไรขึ้น สมมติว่าคุณเขียนการคูณเมทริกซ์แบบไร้เดียงสา:
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]
มันอาจจะ 'ดีพอ' สำหรับจุดประสงค์ของคุณ (ถ้าเป็นเมทริกซ์ 4x4 มันอาจถูกคอมไพล์ไปยังคำแนะนำเวกเตอร์ต่อไป) อย่างไรก็ตามมีโปรแกรมที่สำคัญมากเมื่อคุณรวบรวมอาร์เรย์ขนาดใหญ่ - วิธีเพิ่มประสิทธิภาพพวกเขา? หากคุณเขียนรหัสในชุดประกอบคุณอาจมีการปรับปรุงเพียงไม่กี่% (เว้นแต่ว่าคุณจะทำเหมือนคนส่วนใหญ่ - ในทางที่ไร้เดียงสา, การลงทะเบียนต่ำกว่าปกติ, โหลด / จัดเก็บไปยังหน่วยความจำอย่างต่อเนื่อง .
อย่างไรก็ตามคุณสามารถย้อนกลับบรรทัดหลักและเพิ่มประสิทธิภาพได้อย่างน่าอัศจรรย์ (เพราะเหตุใดฉันจึงปล่อยให้มันเป็น 'การบ้าน') - IIRC ขึ้นอยู่กับปัจจัยต่าง ๆ สำหรับการฝึกอบรมขนาดใหญ่
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]
ที่กล่าวว่า - มีการทำงานกับคอมไพเลอร์ที่สามารถทำได้ ( กราไฟท์สำหรับ gcc และพอลลี่สำหรับทุกสิ่งที่ใช้ LLVM) พวกเขาสามารถแปลงให้เป็น (ขออภัย - ฉันกำลังเขียนบล็อกจากหน่วยความจำ):
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]
เพื่อสรุป - รู้พื้นฐานของแอสเซมบลีช่วยให้คุณสามารถขุด 'รายละเอียด' ต่าง ๆ จากการออกแบบโปรเซสเซอร์ซึ่งจะช่วยให้คุณสามารถเขียนโปรแกรมได้เร็วขึ้น มันอาจเป็นการดีที่จะทราบความแตกต่างระหว่างสถาปัตยกรรม RISC / CISC หรือ VLIW / vector processor / SIMD / ... อย่างไรก็ตามฉันจะไม่เริ่มต้นด้วย x86 เนื่องจากพวกเขามีแนวโน้มที่จะค่อนข้างซับซ้อน (อาจเป็น ARM ด้วย) - การรู้ว่าอะไรคือ register เป็นต้น IMHO นั้นเพียงพอสำหรับการเริ่มต้น