การออกแบบสถาปัตยกรรมแบบ RISC โดยทั่วไป จะมีกฏเกณฑ์ดังนี้
· 1 คำสั่งต่อรอบสัญญาณนาฬิกา ( One Instruction per Cycle ) นับเป็นสิ่งแรกเลยที่นึกถึงในการออกแบบสถาปัตยกรรมแบบ RISC โดย จะพยายามทำงานให้เสร็จสิ้นภายใน 1 รอบสัญญาณนาฬิกา ( 1 Clock Cycle ) ซึ่งก็มีการใช้ pipeline มาช่วยในการทำงาน ดังนั้น ในการทำงานจริงๆ อาจไม่ใช่ทำงาน 1 คำสั่งเสร็จสิ้นใน 1 รอบสัญญาณนาฬิกา แต่ใช้การนับเวลาในการทำงานของโปรแกรม ซึ่งแน่นอน มีการทำงานหลายๆ คำสั่ง หลายๆ ขั้นตอน แล้วคิดเป็นเวลาเฉลี่ย ซึ่งก็จะได้ประมาณ 1 คำสั่งต่อ 1 รอบสัญญาณนาฬิกา
วิธีที่ใช้เพื่อทำให้ได้ 1 คำสั่งต่อรอบสัญญาณนาฬิกา จะทำโดยใช้คำสั่งง่ายๆ ธรรมดาๆ ไม่ใช่ เพิ่มรอบสัญญาณนาฬิกาให้นานขึ้น
· กำหนดขนาดของ Instruction ให้มีขนาดที่แน่นอน ( Fixed Instruction Length ) ถ้าหากว่าจะทำให้มีการทำงานแต่ละคำสั่งให้เสร็จสิ้นภายใน 1 รอบสัญญาณนาฬิกาได้นั้น ก็แน่นอน ผู้ออกแบบ RISC ก็จะต้องจำกัดขนาดของคำสั่งด้วย ไม่ให้มีขนาดที่ยาวเกินไป ซึ่งโดยปกติแล้วจะใช้ขนาด 1 Word ( จะมีขนาดไม่แน่นอน แล้วแต่เครื่อง แต่โดยทั่วๆไป CPU แบบ RISC จะมีขนาดของ Word = 32 Bit ) โดยใน 1 Word นั้น ก็จะกำหนดทุกๆอย่างทั้งคำสั่ง, Operation , จะดึง Operand จากที่ไหน , จะให้เก็บผลลัพธ์ ( Result ) ที่ไหน และ คำสั่งถัดไปอยู่ที่ไหน
C = A + B : A และ B คือ Operand , + คือ Operation และ C คือ Result
· คำสั่งในการเข้าถึงหน่วยความจำหลัก จะใช้แค่ load ( ดึงข้อมูล ) และ store ( เก็บข้อมูล ) เท่านั้น สถาปัตยกรรมแบบ RISC นั้น เมื่อจะทำการจัดการกับคำสั่งต่างๆ ก็จำเป็นจะต้องนำ Operand มาเก็บไว้ใน Register ก่อน และ ในแต่ละคำสั่งนั้น ก็ถูกจำกัดไว้ที่ 1 Word ซึ่งก็ไม่เพียงพอต่อการเก็บค่าของ Operand ต่างๆ ดังนั้นจึงใช้การอ้างตำแหน่งในหน่วยความจำแทน แต่ การเข้าถึงหน่วยความจำนั้นต้องเสียเวลาอยู่พอสมควร จึงมีการกำหนดให้ใช้เพียงแค่ 2 คำสั่งเท่านั้น คือการ load และ การ store เพื่อลด traffic ระหว่าง หน่วยประมวลผล และ หน่วยความจำ ส่วนเวลาในการ load หรือ store นั้น ก็ขึ้นอยู่กับขนาดของ Operand
· ใช้การอ้างตำแหน่งแบบตรงๆ ง่าย เพราะการอ้างแบบซับซ้อน ก็แน่นอน ต้องใช้ช่วงเวลานานกว่า ซึ่งการอ้างตำแหน่งแบบ RISC นั้นจะจำกัดอยู่ 2 แบบ คือ แบบอ้างผ่าน Register ( Register Indirect ) และ Index โดยการอ้างผ่าน Register นั้น Register จะเก็บค่าตำแหน่งไว้ แล้ว ทำการอ้าง ตำแหน่งนั้นๆผ่าน Register และในแบบ Index จะเป็นการอ้างตำแหน่งจากค่าคงที่ที่มาในคำสั่งนั้นๆเลย
· ใช้ Operation ที่เรียบง่าย ธรรมดาๆ และ มีไม่กี่ Operation เพื่อจะได้ใช้รอบการทำงานน้อยๆ และรวมไปถึงทรัพยากรของระบบที่ใช้ ก็จะใช้น้อยด้วย
ในส่วนของการออกแบบ CISC นั้น ดูเหมือนใช้หลักเกณฑ์ที่ตรงข้ามกับแบบของ RISC แทบจะทั้งหมด เพราะ ในขณะที่ RISC จะพยายามลดคำสั่งให้มีจำนวนน้อยๆ และ ไม่ซับซ้อน แต่ CISC จะพยายามให้มีรูปแบบของคำสั่งต่างๆ มากมาย และ ดูจะซับซ้อนมากขึ้นเรื่อยๆ ส่วนในเรื่องของคำสั่งการทำงานของ RISC นั้น ก็จะมีค่าเฉลี่ยเป็น 1 คำสั่งต่อ 1 สัญญาณนาฬิกา แต่ในขณะที่ CISC อาจใช้ถึง 100 สัญญาณนาฬิกา เพื่อให้ทำงานให้เสร็จ เพียง 1 คำสั่ง
CISC นั้น ก็จะมีจุดเด่น ในเรื่องของการเขียน Program บน CISC นั้น จะทำได้ง่ายกว่า เพราะโดยตัวของ Processor นั้นรู้จักคำสั่งต่างๆมากมาย ทำให้สะดวกต่อการเขียนโปรแกรมใช้งาน และ Program บน CISC นั้นก็มีขนาดเล็กกว่า บน RISC ( ด้วยเหตุผลเดียวกัน )
ต้องอย่าลืมว่า ต่อให้ Processor นั้นดีเพียงใด ก็ตามแต่หากว่า ไม่มีโปรแกรมมาสนับสนุน หรือเขียนโปรแกรมมาใช้งานบน Processor นั้นๆยาก ก็คงไม่มีคนเลือกใช้ Processor นั้นๆ เป็นแน่ หากว่า ผู้ออกแบบ CISC นั้น ออกแบบมาดี โปรแกรมบางอย่าง อาจทำได้เร็วกว่า RISC ด้วยซ้ำ เพราะมีการใช้คำสั่งที่น้อยกว่า ( เพราะมีการเตรียมคำสั่งต่างๆ ไว้จัดการแล้ว ) ตัวอย่างเช่น ต้องการหาผลลัพธ์ของ 7 คูณกับ 9
ถ้า RISC มีเพียงคำสั่ง บวก และ ลบ การจะหาผลลัพธ์ของ 7 คูณ 9 ก็คือ ต้องทำการบวก 7 เข้าด้วยกัน 9 ครั้ง สมมุติว่าแต่ละครั้งของการบวก จะใช้เวลา 1 สัญญาณนาฬิกา ก็จะใช้ถึง 9 สัญญาณนาฬิกา และแม้ว่า Compiler นั้นฉลาด ทำการเอา 9 มาบวกกัน 7 ครั้งแทน ก็จะใช้สัญญาณนาฬิกาที่ 7 สัญญาณนาฬิกา ถ้าเป็น CISC ซึ่งมีคำสั่งคูณไว้ให้แล้ว และ ใช้ 5 สัญญาณนาฬิกาในการคูณแต่ละครั้ง การหาผลลัพธ์ของ 7 คูณกับ 9 ก็จะทำได้ใน 5 สัญญาณนาฬิกาเท่านั้น แต่ในบางกรณี เช่น 4 คูณกับ 3 RISC นั้น จะใช้เวลาเพียง 3 หรือ 4 สัญญาณนาฬิกา แต่ CISC กลับต้องใช้ถึง 5 สัญญาณนาฬิกา
ในการเปรียบเทียบความเร็วและประสิทธิภาพของ RISC กับ CISC ทำได้ยาก เพราะ ต้องแล้วแต่งานที่ใช้ในการทดสอบเปรียบเทียบ ดังจะเห็นได้จากตัวอย่างข้างต้น เพียงแค่เปลี่ยนค่า Operand เท่านั้น ผลที่ได้ก็ต่างกันแล้ว เพราะฉะนั้น คำตอบสำหรับคำถามนี้ ก็คงตอบได้ยาก เพราะต้องแล้วแต่งาน และ โปรแกรมที่ใช้ และรวมไปถึงค่าต่างๆ ที่อ้างอิงถึงด้วย
ปัจจุบันนี้ Processor แบบ CISC นั้น นับวันก็ยิ่งมีความซับซ้อนของคำสั่ง แต่ก็เป็นเรื่องแปลก ที่ในขณะเดียวกัน CISC นั้น ก็ยิ่งมีรูปแบบออกไปทาง RISC ยิ่งขึ้น โดยส่วนหนึ่งนั้นก็มาจากการลดปัญหาเรื่อง ความเข้ากันได้ของ Processor รุ่นใหม่ๆ กับ Processor รุ่นเก่า ซึ่งดูเหมือนว่าการดัดแปลงคำสั่งสำหรับ Processor ตระกูล x86 ( CISC ) ให้เป็นชุดคำสั่งแบบ RISC ที่เล็กๆกว่า เร็วกว่า และ ง่ายขึ้น ผลลัพธ์ที่ได้ ก็คือ ชุดคำสั่งของ RISC สำหรับ Process ตระกูล x86 ( CISC ) ที่เรียกว่า ชุดคำสั่ง RISC86 และ ยิ่งนับวัน Processor แบบ CISC นั้น ก็มีการทำงานแบบ Pipeline และ แบบ Speculative Execution ( มีการคาดเดาล่วงหน้า ) ด้วย ซึ่งคุณลักษณะเหล่านี้ แต่เดิมนั้นพัฒนาอยู่บน RISC ส่วนในทางกลับกัน Processor แบบ RISC เองนั้น ก็เริ่มที่จะมีการใช้คำสั่งที่ซับซ้อนขึ้น และ มีหลากหลายคำสั่งมากขึ้น ซึ่งก็เหมือนว่าจะเบนไปทาง CISC เช่นกัน
สำหรับ Processor ที่ใช้สถาปัตยกรรมแบบ RISC นั้น ก็ได้แก่ SUN Sparc , IBM RS/6000 , Motorola 88000 ( เป็น Processor แบบ RISC ตัวแรกของ Motorola ) ส่วน Processor ที่ใช้สถาปัตยกรรมแบบ CISC นั้น ก็ได้แก่ Processor ตระกูล x86 ทั้งหลาย ทั้ง Intel 8088 เรื่อยมาจนถึงล่าสุด Pentium !!! , AMD ตังแต่ Am286 เรื่อยมาถึงล่าสุด K6-III ซึ่งถึงแม้ว่าจะมีการใช้สถาปัตยกรรมแบบ RISC เข้ามาบ้าง แต่ แกนหลักก็ยังคงเป็น CISC เช่นเดิม
ไม่มีความคิดเห็น:
แสดงความคิดเห็น