สารจาก TRU-SOCIETY

ขอให้สมาชิกรณรงค์ ในเรื่องการใช้คำให้สุภาพ และ งดการกล่าวถึง สถาบันที่สำคัญต่างๆ เช่น สภาบันชาติ  ศาสนา พระมหากษัตริย์ รวมถึง สถาบันการเมือง สถาบันการศึกษาทุกแห่ง

-ขอบคุณครับ-

Posted in Uncategorized | 6 Comments

อบรมวิชาแคลคูลัส

ในขณะที่เรากำลังจะสอบในเร็ววันนี้  ทางอาจารยืในคณะได้มีการจัดอบอรม วิชาแคลคูลัส ^^

Posted in Uncategorized | Leave a comment

TEST

ทดสอบ

Posted in Uncategorized | Leave a comment

น้องหมาที่น่ารักที่สุด(เข้ามาดูกันนะเอามาฝาก)

Posted in สัตว์เลี้ยง | Leave a comment

บทที่ 10 เรื่อง คุณลักษณะและหน้าที่ของ Instruction Sets (จบ)

บทแทรก 10-ก: สแต็ก

                สแต็ก คือกลุ่มของข้อมูลที่มีการเรียงลำดับเอาไว้ และสามารถนำข้อมูลไปใช้ได้ครั้งละหนึ่งตัว จุดที่สามารถติดต่อกับข้อมูลได้เรียกว่า ส่วนหัวของสแต็ก จำนวนข้อมูลที่เก็บไว้ในสแต็กนั้นสามารถเปลี่ยนแปลงได้ ข้อมูลอาจจะถูกเพิ่มเข้าไปหรือนำออกจากส่วนหัวของสแต็กเท่านั้น ด้วยเหตุผลนั้นสแต็กจึงถูกเรียกว่า pushdown list หรือ last-in-first-out list

รูปแสดงการทำงานพื้นฐานกับสแต็ก

การสร้างสแต็กขึ้นมาใช้งาน

แสดงการทำงานเกี่ยวกับสแต็ก

              สแต็กเป็นโครงสร้างข้อมูลที่มีประโยชน์ต่อการสร้างซีพียูขึ้นมาใช้งาน ถ้ากลไกของสแต็กถูกนำไปใช้โดยซีพียู เช่นการนำไปใช้จัดการการเรียกใช้โพรซีเยอร์ก็ทำให้ไม่มีความจำเป็นจะมีคำสั่งทำงานกับสแต็กไว้ในชุดคำสั่งเครื่อง แต่ในทั้งสองกรณีการสร้างสแต็กนั้นจะต้องมีการอ้างอิงถึงตำแหน่งที่เก็บข้อมูลในสแต็ก

                หน่วยความจำผืนหนึ่งในหน่วยความจำหลัก หรือในหน่วยความจำเสมือนจะถูกจองไว้สำหรับสแต็กส่วนใหญ่แล้วเนื้อที่ที่เตรียมไว้มักจะมีข้อมูลส่วนหนึ่งเก็บอยู่ และส่วนที่เหลือนั้นเตรียมไว้ใช้เก็บข้อมูลเพิ่มเติม

 

รูปแสดงโครงสร้างของสแต็กทั่วไป

การบริหารสแต็กให้เหมาะสมนั้น จะต้องใช้การอ้างอิงตำแหน่งสามแห่งด้วยกัน ดังนี้

1. Stack pointer : หรือตัวชี้ตำแหน่งสแต็ก เป็นตัวเก็บตำแหน่งที่อยู่ของข้อมูลตัวบนสุดในสแต็ก ถ้ามีการเพิ่มข้อมูลเข้ามาหรือดึงข้อมูลออกไป ก็จะต้องเปลี่ยนตำแหน่งที่อยู่ให้ชี้อยู่ที่ข้อมูลตัวบนสุดเสมอ

                2. Stack base: หรือตัวชี้ตำแหน่งฐาน เป็นตัวเก็บตำแหน่งที่อยู่ฐานของสแต็กในพื้นที่หน่วยความจำที่สงวนไว้ ถ้ามีการพยายามถึงข้อมูล (POP) ออกจากสแต็กที่ไม่มีข้อมูลอยู่ (stack pointer = stack base) ก็จะทำให้เกิดข้อผิดพลาดขึ้น

3. Stack limit : หรือขนาดของสแต็ก จะเป็นตัวเก็บตำแหน่งสุดท้ายที่สงวนไว้ใช้สำหรับสแต็ก ถ้ามีการพยายามใส่ข้อมูล (PUSH) เข้ามาในสแต็กที่เต็มแล้ว (stack pointer = stack limit) ก็จะทำให้เกิดข้อผิดพลาดขึ้น

การประเมินค่านิพจน์

ข้อดีของรูปแบบ postfix หรือ reverse Polish อีกประการหนึ่งคือ สามารถนำมาคำนวณหาค่าโดยนำสแต็กมาช่วยได้อย่างง่ายดาย นิพจน์จะถูกอ่านเข้ามาจากซ้ายไปขวา ข้อมูลแต่ละตัวที่อ่านเข้ามานั้นจะถูกกระทำดังนี้

                1. ถ้าตัวที่ถูกอ่านเข้ามาเป็น ตัวแปร หรือค่าคงที่ ให้ใส่ตัวนั้น (PUSH) ลงในสแต็ก

                2. ถ้าตัวที่ถูกอ่านเข้ามาเป็น เครื่องหมาย ให้อ่านค่าจากสแต็ก (POP) ขึ้นมาสองตัว ทำการคำนวณค่า และใส่ผลลัพธ์กลับลงไปในสแต็ก

 

รูปแสดงการใช้สแต็กในการคำนวณหานิพจน์ “f = (a – b) / (d Í e + c)”

กระบวนการแปลงนิพจน์ในรูปแบ infix ให้ไปอยู่ในรูปแบบ postfix นั้นก็สามารถทำได้ง่าย โดยนำสแต็กเข้ามาช่วย นิพจน์ infix จะถูกอ่านเข้ามาจากซ้ายไปขวา รูปแบบ postfix จะถูกสร้างขึ้นมาเป็นผลลัพธ์ในขณะที่อัลกอริทึมกำลังทำงาน

1. ตรวจข้อมูลตัวต่อไปที่ถูกอ่านเข้ามา

2. ถ้าเป็นตัวถูกกระทำ (operand) ให้ส่งออกเป็นผลลัพธ์

3. ถ้าเป็นเครื่องหมายวงเล็บเปิด ให้ใส่ลงไปในสแต็ก

4. ถ้าเป็นตัวกระทำ (operator) ให้ทำดังนี้

                – ถ้าตัวกระทำตัวบนสุดในสแต็กเป็นเครื่องหมายวงเล็บเปิด ให้ใส่ตัวกระทำนั้นลงไปในสแต็ก

                – ถ้าตัวกระทำมีค่า precedence สูงกว่าตัวบนสุดในสแต็ก ให้ใส่ตัวกระทำนั้นลงไปในสแต็ก

                – มิฉะนั้น ให้อ่านตัวกระทำออกมาจากสแต็ก และส่งออกไปเป็นผลลัพธ์ตัวต่อไป และทำซ้ำในขั้นตอนที่ 4

5. ถ้าเป็นเครื่องหมายวงเล็บปิด ให้อ่านตัวกระทำออกมาจากสแต็ก และส่งออกไปเป็นผลลัพธ์ตัวต่อไปจนกว่าจะพบเครื่องหมายวงเล็บเปิด ให้ทิ้งเครื่องหมายนั้นทิ้งไปและอ่านตัวต่อไปเข้ามา

6. ถ้ายังมีตัวต่อไปให้กลับไปทำขั้นตอนที่ 1

7. ถ้าไม่มีตัวต่อไปแล้ว ให้อ่านตัวกระทำออกมาจากสแต็ก และส่งออกไปเป็นผลลัพธ์ตัวต่อไปจนหมดสแต็ก

รูปแสดงการแปลงนิพจน์จากรูป Infix ไปเป็นรูป Postfix 

บทแทรก 10-ข: Little -, Big -,  และ Bi – endian

ลำดับของไบต์

                ปัญหาที่น่าสนใจอย่างหนึ่งคือ ข้อมูลในไบต์ต่าง ๆ ของขนาดข้อมูล word หรือใหญ่กว่านี้มีวิธีการจัดเรียงอย่างไร นิยามของ endianness ได้รับการแนะนำโดย Cohen ในราวปี พ.ศ. 2524 ซึ่งได้อธิบายเกี่ยวกับลำดับของไบต์ในข้อมูลขนาดหลายไบต์ และวิธีการคำนวณค่าของข้อมูลจำนวนนั้น สมมุติว่ามีข้อมูลขนาด 32 บิต ซึ่งมีค่าฐานสิบหกเป็น 12345678 ซึ่งถูกเก็บไว้ในหน่วยความจำหนึ่ง word ขนาด 32 – bit ที่ตำแหน่ง 184 ในเครื่องคอมพิวเตอร์ที่สามารถอ้างอิงข้อมูลในระดับไบต์ได้ (เรียกว่า byte=addressable memory)ค่าของเลขจำนวนนี้เกิดจากข้อมูลขนาด 4 ไบต์ซึ่งไบต์ต่ำสุด (lest singificant) จะเก็บค่า 78 และไบต์สูงสุด(most significant byte) จะเก็บค่า 12 คำถามคือจะเก็บข้อมูลนี้ในหน่วยความจำคอมพิวเตอร์อย่างไร คำตอยที่เป็นไปได้มีอยู่สองวิธีดังนี้

  1. ทางด้านซ้ายจะเก็บค่าไบต์ที่มีค่ามากที่สุดไว้ที่ตำแหน่ง (address) ต่ำที่สุด ซึ่งเรียกรูปแบบนี้ว่า “big endian” ซึ่งมีรุปแบบที่เหมือนกับการที่คนเราเขียนตัวเลขโดยทั่วไปจากซ้ายไปขวา
  2. ทางด้านขวาจะเก็บไบต์ที่มีค่าน้อยที่สุดไว้ที่ตำแหน่ง (address) ต่ำสุดซึ่งเรียกว่า “little endian” หรือเป็นการเขียนตัวเลขย้อนกลับจากขวามาซ้าย

