ขอเริ่มจากสรุปคร่าวๆถึงการพัฒนา CPU ในระยะ 3 ปีมานี้... AMD เน้นเพิ่มคอร์อย่างมาก จน Intel ต้องยอมเพิ่มคอร์มาแข่งด้วย แต่ Intel ก็ยังพยายามจะไม่เพิ่มคอร์ โดยใน CPU รุ่นต่อๆไปจะสู้ด้วย AVX ที่กว้างขึ้นแทน (Ice Lake เป็นต้นไปจะรองรับ AVX 512 บิต)
2020-01-26 Zen IPC.jpg
อย่างที่ทราบกัน ว่าการพัฒนา CPU ให้เพิ่มคล็อกได้สูงๆนั้นทำได้ยาก แต่ละเจนเพิ่มคล็อกได้แค่นิดหน่อย ส่วนการปรับปรุงสถาปัตยกรรมให้มี IPC สูงขึ้นก็ไม่ง่ายเช่นกัน เพราะมันคือการมองหาจุดที่เป็นคอขวดใน CPU แล้วปรับปรุงมัน โดยต้องระวังไม่ไปสร้างคอขวดอื่นๆเพิ่มเข้ามา และระวังไม่ให้เพิ่มพื้นที่ Die หรือเพิ่มการใช้พลังงานมากเกินไป และถึงแม้จะทำสำเร็จด้วยดี ก็ยากจะเพิ่มสมรรถนะในแบบก้าวกระโดด (ยกเว้นบางยุคเช่น Excavator --> Zen ที่เปลี่ยนสถาปัตยกรรมใหม่ โดยตั้งเป้าเพิ่ม IPC ไว้ถึง 40% แต่ทำได้ทะลุเป้าที่ 52%) สุดท้ายก็มาสู่วิธีที่โปรแกรมเมอร์ต่างไม่ชอบ นั่นคือ "เพิ่มคอร์" กับ "เพิ่มชุดคำสั่ง"
2020-01-26 Multithread.jpg
ทั้งสองวิธีคือความพยายามที่จะรองรับการประมวลผลแบบขนาน โดยการเพิ่มคอร์จะขนานในแบบ Task-level โดยแบ่งงานออกเป็นงานย่อยๆแล้วประมวลผลไปพร้อมๆกัน ส่วนการเพิ่มชุดคำสั่งจะขนานในแบบ Instruction-level โดยเมื่อจัดข้อมูลเป็นชุดๆตามรูปแบบที่รองรับ (เช่น AVX ก็ต้องจัดข้อมูลในรูปเวกเตอร์) จะทำให้ประมวลผลข้อมูล "ทั้งชุด" ได้ในคำสั่งเดียว จากเดิมที่ต้องประมวลผลข้อมูลทีละตัว ซึ่งทั้งการเพิ่มคอร์และชุดคำสั่งต่างก็เพิ่มสมรรถนะได้มหาศาล แต่ก็ต้องแลกมาด้วยความเครียดของโปรแกรมเมอร์ที่ต้องเขียนโปรแกรมให้รองรับมัน และแก้บักที่เกิดจากมัน
แล้วคุณคิดว่าวิธีไหนดูจะมีอนาคตมากกว่ากัน?
2020-01-26 Zen IPC.jpg
อย่างที่ทราบกัน ว่าการพัฒนา CPU ให้เพิ่มคล็อกได้สูงๆนั้นทำได้ยาก แต่ละเจนเพิ่มคล็อกได้แค่นิดหน่อย ส่วนการปรับปรุงสถาปัตยกรรมให้มี IPC สูงขึ้นก็ไม่ง่ายเช่นกัน เพราะมันคือการมองหาจุดที่เป็นคอขวดใน CPU แล้วปรับปรุงมัน โดยต้องระวังไม่ไปสร้างคอขวดอื่นๆเพิ่มเข้ามา และระวังไม่ให้เพิ่มพื้นที่ Die หรือเพิ่มการใช้พลังงานมากเกินไป และถึงแม้จะทำสำเร็จด้วยดี ก็ยากจะเพิ่มสมรรถนะในแบบก้าวกระโดด (ยกเว้นบางยุคเช่น Excavator --> Zen ที่เปลี่ยนสถาปัตยกรรมใหม่ โดยตั้งเป้าเพิ่ม IPC ไว้ถึง 40% แต่ทำได้ทะลุเป้าที่ 52%) สุดท้ายก็มาสู่วิธีที่โปรแกรมเมอร์ต่างไม่ชอบ นั่นคือ "เพิ่มคอร์" กับ "เพิ่มชุดคำสั่ง"
2020-01-26 Multithread.jpg
ทั้งสองวิธีคือความพยายามที่จะรองรับการประมวลผลแบบขนาน โดยการเพิ่มคอร์จะขนานในแบบ Task-level โดยแบ่งงานออกเป็นงานย่อยๆแล้วประมวลผลไปพร้อมๆกัน ส่วนการเพิ่มชุดคำสั่งจะขนานในแบบ Instruction-level โดยเมื่อจัดข้อมูลเป็นชุดๆตามรูปแบบที่รองรับ (เช่น AVX ก็ต้องจัดข้อมูลในรูปเวกเตอร์) จะทำให้ประมวลผลข้อมูล "ทั้งชุด" ได้ในคำสั่งเดียว จากเดิมที่ต้องประมวลผลข้อมูลทีละตัว ซึ่งทั้งการเพิ่มคอร์และชุดคำสั่งต่างก็เพิ่มสมรรถนะได้มหาศาล แต่ก็ต้องแลกมาด้วยความเครียดของโปรแกรมเมอร์ที่ต้องเขียนโปรแกรมให้รองรับมัน และแก้บักที่เกิดจากมัน
แล้วคุณคิดว่าวิธีไหนดูจะมีอนาคตมากกว่ากัน?

Comment