por Pakapol Premprasopchok hace 1 año
72
Ver más
ใช้ Pagetable ในการ เข้าถึงข้อมูลถึงสองรอบ
Preformance ไม่ดี
เป็นแบบใส่ช่องไหนก็ได้เราเลือกเอง ทำเหมือน 2 way อิสระมาก
คือการที่ Cache ช่องนึงมีสองช่อง 00,01 โดยดูจากเลขท้าย Valid bit ว่าเป็น 0 หรือ 1 ด้วยการ Random
ใช้วิธีการจับคู่ข้อมูล โดน/ไม่โดน โดยการเช็ค 2 อย่างนี้
Valid bit = ข้อมูลใน Cache เป็นตัวที่ต้องการมั้ย
Tags = เลข สองตัวหน้า _ _ บอกว่ามาจากไหนของแรม เช็คว่าถูกมั้ย
มี Pagetable เก็บการทำงานของโปรแกรง
เวลาที่เสียไปกับการลงไป หาข้อมูลชั้นล่างๆ ของมัน (ยิ่งเยอะ ยิ่งเสียเวลาเยอะ)
เวลาที่เสียไปกับการหาข้อมูลในชั้นเดียว
หาข้อมูลไม่เจอในชั้นแรก และต้องลงไปอีกชั้น
hit = หาข้อมูลเจอในชั้นแรก
ยิ่งไกล ยิ่งห่าง
เก็บได้มากขึ้นเรื่อยๆ ลงไปช้าขึ้นเรื่อยๆ
ยิ่งใกล้ Pocessor
เก็บได้น้อย ไวกว่าชั้นล่าง แพง
GPU = Muti-Tread SIMD แต่ได้ result แบบ MIMD ทำให้มี OpenCL , Vulcan
Nvdia มี CUDA สามารถ เขียน Thread แบบ Low Level เลย
การสลับ
SMP
เก็บขึ้น Cloud ใช้เก็บ Position ของ
NUMA
เหมือนกันแต่ ต้อง Request
UMA
ส่ง Address
Physical Mem
แชร์กันใช้ได้ทีเดียว
SMT
ตัวไหนพร้อมมาทำเลย
หยาบ
สลับตอนเกิด Cache Miss
ละเอียด
บังคับสลับกับ Thread ทุกๆ Clock cycle
Process
ทำสลับกับ OS ทำงานช้า
Thread
มี Counter บอกทำงานถึงไหน สลับกันใน Core
Single Program Muti Data
คำสั่งเดียว ใช้ Data Stream หลายตัว (ใช้ Vector register ให้คำสั่งต่อเนื่อง)
Muti / Cache Pallarial ex . Quantum Comp
คล้ายกับ SSISD But Varity ใช้ Vector กับ Scalar
Scalar
เรียกทีละบรรทัด
ไม่รู้เลยโง่
Vector (ดีกว่า)
เรียกครั้งเดียว
รู้ Pattern For Array
ใช้คำสั่งของมันจะไม่เจอ Branch (if/else) = ไม่เจอ Control Hazard
Single อันแรกสุด "ใช้คำสั่ง 1 คำสั่ง แต่ทำหลายอย่าง"
ไม่เกิด Cache miss ใช้ดีกับ For/Data Level Parallax ไม่ดีกับ switch / case
Pipeline Hazard
Control
เกิดจาก Check เงื่อนไขทั้งหมด แล้วไม่รู้คำสั่งถัดไป
แก้ไม่ได้ เกิดบ่อยแต่ถ้าจะแก้ คือ Branch Prediction
Final State
เดาจากประวัติ และประมาณ %
Data
เป็นเพราะ load-use
แก้ด้วย Bubble = ปล่อยมันไป
เป็นเพราะใช้คำสั่งก่อนหน้า มาเป็นผลลัพท์ในคำสั่งต่อไป
แก้ด้วย Forwarding / by Passing
Structural
เป็นเพราะ Hardware
ระบบการทำงาน
5.Mem
เขียนกลับไปใน Memory
4.writeback
เขียนกลับไปใน Register
3.excute
ประมวลผลข้อมูล
2.Decode
ถอดคำสั่งว่าต้องใช้คำสั่งอะไร
1.Fetch
ดึง Address จาก Memory
ชุดคำสั่ง
ข้อมูลการคำนวน
1 รอบ & Cycle
Datapath
Data Memory Unit
Signal
ส่งคลื่คำสั่งมาบอก Memory Write
Memory Write
ตัวเขียนข้อมูล
เก็บข้อมูลคำนวนแล้วใน ชุดคำสั่ง ข้อมูลต่างๆ
Sign-ex
แปลงข้อมูลขยายให้เป็น 32 bit เท่ากัน
ALU
คำนวนทั้งตัวตัวเลขและตรรกะ
Branch
Not Taken = ไม่จริง ทำงานบรรทัดถัดไป
Taken = จริง
ALU Operand
สั่งให้คำนวนอะไร
Register File
Register Write
คนคุม
ดึงข้อมูลมา อ่าน เขียน จัดเก็บ ข้อมูลชั่วคราว
หน่วยเก็บคำสั่งและข้อมูล
ประมวลผลผ่าน Datapath
3.Adder *แค่บวก
ทำการบวก
2. Program Counter
เก็บ Address ถัดไป แล้วส่งคำสั่ง
1. เก็บชุดคำสั่ง
เก็บคำสั่งรอการใช้และส่ง Address
เก็บ Addres
อ่านคำสั่งว่าใช้ register อะไร ประเภทไหน
ทำงานตาม Clock Cycle
ดึง -> ถอด -> คำนวน -> เก็บ