ทั้งสองรูปแบบนี้จะเป็นรูปแบบกลับกันของกันและกัน

ลำดับของบิต

        ในการเรียงลำดับแต่ละบิตภายในไบต์ มีปัญหาที่จะต้องพิจารณาสองประการคือ

-                   จะเริ่มนับบิตแรกเป็นบิตลำดับที่ “0” หรือลำดับที่ “1”

-                   เป็นแบบ little endian (บิตที่มีค่าน้อยที่สุดเป็นบิตแรก) หรือ big endian (บิตที่มีค่ามากที่สุดเป็นบิตแรก)

สมาชิกกลุ่ม

  1. 531103075051 นางสาว กนิษฐา พุฒแก้ว
  2. 541103075038  นางสาว สุพัตร ดีมี
  3. 541103075042 นางสาว มุกดา ปาวานะศรี
  4. 541103075043 นางสาว สุทัตตา อุทิตสาร
  5. 541103075050 นางสาว รุ่งนภา คำเชื่อ
  6. 541103075053 นางสาว นตพร แซ่อึ้ง 
Posted in Uncategorized | 1 Comment

บทที่ 10 เรื่อง คุณลักษณะและหน้าที่ของ Instruction Sets (ต่อ)

10.5 ชนิดของการทำงานในซีพียู Pentium

ซีพียู Pentium    มีการทำงานชนิดที่สลับซับซ้อนมากมาย รวมทั้งคำสั่งพิเศษอีกจำนวนหนึ่ง วัตถุประสงค์ของการจัดเตรียมคำสั่งที่หลายหลายนี้ ก็เพื่อช่วยให้นักพัฒนาโปรแกรมตัวแปลภาษาสามารถทำงานได้อย่างสะดวกสบาย และสามารถแปลโปรแกรมภาษาระดับสูงมาเป็นภาษาเครื่องได้อย่างมีประสิทธิภาพ ตาราง 10.8 แสดงให้เห็นการทำงานชนิดต่าง ๆ พร้อมทั้งตัวอย่างประกอบคำสั่งส่วนใหญ่สามารถพบได้ในชุดคำสั่งภาษาเครื่องทั่วไป บางส่วนก็ถูกออกแบบให้เหมาะสมกับสถาปัตยกรรมซีพียูในตระกูล 80X86/Pentium

คำสั่ง Call/Return

                ซีพียู Pentium จัดเตรียมคำสั่งสนับสนุนการ call/return ไว้สี่แบบคือ CALL, ENTER, LEAVE และ RETURN จากรูป 10.9 แสดงให้เห็นวิธีการ call/return ที่ใช้โดยทั่วไปจะเป็นการทำงานโดยใช้ stack frame เมื่อโพรซีเยอร์ใหม่ถูกเรียกใช้ จะเกิดการทำงานดังต่อไปนี้ก่อนที่ซีพียูจะไปประมวลผลคำสั่งในโพรซีเยอร์ที่ถูกเรียก

  • ใส่ (push) ตำแหน่งที่จะกลับมาทำงาน (return point) ไว้ในสแต็ก
  • ใส่ (push) ตำแหน่งของเฟรม (old frame pointer) ในปัจจุบันไว้ในสแต็ก
  • สำเนาตำแหน่งของสแต็กในปัจจุบันให้เป็นตำแหน่งเฟรมใหม่
  • ปรับตำแหน่งเฟรมสำหรับการจัดสรรเฟรม (เช่น ใส่ค่าพารามิเตอร์)

 

คำสั่ง CALL จะใส่ (push) ตำแหน่งของคำสั่งในปัจจุบัน (program counter) ไว้ในสแต็ก และทำให้เกิดการกระโดดไปทำงานในจุดเริ่มต้นของโพรซีเยอร์ที่ถูกเรียกด้วยการใส่ตำแหน่งที่นต้องการนั้นไว้ในตำแหน่งคำสั่งปัจจุบัน ในซีพียู 8088 และ 8086 โพรซีเยอร์ทั่วไปเริ่มต้นด้วยชุดคำสั่งนี้

            PUSH              EBP

            MOV               EBP, ESP

            SUB                EAP, space_for_locals

โดยที่ ESP คือตัวชี้ตำแหน่งเฟรม (frame pointer) และ ESP คือ ตัวชี้วัดตำแหน่งสแต็ก (stack pointer) ส่วนในซีพียู 80286 และรุ่นหลังจะมีคำสั่ง ENTER เพื่อทำงานตามที่กล่าวถึงนี้ได้ด้วยคำสั่งเดียว

คำสั่ง ENTER ถูกเพิ่มเข้าไปในชุดคำสั่ง เพื่อสนับสนุนการทำงานของโปรแกรมตัวแปลภาษา (compiler) โดยตรง คำสั่งนี้ยังสนับสนุนการเรียกใช้โพซีเยอร์แบบซ้ำซ้อน (nested or recursive procedure) ในภาษาระดับสูง เช่น Pascal, COBOL และ Ada อย่างไรก็ตามกลับพบว่าควรใช้วิธีการอื่นในการจัดการเรื่องนี้  คำสั่ง ENTER ช่วยประหยัดเนื้อที่หน่วยความจำได้เล็กน้อยเมื่อเปรียบเทียบกับคำสั่ง PUSH, MOV, และ SUB รวมกัน

ตาราง 10.8 ชนิดคำสั่งสำหรับซีพียู Pentium พร้อมตัวอย่าง

Instruction Description
  Data Movement
MOV Move operand, between registers or between register  and memory.
PUSH Push operand onto stack.
PUSHA Push all registers on stack
MOVSX Move byte, word, dword, sign extended. Moves a byte to a word or a word to a doubleword with twos-complement sign extension.
XLAT Table lookup translation. Replaces a byte in AL with a byte from a user-coded translation table. When XLAT is executed, AL should have and unsigned index to the table. XLAT  changes the contents of AL  from the table index to the table entry.
IN, OUT Input, output operand from I/O space.
  Arithmetic
ADD Add operands.
SUB Subtract operands.
MUL Unsigned integer multiplication, with byte, word, or double word operands, and word, doubleword, or quadword result.
IDIV Signed divide.
  Logical
AND AND operands.
BTS Bit test and set. Operates on a bit field operand. The instruction copies the current value of a bit to flag CF and sets the original bit to 1.
BSF Bit scan forward. Scans a word or doubleword for a 1-bit and stores the number of the first 1-bit into a register.
SHL/SHR Shift logical left or right.
SAL/SAR Shift arithmetic left or right.
ROL/ROR Rotate left or right.
SETcc Sets a byte to zero or one depending on any of the 16 conditions defined by flags.
  Control Transfer
JMP Unconditional jump.
CALL Transfer control to another location. Before transfer, the address of the instruction following the CALL is placed on the stack.
JE/JZ Jump if equal/zero.
LOOPE/LOOPZ Loops if equal/zero. This is a conditional jump using a value stored in register ECX. The instruction first decrements ECX before testing ECX for the breach condition.
INT/INTO Interrupt/Interrupt if overflow. Transfer control to an interrupt service routine.
  String Operations
MOVS Move byte, word, dword string, The instruction operates on one element of string, indexed by registers ESI and EDI. After each string operation, the registers are automatically incremented or decremented to point to the next element of the string.
LODS Load byte, word, dword of string.
  High-Level Language Support
ENTER Creates a stack frame that can be used to implement the rules of a block-structured high-level language.
LEAVE Reverses the action of the previous ENTER.
BOUND Check array bounds. Verifies that the value in operand 1 is within lower and upper limits. The limits are in two adjacent memory locations referenced by operand 2. An interrupt occurs if the value is out of bounds. This instruction is used to check an array index.
  Flag Control
STC Set Carry flag.
LAHF Load A register from flags. Copies SF, ZF, AF, PF, and CF bit into A register.
  Segment Register
LDS Load pointer into D segment register.

System control.

HLT Halt.
LOCK Asserts a hold on shared memory so that the Pentium has exclusive use of it during the instruction that immediately follows the LOCK
ESC Processor extension escape. An escape code that indicates the succeeding instructions are to be executed by a numeric coprocessor that supports high-precision integer and floating-point calculations.
WAIT Wait until BUSY# negated. Suspends Pentium program execution until the processor detects that the BUSY pin is inactive, indicating that the numeric coprocessor has finished execution.
  Protection
SGDT Store global descriptor table.
LSL Load segment limit. Loads a user-specified register with a segment limit.
VERR/VERW Verify segment for reading/writing.
  Cache Management
INVD Flushes the internal cache memory.
WBINVD Flushes the internal cache memory after writing dirty lines to memory.
INVLPG Invalidates a translation look aside buffer (TLB) entry.

 

