CPU
Single Processer
Central Processer Unit
Concept
ดึง -> ถอด -> คำนวน -> เก็บ
ทำงานตาม Clock Cycle
เก็บ Addres
อ่านคำสั่งว่าใช้ register อะไร ประเภทไหน
Logic Design Convention
1 รอบ & Cycle
ประมวลผลผ่าน Datapath
1. เก็บชุดคำสั่ง
เก็บคำสั่งรอการใช้และส่ง Address
2. Program Counter
เก็บ Address ถัดไป แล้วส่งคำสั่ง
3.Adder *แค่บวก
ทำการบวก
Datapath
หน่วยเก็บคำสั่งและข้อมูล
Register File
ดึงข้อมูลมา อ่าน เขียน จัดเก็บ ข้อมูลชั่วคราว
Register Write
คนคุม
ALU
ALU Operand
สั่งให้คำนวนอะไร
คำนวนทั้งตัวตัวเลขและตรรกะ
Branch
Taken = จริง
Not Taken = ไม่จริง ทำงานบรรทัดถัดไป
Sign-ex
แปลงข้อมูลขยายให้เป็น 32 bit เท่ากัน
Data Memory Unit
เก็บข้อมูลคำนวนแล้วใน ชุดคำสั่ง ข้อมูลต่างๆ
Memory Write
ตัวเขียนข้อมูล
Signal
ส่งคลื่คำสั่งมาบอก Memory Write
Machine Cycle (Pipeline)
ระบบการทำงาน
1.Fetch
ดึง Address จาก Memory
ข้อมูลการคำนวน
ชุดคำสั่ง
2.Decode
ถอดคำสั่งว่าต้องใช้คำสั่งอะไร
3.excute
ประมวลผลข้อมูล
4.writeback
เขียนกลับไปใน Register
5.Mem
เขียนกลับไปใน Memory
Pipeline Hazard
Structural
เป็นเพราะ Hardware
Data
เป็นเพราะใช้คำสั่งก่อนหน้า
มาเป็นผลลัพท์ในคำสั่งต่อไป
แก้ด้วย Forwarding / by Passing
เป็นเพราะ load-use
แก้ด้วย Bubble = ปล่อยมันไป
Control
เกิดจาก Check เงื่อนไขทั้งหมด
แล้วไม่รู้คำสั่งถัดไป
แก้ไม่ได้ เกิดบ่อยแต่ถ้าจะแก้
คือ Branch Prediction
เดาจากประวัติ และประมาณ %
Final State
Parrallel Processer
ประเภท
SSISD
Single อันแรกสุด
"ใช้คำสั่ง 1 คำสั่ง
แต่ทำหลายอย่าง"
ไม่เกิด Cache miss
ใช้ดีกับ For/Data Level Parallax
ไม่ดีกับ switch / case
MIMD
Muti / Cache Pallarial
ex . Quantum Comp
คล้ายกับ SSISD But Varity
ใช้ Vector กับ Scalar
Vector
(ดีกว่า)
เรียกครั้งเดียว
รู้ Pattern For Array
ใช้คำสั่งของมันจะไม่เจอ
Branch (if/else) = ไม่เจอ
Control Hazard
Scalar
เรียกทีละบรรทัด
ไม่รู้เลยโง่
SIMD
คำสั่งเดียว
ใช้ Data Stream หลายตัว
(ใช้ Vector register ให้คำสั่งต่อเนื่อง)
SPMD
Single Program
Muti Data
Hardware Muti-Tread
จำลอง CPU เสมือนกันสองตัว
และสลับผลัดกันใช้
Thread
มี Counter
บอกทำงานถึงไหน
สลับกันใน Core
Process
ทำสลับกับ OS
ทำงานช้า
การสลับ
ละเอียด
บังคับสลับกับ Thread
ทุกๆ Clock cycle
หยาบ
สลับตอนเกิด
Cache Miss
SMT
ตัวไหนพร้อมมาทำเลย
SMP
เก็บขึ้น Cloud
ใช้เก็บ Position ของ
Physical Mem
แชร์กันใช้ได้ทีเดียว
UMA
ส่ง Address
NUMA
เหมือนกันแต่
ต้อง Request
GPU
พัฒนาจากวงการเกม
GPU = Muti-Tread SIMD แต่ได้ result แบบ MIMD
ทำให้มี OpenCL , Vulcan
Subtopic
Nvdia มี CUDA สามารถ
เขียน Thread แบบ Low Level เลย
เป็นCPU ในปัจจุบัน ใช้แรมในการประมวลผลด้วย
Memory Hierarchy
การทำงาน
Temprial = ทำซ้ำๆ เช่น Loop
Special = ใช้ตัวที่เกี่ยวกับการเก็บข้อมูล
เหมือนมันเช่น Array,List,Collection,heep
Concept
ความลึก
ความหลายชั้น
ยิ่งใกล้ Pocessor
เก็บได้น้อย
ไวกว่าชั้นล่าง
แพง
ยิ่งไกล ยิ่งห่าง
เก็บได้มากขึ้นเรื่อยๆ
ลงไปช้าขึ้นเรื่อยๆ
Performance
Hit rate
hit = หาข้อมูลเจอในชั้นแรก
miss rate
หาข้อมูลไม่เจอในชั้นแรก
และต้องลงไปอีกชั้น
hit time
เวลาที่เสียไปกับการหาข้อมูลในชั้นเดียว
Miss penalty
เวลาที่เสียไปกับการลงไป
หาข้อมูลชั้นล่างๆ ของมัน
(ยิ่งเยอะ ยิ่งเสียเวลาเยอะ)
Cache Hierarchy
เลเวลในการเก็บหว่าง
Processer หับ Main Mem
มี Pagetable
เก็บการทำงานของโปรแกรง
ใช้ Direct Mapping
ส่งจาก RAM -> Cache
ใช้วิธีการจับคู่ข้อมูล โดน/ไม่โดน
โดยการเช็ค 2 อย่างนี้
Tags = เลข สองตัวหน้า _ _
บอกว่ามาจากไหนของแรม
เช็คว่าถูกมั้ย
Valid bit = ข้อมูลใน Cache
เป็นตัวที่ต้องการมั้ย
2 way assositive
คือการที่ Cache ช่องนึงมีสองช่อง
00,01 โดยดูจากเลขท้าย Valid bit
ว่าเป็น 0 หรือ 1 ด้วยการ Random
Fully assoistive
เป็นแบบใส่ช่องไหนก็ได้เราเลือกเอง
ทำเหมือน 2 way อิสระมาก
Victual Machine
สร้างคอมเสมือน
แบบ NOX
สร้างหน่วยความจำเสมือนได้
มี Page Faults
เป็น VM เก็บไว้ชื่อ swap space
Problem
Preformance ไม่ดี
ใช้ Pagetable ในการ
เข้าถึงข้อมูลถึงสองรอบ