ไมโครโปรเซสเซอร์ในยุคปัจจุบันและในอนาคต ภารุจ รัตนวรพันธุ์
จำนวนทรานซิสเตอร์บนชิปวงจรรวมเพิ่มเป็นสองเท่าทุกๆ 2 ปี Moore’s Law จำนวนทรานซิสเตอร์บนชิปวงจรรวมเพิ่มเป็นสองเท่าทุกๆ 2 ปี “Cramming More Components onto Integrated Circuits” Gordon Moore, Electronics, 1965
30 ปีในวงการสถาปัตยกรรมคอมพิวเตอร์ เก็บเกี่ยวผลประโยชน์จาก Moore’s Law อย่างเต็มที่เพื่อเพิ่มความเร็วของโปรเซสเซอร์ ใช้ทรานซิสเตอร์ในการสร้างไมโครโปรเซสเซอร์ที่มีความซับซ้อนแต่ประสิทธิภาพสูง เพิ่มความเร็วของสัญญาณนาฬิกา (ความเร็วของโปรเซสเซอร์เพิ่มเป็นสองเท่าๆทุกๆ 1.5 ปี) โปรแกรมหลายๆอันทำงานได้เร็วขึ้นโดยที่โปรแกรมเมอร์เพียงรอเวลาให้โปรเซสเซอร์รุ่นใหม่ๆออกมา Moore’s Law มีทีท่าว่าจะคงต่อไป แต่การเก็บเกี่ยวผลประโยชน์จาก Moore’s Law ด้วยวิธีเดิมๆที่เราทำกันมาจะทำไม่ได้อีก
(คำกล่าวของ Dave Patterson) 3 กำแพงกั้น Memory Wall เราได้พูดกันไปแล้วถึงช่องว่างระหว่างความเร็วของโปรเซสเซอร์กับหน่วยความจำ แก้โดยเพิ่ม cache ถ้า working set โปรแกรมอยู่ใน cache ได้จะเร็วมาก แต่โปรแกรมเมอร์ต้องทำให้โปรแกรม cache-friendly ILP Wall (Instruction-Level Parallelism) Power Wall Memory + ILP + Power Wall = Brick Wall (คำกล่าวของ Dave Patterson)
Matrix Multiplication /* ijk */ for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum; } /* kij */ for (k=0; k<n; k++) { for (i=0; i<n; i++) { r = a[i][k]; for (j=0; j<n; j++) c[i][j] += r * b[k][j]; } Not So Cache-Friendly More Cache-Friendly
Blocked Matrix Multiplication c = (double *) calloc(sizeof(double), n*n); /* Multiply n x n matrices a and b */ void mmm(double *a, double *b, double *c, int n) { int i, j, k; for (i = 0; i < n; i+=B) for (j = 0; j < n; j+=B) for (k = 0; k < n; k+=B) /* B x B mini matrix multiplications */ for (i1 = i; i1 < i+B; i1++) for (j1 = j; j1 < j+B; j1++) for (k1 = k; k1 < k+B; k1++) c[i1*n+j1] += a[i1*n + k1]*b[k1*n + j1]; }
แนวโน้มของสมรรถนะของไมโครโปรเซสเซอร์
เทคนิคที่ใช้เพิ่มความเร็วของโปรเซสเซอร์ เพิ่ม functional units และใช้เทคนิค out-of-order execution ตัวโปรแกรมที่รันมี ILP ระดับนึง เมื่อถึงจุดนึงก็ต้องทำงานแบบอนุกรม ปัจจุบันนี้เชื่อกันว่าเราได้บีบจนหยดสุดท้ายของ ILP แล้ว เพิ่ม pipeline stages ทำให้เพิ่มความถี่ clock ได้สูงขึ้น เพิ่ม penalty เวลา branch mispredict เพิ่ม penalty เวลา cache miss โปรเซสเซอร์ปัจจุบันมีประมาณ 9-11 stages
ความถี่ของสัญญาณนาฬิกา กราฟแสดงการเพิ่มของความถี่สัญญาณนาฬิกาในช่วง 3 ทศวรรษที่ผ่านมา แต่ก่อน ความถี่สัญญาณนาฬิกาเพิ่ม 2 เท่าทุกๆ 1.5 ปี ปัจจุบัน ทำไม่ได้อย่างแต่ก่อนเพราะปัญหาเรื่องการระบายความร้อน
กระแสรั่วไหล (Leakage Current) 15 Very High Leakage and Power Static Current Fast, High Power Embedded Parts Fast, Low Power Frequency 1.0 1.5 กระแสรั่วไหลเพิ่มแบบไม่เป็นเส้นตรงกับความถี่สัญญาณนาฬิกา
Power Density Rocket Nozzle Nuclear Reactor Hot Plate 10000 1000 100 Power Density (W/cm2) Pentium III ® 8086 Hot Plate Pentium II ® 10 4004 8008 8085 Pentium® 386 286 486 8080 Source: Patrick Gelsinger, Intel 1 1970 1980 1990 2000 2010 Year
ถ้าพังกำแพงไม่ได้ก็ปีนกำแพงข้ามไป เพิ่มจำนวนโปรเซสเซอร์ในหนึ่งชิป ไม่ต้องเพิ่มความถี่สัญญาณนาฬิกา ไม่ต้องใช้เทคนิคเพิ่มความเร็วแบบใหม่ๆ ผลักภาระกลับไปให้โปรแกรมเมอร์ ต้องเพิ่มสมรรถนะด้วยตัวโปรแกรมที่เขียนขึ้นมา (from Saman Amarasinghe, MIT)