(4 ไบต์ กับ 6 ไบต์) แต่ใช้เวลาในการประมวลผลนานกว่า (10 วงรอบนาฬิกา กับ 6 วงรอบนาฬิกา) ดังนั้นแม้ว่าอาจจะเป็นการดีที่นักออกแบบชุดคำสั่งจะเพิ่มคำสั่งนี้เข้าไปในชุดคำสั่ง แต่การกระทำดังกล่าวทำให้การสร้างซีพียูมีความยุ่งยากซับซ้อนมากยิ่งขึ้น โดยที่ได้ประโยชน์น้อยมากหรือไม่ได้รับประโยชน์เลย ในภายหลังได้ทราบว่าซีพียูในตระกูล RISC นั้นหลีกเลี่ยงที่จะสร้างคำสั่งที่มีความซับซ้อนมาก ๆ จึงไม่มีคำสั่งอย่าง ENTER นี้ใช้งาน ซึ่งสามารถใช้ชุดคำสั่งที่ง่ายกว่า แต่สามารถทำงานได้อย่างมีประสิทธิภาพสูงกว่า

การบริหารหน่วยความจำ

                ชุดคำสั่งพิเศษอย่างหนึ่งเกี่ยวข้องกับการจัดการหน่วยความจำแบบ เซ็กเมนเตชัน (memory segmentation) คำสั่งในชุดนี้เป็นคำสั่งที่ต้องใช้สิทธิพิเศษจึงจะสามารถสั่งการได้ ซึ่งในที่นี้ก็คือจะถูกเรียกใช้โดยระบบปฏิบัติการเท่านั้น คำสั่งกลุ่มนี้ช่วยในการสร้างและอ่านข้อมูลตารางเซ็กเมนต์ (local and global segment tables or descriptor) และใช้ในการตรวจสอบและแก้ไขข้อมูบในตารางฯ

โค้ดเงื่อนไข

                ดังที่ได้กล่าวถึงมาแล้ว โค้ดเงื่อนไข (condition codes) คือ บิตจำนวนหนึ่งที่เก็บอยู่ในรีจิสเตอร์พิเศษ ซึ่งจะถูกเปลี่ยนแปลงค่าโดยการทำงานบางอย่าง และถูกนำมาใช้กับคำสั่ง branch แบบต่าง ๆ เงื่อนไขเหล่านี้มักจะถูกกำหนดค่าหลังจากการประมวลผลคำสั่งทางคณิตศาสตร์และการเปรียบเทียบ (compare operation) ซึ่งในภาษาส่วนใหญ่จะเกิดขึ้นจากการนำตัวถูกกระทำมาลบออกจากกัน เหมือนกับที่เกิดขึ้นในการลบข้อมูลทางคณิตศาสตร์ ข้อแตกต่างกัน คือ การเปรียบเทียบนั้นจะมีผลต่อการกำหนดค่าโค้ดเงื่อนไขเท่านั้น ในขณะที่กาลบจะนำผลลัพธ์ที่ได้ไปเก็บไว้ในตัวถูกกระทำที่ใช้เก็บตำแหน่งผลลัพธ์

ตาราง 10.9 โค้ดเงื่อนไขสำหรับซีพียู Pentium

Status Bit Name Description
C Carry Indicates carrying or borrowing into the leftmost bit position following an arithmetic operation. Also modified by some of the shift and rotate operations.
P Parity Parity of the result of an arithmetic of logic operation. 1 indicates even parity; 0 indicated odd parity.
A Auxiliary carry Represents carrying of borrowing between half-bytes of an 8-bit arithmetic or logic operation using the AL register.
Z Zero Indicates that the result of an arithmetic of logic operation is 0.
S Sign Indicates the sign of the result of an arithmetic or logic operation.
O Overflow Indicates an arithmetic overflow after an addition or subtraction.

 

ตาราง 10.10 เงื่อนไขสำหรับซีพียู Pentium สำหรับเงื่อนไขแบบ conditional jump และคำสั่ง SET

Symbol Condition Tested Comment
A, NBE C=AND Z=0 Above; not below or equal (greater then, unsigned)
AE, NB, NC C=0 Above or equal; not below (greater than or equal, unsigned); not carry
B, NAE,C C=1 Below; not above or equal (less than, unsigned); carry set
BE, NA C=1 OR Z=1 Below or equal; not above (less than or equal, unsigned)
E, Z Z=1 Equal; zero (signed or unsigned)
G, NLE [(S=1 AND O=1) OR (S=0 AND O=0)] AND [Z=0 Greater than; not less than (signed)
GE, NL (S=A AND O=1) OR (S=0 AND O=0) Greater than or equal; not less than (signed)
L, NGE (S=1 AND O=0) OR (S=0 AND O=1) Less than; not greater than or equal (signed)
LE, NG (S=1 AND O=0) OR (S=0 AND O=1) OR (Z=1) Less than or equal; not greater than (signed)
NE, NZ Z=0 Not equal; not zero (signed or unsigned)
NO O=0 No overflow
NS S=0 Not sign (not negative)
NP, PO P=0 Not parity; parity odd
O O=1 Overflow
P P=1 Parity; parity even
S S=1 Sign (negative)

 

การเปรียบเทียบนี้  ขี้นอยู่กับว่าเป็นตัวเลขแบบมีเครื่องหมายหรือไม่มีเครื่องหมาย เช่น เลขขนาด 8 บิต อย่าง 11111111(256) นั้นมีค่ามากกว่า 00000000(0) ถ้าเลขทั้งสองนี้เป็นแบบไม่มีเครื่องหมาย แต่ถ้าเป็นเลขที่มีเครื่องหมาย เลขตัวแรก (-1) จะมีค่าน้อยกว่า (0) ภาษาแอสเซมบลีบางส่วน จึงแยกความแตกต่างออกจากกันคือ ถ้าเป็นการเปรียบเทียบระหว่างตัวเลขแบบมีเครื่องหมายจะใช้คำว่า น้อยกว่า (less than) และมากกว่า (greater than) การเปรียบเทียบระหว่างตัวเลขแบบไม่มีเครื่องหมายจะใช้คำว่าต่ำกว่า (below) หรือเหนือกว่า (above)

            สิ่งที่น่าสนใจอีกประการหนึ่งคือ ความซับซ้อนในการเปรียบเทียบตัวเลขที่มีเครื่องหมาย เครื่องหมายของผลลัพธ์จะมีค่ามากกว่าหรือเท่ากับ “0” ถ้า (1) บิตเครื่องหมายมีค่าเป็น “0” และไม่มี overflow เกิดขึ้น (S=0 and O=0) หรือ (2) บิตเครื่องหมายมีค่าเป็น “1” และมี overflow เกิดขึ้น

คำสั่ง MMX ในซีพียู Pentium

                ในปี พ.ศ.2539 บริษัทอินเทลได้แนะนำเทคโนโลยี MMX ที่ได้ใส่เข้าไปในซีพียู Pentium เทคโนโลยี MMX ประกอบด้วยชุดคำสั่งชุดหนึ่งที่ได้รับการปรับปรุงประสิทธิภาพให้มีความเหมาะสมกับงานมัลติมีเดียโดยเฉพาะ คำสั่งทั้งหมดมีอยู่ 57 คำสั่งใหม่ที่ทำงานกับข้อมูลตามแบบสถาปัตยกรรม SIMD (single-instruction, multiple-data) ทำให้สามารถทำงานชนิดเดียวกัน เช่น การบวกหรือการคูณกับข้อมูลหนึ่งได้พร้อมกัน แต่ละคำสั่งโดยปกติจะใช้เวลาที่สามารถประมวลผลเพียงหนึ่งรอบนาฬิกาเท่านั้น สำหรับงานประยุกต์ที่เหมาะสมคำสั่งที่สามารถประมวลผลแบบขนานได้อย่างรวดเร็วนี้จะสามารถทำงานได้เร็วขึ้นตั้งแต่ 2 ถึง 8 เท่า เมื่อเปรียบเทียบกับอัลกอริทึมที่ทำงานอย่างเดียวกันแต่ไม่ได้คำสั่ง MMX       นี้

                จุดเด่นของคำสั่งในชุด MMX คือ การสนับสนุนการโปรแกรมมัลติมีเดีย (multimedia) ข้อมูลวีดีโอและข้อมูลเสียงประกอบด้วยข้อมูลขนาดเล็ก (8 บิต หรือ 16 บิต) เป็นจำนวนมากในขณะที่ข้อมูลสำหรับคำสั่งทั่วไปมักกระทำกับข้อมูลขนาด 32 บิต ถึง 64 บิต เช่น ภาพกราฟิกและวีดีโอจำนวนฉาก (scene) หนึ่งประกอบด้วยอาร์เรย์ของพิกเซล (pixel) จำนวนมาก ข้อมูลแต่ละพิกเซลมีขนาด 8 บิต ข้อมูลเสียง (audio) มักจะถูกแปลงเป็นข้อมูลขนาด 16 บิต สำหรับข้อมูลภาพหรือวีดีโอสามมิติ แต่ละพิกเซลมีขนาด 32 บิต เพื่อให้สามารถประมวลผลแบบขนานกับข้อมูลเหล่านี้ เทคโนโลยี MMX      จึงได้สร้างข้อมูลชนิดใหม่ขี้นมาสามชนิด แต่ละชนิดมีความยาว 64 บิต ซึ่งประกอบด้วยเขตข้อมูลขนาดเล็กจำนวนหนึ่ง แต่ละเขตข้อมูลจะเป็นข้อมูลจำนวนเต็ม ข้อมูลทั้งสามชนิดได้แก่

  • Packet byte : ข้อมูลจำนวน 8 ไบต์ จะรวมเข้าด้วยกันเป็นขนาด 64 บิต
  • Packed word : ข้อมูลขนาด 16 บิต จำนวน 4 word รวมกันเป็น 64 บิต
  • Packed doubleword : ข้อมูล doubleword ขนาด 32 บิต จำนวน 2 คำรวมเป็น 64 บิต

                ตาราง 10.11 แสดงชุดคำสั่ง MMX คำสั่งใหญ่จะเกี่ยวข้องกับการทำงานแบบขนานกับข้อมูลขนาด byte, word หรือ doubleword เช่น คำสั่ง PSLLW เป็นการเลื่อนบิตแบบตรรกะไปทางซ้ายซึ่งจะกระทำกับ word ทั้ง 4 word ของตัวถูกกระทำแบบ packed word พร้อมกัน คำสั่ง PADDB เป็นการอ่านข้อมูลนำเข้าจากตัวถูกกระทำแบบ packed byte แล้วทำการบวกแต่ละไบต์พร้อม ๆ กันเพื่อสร้างเป็นผลลัพธ์แบบ packed byte เช่นเดียวกัน

                จุดเด่นประการหนึ่งที่ไม่ธรรมดาสำหรับชุดคำสั่งใหม่นี้คือ การแนะนำคณิตศาสตร์แบบอิ่มตัว (saturation arithmetic) สำหรับคณิตศาสตร์แบบปกติที่กระทำกับเลขจำนวนแบบไม่มี

ตาราง 10.11 คำสั่งในชุดคำสั่ง MMX

Category Instruction Description
Arithmetic PADD[B,W,D] Parallel add of packed eight bytes, four 16-bit words, or two 32-bit doublewords, with wraparound
PADDS[B,W] Add with saturation
PADDUS[B,W] Add unsigned with saturation
PSUB[B,W] Subtract with wraparound
PSUBS[B,W] Subtract with saturation
PSUBUS[B,W] Subtract unsigned with saturation
PMULHW Parallel multiply of four signed 16-bit words, with high-order 16 bits of 32-bit result chosen
PMULLW Parallel multiply of four signed 16-bit words, with low-order 16 bits of 32-bit result chosen
PMADDWD Parallel multiply of four signed 16-bit words, with together adjacent pairs of 32-bit result chosen
Comparison PCMPEQ[B,W,D] Parallel compare for equality; result is mask of 1s if true of 0s if false
PCMPGT[B,W,D] Parallel compare for greater than; result is mask of 1s if true or 0s if false
Conversion PACKUSWB Pack words into bytes with unsigned saturation
PACKSS[WB,DW] Pack words into bytes, or doublewords into words, with signed saturation
PUNPCKH[BW,WD,DQ] Parallel unpack (interleaved merge) high-order bytes, words, or doublewords from MMX register
PUNPCKL[BW,WD,DW] Parallel unpack (interleaved merge) low-order bytes, words, or doublewords from MMX register
Logical PAND 64-bit bitwise logical AND
PNDN 64-bit bitwise logical AND NOT
POR 64-bit bitwise logical OR
PXOR 64-bit bitwise logical XOR
Shift PSLL[W,D,Q] Parallel logical left shift of packed words, doubleword, or quadword by amount specified in MMX register or immediate value
PSRL[W,D,W] Parallel logical right shift of packed words, doublewords, or quadword
PSRA[W,D] Parallel arithmetic shift of packed words, doublewords, or quadword
Data Transfer MOV[D,Q] Move doubleword or quadword to/from MMX register
State Mgt EMMS Empty MMX state (empty FP registers tag bits)
Note:If an instruction supports multiple data types [byte(B), word (W), quadword (Q), the data types are indicated in brackets.

 

เครื่อง หมาย เมื่อเกิดการ overflow (มีเลขทดเกินหลังสูงสุด) บิตที่เกินไปนั้นจะถูกตัดทิ้งซึ่งเรียกว่าเป็นการทำ “wrap-around” เนื่องจากผลของการตัดบิตทิ้งนี้อาจทำให้ได้ผลลัพธ์ที่มีค่าน้อยกว่าตัวกระทำทั้งสองตัว ดูตัวอย่างจากการบวกเลขดังต่อไปนี้

                F000h              =          1111 0000 0000 0000

            +300h              =          0011 0000 0000 0000

                                              10010 0000 0000 0000

                                                1111 1111 1111 1111 = FFFFh

                พิจารณาตั้วอย่างต่อไปนี้เพื่อให้เกิดความเข้าใจในการทำงานของคำสั่ง MMX การใช้งานวีดีโอมักจะไม่เกี่ยวข้องกับการที่เรียกว่า fade-in และ fade-out  คือการที่ภาพหนึ่งกำลังค่อย ๆ หายไปและถูกแทนที่ด้วยภาพใหม่นั่นคือ การรวมภาพสองภาพเข้าด้วยกันโดยมีตัวถ่วงน้ำหนัก เช่น

            Result_pixel = A_pixel × fade + B_pixel × (1-fade)

                การคำนวณนี้จะเกิดขึ้นกับทุกพิกเซล ซึ่งแทนในสมการด้วย A-pixel และ B-pixel เฟรมชุดที่เกิดจากการเปลี่ยนแปลงนี้จะเริ่มต้นจากค่าของ “fade” ที่เริ่มต้นเป็น 1 และ ค่อย ๆ ลดลงจนถึง “0” จะทำให้ภาพที่เริ่มต้นจากภาพ A ค่อย ๆ เปลี่ยนเป็นภาพ B ในที่สุด

                รูป 10.10 แสดงลำดับขั้นตอนที่เกิดขึ้นกับแต่ละพิกเซล พิกเซลแต่ละพิกเซลที่มีขนาด 8  บิต จะถูกเปลี่ยนไปเป็นข้อมูลขนาด 16 บิต เพื่อให้สอดคล้องกับความสามารถในการคูณข้อมูล 16 บิต ของ MMX ถ้าภาพขนาด 640 × 480 พิกเซล และถ้าแต่ละขั้นตอนของการเปลี่ยนภาพนั้นแบ่งออกเป็นทั้งหมด 225 ขั้นตอน (ค่าของ “fade”) แล้วจะทำให้มีจำนวนคำสั่งที่จะถูกประมวลผลเกิดขึ้นทั้งหมดประมาณ 535 ล้านครั้ง ในขณะที่การทำงานอย่างเดียวกันแต่ไม่ใช่เทคโนโลยี MMX จะเกิดการคำนวณขึ้นประมาณ 1.4 พันล้านครั้ง

 ตาราง 10.12 คำสั่งในชุดคำสั่ง Power PC และตัวอย่างประกอบ

Instruction Description
  Branch Oriented
b Unconditional branch
bl Branch to target address and place effective address of instruction following the branch into the Link Register
bc Branch conditional on Count Register and/or on bit in condition Register
sc System call to invoke an operating system service
trap Compare two operands and invoke system trap handler if specified conditions are met
  Load/Store
lwzu Load word and zero extend to left; update source register
ld Load doublewoed
lmw Load multiple word; load consecutive words into contiguous registers from the target register through general0purpose register 31
lswx Load a string of bytes onto registers beginning with target register; 4 bytes per register; wrap around from register 31 to register 0
  Integer Arithmetic
add Add contents of two registers and place in third register
subf Subtract contents of two registers and place in third register
mullw Multiply low-order 32 bit contents of two registers and place 64-bit product in third register
divd Divide 64-bit contents of two registers and place in quotient in third register
  Logical and Shift
cmp Compare two operands and set four condition bits in the specifies condition register field
crand Condition register AND : two bits of the Condition Register are ANDed and the result placed in one of the two bit positions
and AND contents of two registers and place in third register
cntlzd Count number of consecutive 0 bits starting at bit zero in source register and place count in destination register
rldic Rotate left doubleword register, AND with mask, and store in destination register
sld Shift left bits in source register and store in destination  register
  Floating Point
lfs Load 32-bit floating0point number from memory, convert to 64-bit format, and store in floating-point register
fadd Add contents of two registers and place in third register
fmadd Multiply contents of two registers, add the contents of third, and place result in fourth register
fcmpu Compare two floating0point operands and set conditions bits
  Cache Management
dcbf Data cache block flush; perform lookup in cache on specified target address and perform flushing operation
icbi Instruction cache block invalidate

 

ชนิดการทำงานในซีพียู PowerPC

ซีพียู PowerPC มีชุดคำสั่งที่มากมาย ตาราง 10.12 แสดงชนิดของคำสั่งและตัวอย่างประกอบคำสั่งเหล่านี้มีสิ่งที่น่าสนใจดังต่อไปนี้

                คำสั่ง Branch-Oriented

            ซีพียู PowerPC สนับสนุนคำสั่งกระโดดทั้งแบบ conditional branch และ unconditional branch แบบที่ไม่ธรรมดา คำสั่งกระโดดอย่างมีเงื่อนไขจะทำการทดสอบข้อมูลขนาด 1 บิต จากรีจิสเตอร์เงื่อนไขเพื่อสอบว่าเป็น “จริง” หรือ “ไม่ใช่ 0” หรือ “ไม่สนใจ” ทำให้มีเงื่อนไขที่เป็นไปได้ 9 เงื่อนไข เงื่อนไขสำหรับกำหนดเงื่อนไขกระโดด ถ้ารีจิสเตอร์ถูกทดสอบว่าเป็น “0” หรือ “ไม่ใช่ 0” จะมีผลให้รีจิสเตอร์นั้นถูกลดค่าลงไป “1” ก่อนที่จะเกิดการทดสอบ เงื่อนไขนี้ช่วยให้สะดวกต่อการสร้างโค้ดเพื่อการวนซ้ำ (loop)

            คำสั่ง Load/Store

            ในสถาปัตยกรรม PowerPC คำสั่งสำหรับการอ่านข้อมูลเข้ามา (load) และการจัดเก็บข้อมูล (store) เท่านั้นที่ได้รับอนุญาตให้ติดต่อกับหน่วยงานความจำได้ คำสั่งทางคณิตศาสตร์และตรรกะจะกระทำกับข้อมูลที่อยู่ในรีจิสเตอร์เท่านั้น กฎเกณฑ์เช่นนี้ถูกนำไปใช้กับสถาปัตยกรรมซีพียูแบบ RISC

                ความแตกต่างระหว่าง load กับ store

  • Data size : ข้อมูลสามารถถ่ายโอนได้ในหน่วยของไบต์, halfword, word, หรือ doubleword คำสั่ง load และ store สามารถนำไปใช้ในการอ่านและจัดเก็บข้อมูลที่เป็นกลุ่มของไบต์จากรีจิสเตอร์หลายตัวได้
  • Sign extension : สำหรับการ load  ข้อมูลขนาด halfword และ word บิตที่ไม่ได้ใช้งานทางซึกซ้อายของรีจิสเตอร์ขนาด 64 บิต จะถูกเติมให้เต็มด้วย “0” หรือด้วยเครื่องหมายของเลขจำนวนนั้น

สมาชิกกลุ่ม

  1. 531103075051 นางสาว กนิษฐา พุฒแก้ว
  2. 541103075038  นางสาว สุพัตร ดีมี
  3. 541103075042 นางสาว มุกดา ปาวานะศรี
  4. 541103075043 นางสาว สุทัตตา อุทิตสาร
  5. 541103075050 นางสาว รุ่งนภา คำเชื่อ
  6. 541103075053 นางสาว นตพร แซ่อึ้ง 
Posted in Uncategorized | Leave a comment

ชาญวิทย์ แซ่อึ้ง 5401103077027

เนื้อหาครบถ้วนดีคับ เข้าใจง่าย ขอบคุณคับ

Posted in Uncategorized | Leave a comment

วีระชน เทียนซ้อน รหัส 5401103077030

เข้าใจง่าย แต่ หน้าจะมีภาพ ประกอบ จะน่าสนใจยิ่งขึ้น

Posted in Uncategorized, เทคโนโลยีทางไอที | 1 Comment

บทที่ 4 ITR1 ส่งงานวิชาสถาปัตคอมพิวเตอร์

รายชื่อสมาชิกในกลุ่ม  ITR1

1.5401103075026 น.ส.ยลดา เรืองพรวิสุทธ์
2.5401103075027 นาย ฉัตรชัย สามบุญเที่ยง
3.5401103075021 นาย เมธา งามผ่อง
4.5401103075047 นาย สิร ปิติวงศธร
5.5401103075022 นาย บดินทร์ มีแววแสง
6.5401103075003 น.ส.วิษณี แจ่มพิศ
7.5401103075035 น.ส.สุนทรี แซ่ด่าน

4.1 หน่วยความจำในเครื่องคอมพิวเตอร์

คุณลักษณะของระบบหน่วยความจำ

ความซับซ้อนของระบบหน่วยความจำสามารถทำให้เข้าใจได้ง่ายขึ้นด้วยการอธบายคุณลักษณะที่สำคัญของระบบหน่วยความจำ

คำว่าสถานที่ (Location) หมายความถึงสถานที่ที่หน่วยความจำอยู่ นั่นคืออยู่ภายในหรือภายนอกเครื่องคอมพิวเตอร์ หน่วยความจำภายในเครื่องคอมพิวเตอร์ (internal memory) มักจะหมายถึง หน่วยความจำหลัก (main memory) แต่อันที่จริงยังควมีหน่วยความจำแบบอื่นอยู่อีกด้วย เช่น โปรเซสเซอร์ต้องการหน่วยความจำเป็นของตัวเองในรูปแบบของรีจิสเรตอร์ (register) และหน่วยควบคุมภายในโปรเซสเซอร์ก็อาจจำเป็นต้องใช้หน่วยความจำของตัวเอง หน่วยความจำทั้งสองแบบนี้จะกล่าวถึงในภายหลัง นอกจากนี้ภายนอกประกอบด้วยอุปกรณ์พ่วงต่อต่างๆ ได้แก่ ดิสก์และเทป ซึ่งโปรเซสเซอร์สามารถอ้างอิงถึงได้โดยผ่านหน่วยควบคุมไอโอ

คุณสมบัติที่ชัดเจนของหน่วยความจำคือ ความจุ (capacity) สำหรับหน่วยความจำภายใน

คุณสมบัติที่เกี่ยวข้องกับความจุคือ หน่วยในการถ่ายเทข้อมูล (unit of transfer) สำหรับหน่วยความจำภายใน หน่วยในการถ่ายเทข้อมูลเท่ากับ จำนวนสายสัญญาณข้อมูลเข้าสู่และออกจากหน่วยความจำ โดยปกติจะมีขนาดเท่ากับความยาวของ word แต่ก็อาจจะมีขนาดใหญ่กว่าก็ได้ เช่น 64, 128 หรือ 256 บิต เพื่อให้เกิดความเข้าใจมากยิ่งขึ้น ขอให้พิจารณานิยามที่เกี่ยวข้องกับหน่วยความจำภายในดังนี้

  • Word : หมายถึง หน่วยโครงสร้างโดยธรรมชาติของหน่วยความจำ โดยปกติขนาดของ Word จะเท่ากับจำนวนบิตที่ใช้ในการแสดงค่าของตัวเลข
  • Addressable units : หมายถึง หน่วยที่เล็กที่สุดที่สามารถอ้างอิงได้ บางระบบใช้หน่วยเป็น word ในขณะที่หลายระบบใช้หน่วยเป็นไบต์
  • Unit of transfer : หมายถึง จำนวนบิตที่อ่านมาจาก หรือบันทึกลงสู่หน่วยความจำในแต่ละครั้ง หน่วยในการถ่ายเทข้อมูลไม่จำเป็นจะต้องเท่ากับ word หรือหน่วยอ้างอิงที่เล็กที่สุด

ความแตกต่างอีกอย่างหนึ่งของหน่วยความจำคือ วิธีการเข้าถึงหน่วยความจำ (method of accessing) ซึ่งมีรายละเอียดดังนี้

  • Sequential access : หรือการเข้าถึงหน่วยความจำแบบเรียงตามลำดับ หน่วยความจำมีโครงสร้างประกอบด้วยหน่วยต่างๆ เรียกว่า ระเบียน (record) การเข้าไปอ่านหรือบันทึกข้อมูลจะต้องกระทำเรียงตามลำดับ ข้อมูลเกี่ยวกับตำแหน่งที่อยู่ถูกนำมาใช้ในการแยกตำแหน่งแต่ละระเบียนออกจากกัน และช่วยในกระบวนการอ่านข้อมูล หน่วยบันทึกข้อมูลแบบเทปแม่เหล็ก เป็นตัวอย่างการเข้าถึงหน่วยความจำแบบเรียงตามลำดับ
  • Direct access : หรือการเข้าถึงหน่วยความจำแบบโดยตรง กระบวนการอ่านหรือบันทึกข้อมูลจะใช้กลไกที่เหมือนกัน ซึ่งจะเปลี่ยนตำแหน่งจากตำแหน่งที่อยู่ในปัจจุบันไปเป็นตำแหน่งที่ต้องการ โดยข้ามระเบียนข้อมูลที่อยู่ระหว่างกลางไป ทำให้ระยะเวลาที่ใช้ในการเข้าถึงหน่วยความจำแต่ละครั้งนั้น อาจแตกต่างกันมาก
  • Random access : หรือการเข้าถึงหน่วยความจำแบบไม่มีลำดับ แต่ละตำแหน่งในหน่วยความจำจะต้องมีกลไกในการกำหนดตำแหน่งเฉพาะที่ไม่มีการซ้ำกัน ซึ่งโดยปกติจะหมายถึงเส้นลวดวงจรไฟฟ้า
  • Associative : หรือความเกี่ยวข้อง จัดว่าเป็นการเข้าถึงหน่วยความจำแบบ random access อย่างหนึ่งที่มีการเปรียบเทียบข้อมูลบิตจำนวนหนึ่ง (ที่กำหนดตำแหน่งไว้ล่วงหน้า) กับ word ที่เป็นตัวเลือกจำนวนหนึ่ง (กำหนดไว้ล่วงหน้าเช่นกัน) เพื่อค้นหาตำแหน่งที่สอดคล้องกัน (เปรียบเทียบพร้อมกันทุก word)

จากมุมมองของผู้ใช้ คุณลักษณะที่สำคัญสองประการของหน่วยความจำคือ ความจุ และประสิทธิภาพ มีวิธีการวัดประสิทธิภาพในสามเรื่องดังนี้

  • Access time(latency) : สำหรับหน่วยความจำแบบ random access memory ระยะเวลาในการเข้าถึงหน่วยความจำ หมายถึง ระยะเวลาที่ใช้ในการอ่านหรือบันทึกข้อมูลนั่นคือระยะเวลานับตั้งแต่ที่ตำแหน่งข้อมูลได้ถูกส่งมาถึงหน่วยความจำ จนกระทั่งข้อมูลได้ถูกบันทึก หรือพร้อมที่จะถูกส่งกลับมาให้
  • Memory cycle time : นิยามนี้ใช้กับหน่วยความจำแบบ random access memory ระยะเวลาวงรอบหน่วยความจำประกอบด้วย ระยะเวลาในการเข้าถึงหน่วยความจำ (access time) รวมกับระยะเวลาอื่นๆ ที่จำเป็นต้องใช้ จนถึงเวลาที่จะเกิดการอ่านหรือบันทึกข้อมูลในครั้งต่ไป
  • Transfer rate : หรืออัตราการถ่ายเทข้อมูล หมายถึง อัตราที่ข้อมูลถูกถ่ายทอดเข้าสู่หรือออกจากหน่วยความจำ สำหรับหน่วยความจำแบบ random access memory ระยะเวลานี้เท่ากับ 1/(cycle time) สำหรับหน่วยความจำที่ไม่ใช่ random access memory ระยะเวลานี้จะเท่ากับ

โครงสร้างลำดับขั้นตอนของหน่วยความจำ

เงื่อนไขในการออกแบบหน่วยความจำของเครื่องคอมพิวเตอร์ อาจถูกจัดแบ่งออกได้ด้วยคำถามสามคำถามคือ มีปริมาณเท่าใด และมีราคาเท่าใด

คำถามที่ว่าเครื่องคอมพิวเตอร์ควรจะมีหน่วยความจำเท่าใดนั้น มักจะไม่มีคำตอบที่ชัดเจน ไม่ว่าคอมพิวเตอร์จะมีปริมาณหน่วยความจำเท่าใดก็ตาม โปรแกรมประยุกต์ก็จะถูกพัฒนาให้สามารถใช้หน่วยความจำในปริมาณนั้นได้ทั้งหมดเสมอ ส่วนคำถามที่เกี่ยวข้องกับความเร็วของหน่วยความจำนั้นสามารถให้คำตอบได้ชัดเจนกว่า เพื่อให้เครื่องคอมพิวเตอร์มีประสิทธิภาพสูงที่สุด หน่วยความจำจะต้องสามรถทำงานให้ทันกับโปรเซสเซอร์ คือจะต้องสามรถส่งคำสั่งและข้อมูลให้โปรเซสเซอร์ทำการประมวลผลได้ตลอดเวลา โดยไม่ต้องมีการรอคอยเกิดขึ้น

องค์ประกอบที่สำคัญทั้งสามประการคือ ราคา ปริมาณ และเวลาการเข้าถึงหน่วยความจำได้มีความพยายามในการนำเทคโนโลยีใหม่ๆ เข้ามาใช้อยู่เสมอ แต่องค์ประกอบทั้งสามก็มีความสัมพันธ์กันดังนี้

  • การเพิ่มความเร็วในการเข้าถึงข้อมูล จะทำให้หน่วยความจำมีราคาสูงขึ้น
  • ปริมาณหน่วยความจำเพิ่มขึ้น จะทำให้ราคาต่อหน่วยลดลง
  • ปริมาณหน่วยความจำเพิ่มขึ้น จะทำให้เสียเวลาในการเข้าถึงข้อมูลในหน่วยความจำมากขึ้น

ลักษณะพื้นฐานของหน่วยความจำ Cache

หน่วยความจำ cache สร้างขึ้นมาด้วยวัตถุประสงค์ที่จะให้เป็นหน่วยความจำที่ทำงานได้เร็วที่สุดเท่าที่เทคโนโลยีดีที่สุดในขณะนั้นจะทำได้ ในเวลาเดียวกันก็ต้องการให้มีขนาดใหญ่ที่สุดในราคาที่ไม่แพงจนเกินไปนัก แนวความคิดนี้ได้แสดงในเครื่องคอมพิวเตอร์มีหน่วยความจำหลักที่มีความเร็วต่ำ(เมื่อเปรียบเทียบกับความเร็วของซีพียู) ที่มีปริมาณมาก และมีหน่วยความจำ cache ที่เร็วกว่าแต่มีขนาดเล็กกว่า โดยปกติหน่วยความจำ cache จะเก็บสำเนาของข้อมูลบางส่วนในหน่วยความจำหลักเอาไว้ เมื่อโปรเซสเซอร์ต้องการอ่านข้อมูลจำนวนหนึ่ง word ในหน่วยความจำ ข้อมูลส่วนนั้นจะถูกตรวจสอบว่ามีอยู่ใน cache หรือไม่ ถ้ามีอยู่ก็จะนำข้อมูลใน cache ไปใช้ ถ้าไม่มีอยู่ก็จะเกิดการคัดลอกสำเนาข้อมูลหนึ่งบล็อก จากหน่วยความจำหลักมายัง cache แล้วจึงนำ word ที่ต้องการส่งต่อไปให้โปรเซสเซอร์ในภายหลังเนื่องจากปรากฏการณ์การอ้างอิงในพื้นที่เดียวกัน (locality of reference) จะทำให้การอ้างอิงข้อมูลในหน่วยความจำครั้งต่อๆ ไปเป็นการอ้างอิงที่เดิม หรือตำแหน่งที่ใกล้เคียงจุดเดิมดังนั้นการคัดลอกข้อมูลหนึ่งบล็อกจากหน่วยความจำหลักมายัง cache จะสามารถถูกนำมาใช้งานได้ในระยะหนึ่ง ก่อนที่จะมีการคัดลอกข้อมูลในครั้งต่อไป

4.2 ลักษณะพื้นฐานของหน่วยความจำ Cache

หน่วยความจำ cache สร้างขึ้นมาด้วยวัตถุประสงค์ที่จะให้เป็นหน่วยความจำที่ทำงานได้เร็วที่สุดเท่าที่เทคโนโลยีดีที่สุดในขณะนั้นจะทำได้ ในเวลาเดียวกันต้องการให้มีขนาดใหญ่ที่สุดที่ไม่แพงจนเกินไปนัก

มีหน่วยความจำ cache ที่เร็วกว่าแต่มีขนาดเล็กกว่า โดยปกติหน่วยความจำ cahe จะเก็บสำเนาของข้อมูลบางส่วนในหน่วยความจำหลักเอาไว้ เมื่อโปรเซสเซอร์ต้องการอ่านข้อมูลจำนวนหนึ่ง word ในหน่วยความจำ ข้อมูลส่วนนั้นจะถูกตรวจสอบว่ามีอยู่ใน cache หรือไม่ ถ้ามีอยู่ก็จะนำข้อมูลใน cache ไปใช้ ถ้าไม่มีอยู่ก็จะเกิดการคัดลอกสำเนาข้อมูลหนึ่งบล็อก จากหน่วยความจำหลักมายัง cache แล้วจึงนำ word ที่ต้องการส่งไปให้โปรเซสเซอร์ในภายหลัง

รูป 4.4 แสดงโครงสร้างของหน่วยความจำ cache และหน่วยความจำหลัก หน่วยความจำหลักประกอบด้วย ที่เก็บข้อมูลจำนวน 2 words ที่สามารถถูกอ้างอิงได้ โดยที่แต่ละ word จะมีหมายเลขที่อยู่เป็นเลขฐานสองจำนวน n-bit เป็นหมายเลขเฉพาะตัวเอง

รูป 4.5 การอ่านข้อมูลจากหน่วยความจำ cache

4.3 องค์ประกอบในการออกแบบ Cache

หัวข้อนี้กล่าวถึง เรื่องทั่วไปเกี่ยวกับองค์ประกอบที่เข้ามาเกี่ยวข้องในการออกแบบ cache และรายงานผลที่เกิดขึ้นให้ทราบ

ขนาดของ Cache

องค์ประกอบตัวแรกคือ ขนาดของ cache(cache size) ซึ่งได้กล่าวไปบ้างแล้ว โดยทั่วไปนักออกแบบต้องการให้ cache มีขนาดเล็กเพียงพอที่จะทำให้ราคาเฉลี่ยต่อบิตนั้นใกล้เคียงกับราคาของหน่วยความจำหลัก และต้องการให้มีขนาดใหญ่เพียงพอ เพื่อให้ค่าเฉลี่ยของเวลาในการเข้าถึงข้อมูลใกล้เคียงกับระยะเวลาในการเข้าถึงข้อมูลของ cache

ฟังก์ชันแม็บปิง

เนื่องจาก cache มีช่องสัญญาณน้อยกว่าจำนวนบล็อกในหน่วยความจำหลัก จึงจำเป็นต้องมีอัลกอริทึม สำหรับการกำหนดตำแหน่งหน่วยความจำของแต่ละบล็อก ไปยังช่องสัญญาณใน cache เรียกว่า การแม็บปิง (mapping) นอกจากนี้ ยังต้องมีวิธีการสำหรับการตรวจสอบว่าบล็อกใดที่ยังคงเก็บไว้ในช่องสัญญาณ cache

การจัดโครงสร้างภายใน cache แบบที่ง่ายที่สุดเป็นแบบ ไดเร็กแม็บปิง (Direct mapping) ซึ่งจะกำหนดตำแหน่งของแต่ละบล็อกไว้ที่ตำแหน่งของสัญญาณ cache ที่เดิมเสมอ ไม่มีการเปลี่ยนแปลง

เมื่อ

i  คือ  หมายเลขช่องสัญญาณ cache

j   คือ  หมายเลขบล็อก

m  คือ   จำนวนช่องสัญญาณของ cache

แอสโซซิเอทีฟแม็บปิง (Associative mapping) ได้แก้ปัญหาของไดเร็กแม็บปิงโดยยินยอมให้หน่วยความจำแต่ละบล็อก สามารถถูกอ่านเข้ามาไว้ใน cache ช่องใดก็ได้ในกรณีนี้ในการแปลงตำแหน่งที่อยู่จะแบ่งออกเป็นสองส่วนคือ ป้ายบอกตำแหน่ง (tag) และตำแหน่งของ word ป้ายบอกตำแหน่งใช้ในการบอกหมายเลขบล็อกของหน่วยความจำหลักการตรวจสอบว่าบล็อกนั้นอยู่ใน cache หรือไม่ ยังคงใช้วิธีการเดิมคือ การเปรียบเทียบค่าของป้ายบอกตำแหน่งที่มากับข้อมูล กับค่าของป้ายบอกตำแหน่งที่เก็บอยู่ใน cache ดังนั้นจึงไม่มีการตรวจสอบหมายเลขช่องสัญญาณใน cache ค่าต่างๆ สรุปได้ดังนี้

  • ความยาวของหมายเลขตำแหน่งที่อยู่ (address length) = (s+w) บิต
  • จำนวน word (หรือ ไบต์) ในหน่วยความจำหลัก = 2s+w word
  • ขนาดของบล็อก = 2w words (หรือ ไบต์)
  • จำนวนบล็อกในหน่วยความจำหลัก
  • จำนวนช่องสัญญานใน cache = ไม่มีการกำหนดตายตัว
  • ขนาดของป้ายบอกตำแหน่ง = s บิต

เซ็ตแอสโซซิเอทีฟแม็บปิง (Set associative mapping) เป็นวิธีการผสมที่ได้นำข้อดีของทั้งไดเร็กแม็บปิง และแอสโซซิเอทีฟแม็บปิงมาใช้ ในขณะที่พยายามลดข้อด้อยให้มีผลกระทบน้อยลง ในกรณีนี้ หน่วยความจำ cache จะถูกแบ่งออกเป็นเซตจำนวน v เซ็ต แต่ละเซ็ตประกอบด้วยช่องสัญญาณจำนวน k ช่อง สรุปความสัมพันธ์ได้ดังนี้

M = v x k

I = j modulo v

เมื่อ

I = หมายเลขเซ็ตใน cache

J = หมายเลขบล็อกในหน่วยความจำหลัก

M = จำนวนช่องสัญญาณใน cache

4.3 อัลกอริทึมการแทนที่

เมื่อข้อมูลลบบล็อกใหม่ถูกอ่านขึ้นมาจากหน่วยความจำ หนึ่งในบล็อก หนึ่งในบล็อกเดิมที่ถูกอ่านเข้ามาไว้ใน cache จะต้องถูกแทนที่ด้วยบล็อกใหม่ สำหรับไดเร็กแม็บปิงจะมีช่องสัญญาณเพียงช่องเดียวเท่านั้นที่จะเป็นที่อยู่ใน cache สำหรับข้อมูลแต่ละบล็อก จึงไม่จำเป็นต้องคิดหาวิธีการแทนที่ใด ๆ แต่สำหรับการแทนที่ (Replacement algorithm) มาใช้งาน เพื่อตอบสนองความรวดเร็วในการทำงาน วิธีการที่นิยมนำมาใช้กันโดยทั่วไปมี 4 วิธี

1 วิธีแอลอาร์ยู (Least recently used;LRU)  เป็นวิธีนำบล็อกใหม่มาแทนที่บล็อกเก่าที่ถูกเก็บไว้ในแคช  เป็นเวลานานที่สุด  โดยที่มีการนำไปใช้งานน้อยที่สุด  สำหรับ 2-way set associative

2 วิธีแบบเข้าคิว (First-in-First-out;FIFO) เป็นวิธีทดแทนบล็อกที่ถูกอ่านขึ้นมานานมากที่สุด

3 วิธีแบบแอลเอฟยู (Lease frequently used;LFU) เป็นวิธีทำการทดแทนบล็อกที่ถูกอ้างอิงเป็นจำนวนครั้งน้อยที่สุด  การสร้างขึ้นมาใช้งานจำเป็นจะต้องมีตัวนับการใช้งานข้อมูลแต่ละช่องสัญญาณ  เพื่อหาช่องสัญญาณที่มีการนำมาใช้งานน้อยที่สุด

4 วิธีการสุ่ม (random) เป็นวิธีเลือกช่องสัญญาณที่จะถูกทดแทนด้วยวิธีการสุ่มหมายเลขช่องสัญญาณขึ้นมาในแต่ละครั้งที่มีความต้องการเกิดขึ้น

นโยบายการบันทึกลงหน่วยความจำหลัก

  1. Write through  :  เป็นวิธีที่ง่ายที่สุด  ทุกครั้งที่มีการบันทึกข้อมูลลงในแคช จะถูกบันทึกในหน่วยความจำหลักทันที โดยข้อมูลในหน่วยความจำหลักและทุกส่วนของแคชจะมีค่าเท่ากันเสมอ อุปกรณ์อื่นที่มีการเชื่อมต่อระหว่างโปรเซสเซอร์และแคช จะคอยปรับปรุงข้อมูลให้สอดคล้องกับข้อมูลในหน่วยความจำหลักเสมอ ข้อเสียคือ  อาจเกิดจุดปัญหาคอขวดของระบบได
  1. Write back       :  เป็นวิธีบันทึกบันทึกข้อมูลภายหลัง ซึ่งช่วยลดจำนวนครั้งในการบันทึกข้อมูลลงหน่วยความจำหลักให้เหลือน้อยที่สุด ปล่อยให้มีการปรับปรุงแก้ไขข้อมูลเกิดขึ้นในแคชเท่านั้น เรียกว่า Update บิต  ซึ่งเมื่อมีการแก้ไขข้อมูลในบล็อกจะถูกแทนที่ด้วยข้อมูลบล็อกใหม่ และจะบันทึกลงสู่หน่วยความจำหลักเมื่อบิตมีค่าเปลี่ยนไปจากเดิมเท่านั้น ข้อเสียคือ  ข้อมูลในแคชและหน่วยความจำหลักอาจไม่เหมือนกัน อุปกรณ์ I/O ต้องติดต่อหน่วยความจำหลักผ่านแคชเท่านั้น ทำให้วรจรทำงานซับซ้อน  และอาจเกิดจุดปัญหาคอขวดของระบบได้

ขนาดของบล็อกในแคช

บล็อกที่มีขนาดใหญ่จะลดจำนวนบล็อกที่จะสามารถอ่านเข้ามาเก็บไว้ในแคช เนื่องจากบล็อกใหม่ที่อ่านเข้ามาจะถูกบันทึกแทนที่บล็อกข้อมูลเก่าที่มีอยู่ก่อนหน้า  ดังนั้นยิ่งมีจำนวนบล็อกน้อยลงก็จะยิ่งทำให้บล็อกเก่าถูกลบทิ้งเร็วขึ้น  อีกทั้งถ้าบล็อกมีขนาดใหญ่ขึ้น  ข้อมูลที่อ่านเข้ามาเพิ่มขึ้นจะยิ่งอยู่ในตำแหน่งที่ห่างไกลจากตำแหน่งข้อมูลที่กำลังถูกเรียกใช้งานมากยิ่งขึ้น ซึ่งเป็นการขัดต่อกฎการอ้างอิงพื้นที่ใกล้เคียงดังนั้นจึงมีโอกาสที่จะถูกนำมาใช้งานน้อยลง

ความสัมพันธ์ระหว่างขนาดของบล็อก  และอัตราการค้นพบข้อมูลที่ต้องการในแคช (hit ratio) ขึ้นอยู่กับลักษณะการทำงานของแต่ละโปรแกรมเป็นหลัก  โดยบล็อกขนาด 8-32 ไบต์เหมาะสมสำหรับงานทั่วไป และขนาด 64-128 ไบต์นั้นเหมาะสมกับเครื่องคอมพิวเตอร์ความสามารถสูง

จำนวนของ Cache

แคชที่มีหลายลำดับชั้น

แคชที่อยู่บนชิพ (On-chip cache) หรือที่เรียกว่าแคช L1

แคชภายนอก ที่เรียกว่าแคช L2

การใช้งานแคชแบบเก็บข้อมูลรวมหรือแยก ถ้าใช้แบบรวมข้อมูลจะมีข้อดีคือ

การเก็บแบบรวมจะมีอัตราการพบข้อมูลมากกว่าการเก็บแบบแยก

การออกแบบและการนำไปใช้งานในการเก็บแบบรวมจะง่ายกว่าการเก็บแบบแยก

แนวโน้มการเก็บข้อมูลจะมุ่งไปทางการเก็บแบบแยก ซึ่งมีข้อดีตรงที่ช่วยลดการแข่งขันของแคชในการนำข้อมูลเข้าและแปลข้อ

Cache แบบหลายระดับ

ปัจจุบันมีการนำแคชทั้งสองชนิดมาใช้งานร่วมกัน  และเรียกโครงสร้างประเภทนี้ว่าแคช 2 ระดับ  โดยแคชระดับที่ 1 (cache L1) หมายถึง  on-chip cache  และระดับที่ 2  (cache L2) หมายถึง แคชภายนอก

การนำ cache L2 มาใช้  เนื่องจากเมื่อโปรเซสเซอร์ไม่สามารถหาข้อมูลได้จาก cache L1 ก็จะเกิดการอ้างอิงไปที่หน่วยความจำหลักผ่านบัสหลักของระบบคอมพิวเตอร์  ซึ่งเสียเวลานานมากและทำให้ทั้งระบบมีประสิทธิภาพการทำงานลดลง การนำ cache L2 มาใช้  ข้อมูลส่วนหนึ่งจะถูกพบที่นี่  ซึ่งช่วยให้การเข้าถึงข้อมูลนั้นเร็วมากกว่าการเข้าถึงหน่วยความจำหลักโดยตรง  โดยเฉพาะถ้าชิพที่นำมาสร้าง cache L2  เป็นแบบ SRAM ที่มีความเร็วเท่ากับบัสแล้ว  ข้อมูลในนี้จะถูกนำส่งโปรเซสเซอร์ได้โดยไม่มีการรอจังหวะสัญญาณนาฬิกา (zero – wait state transaction)  เกิดขึ้นเลยซึ่งเป็น cache L2  ชนิดที่เร็วที่สุด

การออกแบบแคช 2  ระดับสำหรับใช้งานมีข้อสังเกต 2 ประการ

1. สำหรับ cache L2   มักไม่เชื่อมโยงเข้ากับบัสหลัก  แต่จะมีบัสแยกต่างหาก (local bus) ที่เชื่อมโยง cache L2   เข้ากับโปรเซสเซอร์โดยตรง  ทั้งนี้เพื่อเป็นการลดปริมาณข้อมูลที่จะต้องผ่านบัสหลัก

2. สำหรับลดขนาดของอุปกรณ์ภายในโปรเซสเซอร์ให้เล็กลง  โดยบรรจุ  cache L2  เข้าไปไว้ในชิพโปรเซสเซอร์เช่นเดียวกับ cache L1 ซึ่งจะช่วยเพิ่มประสิทธิภาพให้สูงขึ้น

แคชแบบ Unified (Unified Cache) และแบบ Split (Split Cache)

1.   Unified Cache สำหรับเก็บได้ทั้งข้อมูลและคำสั่งปนกัน

ข้อดีของ Unified cache

·     สามารถรักษาสมดุลระหว่างการเรียกใช้คำสั่งและข้อมูลได้โดยอัตโนมัติ  คือหากมีการเรียกใช้คำสั่งมากกว่าข้อมูล  แคชก็จะถูกบันทึกไว้ด้วยคำสั่งในปริมาณที่มากกว่าข้อมูล  และในทางกลับกันแคชจะมีข้อมูลมากกว่าคำสั่งถ้าโปรแกรมที่กำลังทำงานอยู่นั้นอ้างอิงข้อมูลจำนวนมากโดยใช้คำสั่งซ้ำๆ

·      การออกแบบและสร้างง่ายกว่าเพราะไม่ต้องแยกชนิดของแคช

2 . Split Cache สำหรับเก็บคำสั่งและสำหรับเก็บข้อมูลออกจากกัน

ข้อดีของ Split cache

ช่วยกำจัดความคับคั่งของแคช  ระหว่างหน่วยที่ดึงและแปลความหมายคำสั่ง (instruction prefetcher) และหน่วยที่ทำการประมวลผล  (execution unit)  ซึ่งเป็นสิ่งทีสำคัญมากในการออกแบบคำสั่งแบบไปป์ไลน์ (pipelined instruction) คือ โดยปกติโปรเซสเซอร์จะดึงคำสั่งเข้ามาล่วงหน้าและคอยเติมบัฟเฟอร์หรือไปป์ไลน์ด้วยคำสั่งที่จะประมวลผลให้ต่อเนื่องอยู่เสมอ  ในกรณีที่ใช้  unified cache  เมื่อการประมวลผลมีการอ้างอิงถึงการอ่านหรือบันทึกข้อมูลลงในหน่วยความจำ  ความต้องการนี้จะถูกส่งไปที่ unified cache   ถ้าในเวลาเดียวกัน  หน่วยที่ดึงและแปลความหมายคำสั่งก็ออกคำสั่งให้ unified cache    อ่านคำสั่งต่อไปเข้ามา  ก็จะถูกสั่งให้หยุดรอเป็นการชั่วคราว  เพื่อรอให้การส่งข้อมูลไปยังหน่วยประมวลผลเสร็จสิ้นก่อนจึงจะส่งคำสั่งต่อไปให้  ปัญหาความคับคั่งในการใช้งานนี้ จะลดประสิทธิภาพการทำงานของไปป์ไลน์ลงไปอย่างมาก  ซึ่ง split cache สามารถแก้ปัญหานี้ได้

4.4 – 1 โครงสร้างของ Cache ใน Pentium  4

วิวัฒนาการของการพัฒนาหน่วยความจำ Cache สามารถเห็นได้ชักเจนจากวิวัฒนาการของไมโครโปรเซสเซอร์จากบริษัทอินเทลโปรเซ็สเซอร์

รูป 4.13แสดงโครงสร้างแบบง่ายๆของ Pentium 4 โดยเน้นที่ Cache ทั้งสามส่วนแกนหลักของโปรเซสเซอร์ประกอบด้วยส่วนสำคัญดังนี้

  • Fetch/decode unit ทำหน้าที่เป็นหน่วยดึงคำสั่งเข้ามาจาก L2 cache
  • Out-of-order execution logic การจัดตะรางการทำงานของ micro-operation นั้นขึ้นอยู่กับ data dependencies และการใช้งานทรัพยากร
  • Execution units ทำหน้าที่ประมวลผลคำสั่ง micro-operation ดึงข้อมูลที่เกี่ยวข้องจาก L1 data cache และเก็บผลลัพธ์ไว้ในรีจิสเตอร์เป็นการชั่วคราว
  • Memory subsystem หน่วยนี้ประกอบด้วย L2 cache และบัสหลักซึ้งใช้ในการเข้าถึงหน่วยความจำหลักเมื่อคำสั่งหรือข้อมูลที่ต้องการไม่มีอยู่ใน L1 และ L2  Cache รวมทั้งการติดจ่อกับหน่วยไอโอของระบบ

โครงสร้าง  Cache สำหรับคำสั่ง (instruction cache) ของโปรเซสเซอร์ Pentium 4 แตกต่างจากโครงสร้างที่ใช้ใน Pentium รุ่นก่อนหน้าและโปรเซสเซอร์อื่นทั่วไป

หน่วยความจำ data cache ใช้ในนโยบายการบันทึกข้องมูลแบบ write-back นั้นคือข้อมูลใน Cacheจะถูกบันทึกลงในหน่วยความจำ

การควบคุม L1 data Cache นั้นกระทำผ่านข้อมูลจำนวน 2บีตที่เก็บอยู่ในรีจิสเตอร์สำหรับการควบคุมคือ CD และ NW ซึ่งมีค่าต่างๆดังที่แสดงในตราง 4.4 นอกจานี้ยังมีคำสั่งของ Pentium 4 อีกสองคำสั่งเพื่อใช้ในการ

ควบคุมข้อมูลใน CacheคือINVD ซึ่งจะบังคับให้บันทึกข้อมูลใน Cache ลงหน่วยความจำหลัก และส่งสัญญาณอย่างเดียวกันนี้ไปยัง L2 Cache เพื่อทำงานอย่างเดียวกันและ WBINVD ซึ่งจะสั่งการให้ใช้วิธีการ write back พร้อมกับการบังคับให้มีการบันทึกใน Cache ลงในหน่วยความจำหลัก และสั่งต่อไปให้ L2 Cache เพื่อให้ทำงานอย่าเดียวกัน

4.4 – 2 โครงสร้างของ Cache ใน PowrerPC

โครงสร้าง cache ของโปรเซสเซอร์  PowerPC แสดงให้เห็นถึงความเกี่ยวข้องกับโครงสร้างทั้งหมดของโปรเซสเซอร์ในตระกูลนี้ ในการพัฒนาประสิทธิภาพอย่างไม่หยุดยั้งอันเป็นความตั้งใจของนักออกแบบทุกคน ตาราง 4.5 แสดงให้เห็นถึงความก้าวหน้าในการพัฒนานี้เริ่มต้นจาก 601 ซึ่งเป็นโมเดลแรก ประกอบด้วย cache รวมขนาด 32 Kbytes แบบ 8-way เซ็ตแอสโซซิเอทิฟ รุ่น 603 มีโครงสร้าง RISC ที่ซับซ้อนมากขั้นแต่มี cache ขนาดเล็กลงคือ 16 Kbytes สำหรับคำสั่ง ซึ่งเป็นแบบ 2-way เซ็ตแอสโซซิเอทีฟทั้งสองชนิด ทำให้ 603 มีความสามารถระดับเดียวกับ 601 แต่มีราคาถูกลง รุ่น 604 และ 620 เพิ่มขนาดของ cache เป็นสองเท่าทั้งสองส่วน โปรเซสเซอร์ G3 และ G4 มี L1 cache ขนาดเท่ากับรุ่น 620

ตาราง 4.5 หน่วยความจำ cache ภายใน PowerPC

Model                    Size                      Bytes/Line                        Organization

PowerPc601                       1 32-Kbyte                               32                             8-way set associative

PowerPc603                       2 8-Kbyte                                32                             2-way set associative

PowerPc604                       2 16-Kbyt e                             32                             4-way set associative

PowerPc620                       2 32-Kbyte                              64                             8-way set associative

PowerPc G3                       2 32-Kbyte                               64                             8-way set associative

PowerPc G4                       2 32-Kbyte                               32                             8-way set associative

รูป 4.14 แสดงภาพโครงสร้างของ PowerPC G4  โดยเน้นที่ตำแหน่งของ cache ทั้งสองส่วน หน่วยประมวลผล (execution unit) ประกอบด้วย integer arithmetic and logic unit จำนวน 2 หน่วยซึ่งสามารถทำงานได้พร้อมกัน และ floating-point unit จำนวน 1 หน่วยที่มีรีจิเตอร์ ตัวคูณ (multiplier) ตัวบวก (adder) และตัวหาร (divider) เป็นของตนเอง หน่วย data cache จะป้อนข้อมูลทั้งที่เป็น integer และ floating-point ผ่านหน่วย load/store ส่วน instruction หน่วย L1 cache จัดโครงสร้างแบบ 8-way เซ็ตแอสโซซิเอทิฟ และ L2 cache จัดโครงสร้างแบบ 2-way เซ็ตแอสโซซิเอทิฟที่มีขนาด 256Kyte,512Kyte, หรือ 1 Mbyte

Posted in วิชาสถาปัตยกรรมคอมพิวเตอร์ | 1 Comment

งานบทที่5 หน่วยความจำภายใน

ณัฐภรณ์ พันทวี 5401103077040
หลังจากที่ได้อ่าน มีความรู้สึกว่า บางอย่างของเนื้อหาก็ไม่เข้าใจ

บางอย่างก็เข้าใจง่ายดีครับ

ขอบคุณครับ

Posted in Uncategorized | Leave a comment

???

Posted in Uncategorized | Leave a comment