คือผมพอรู้ว่า Register เป็นหน่วยความจำย่อยที่ไว้เก็บข้อมูลใน Cpu แต่อยากรู้ว่า Register มันประมวลผลได้เปล่า คือผมเคยเห็นผ่านๆตาแต่ ไม่แน่ใจเห็นเขาบอกว่า Register ประมวลผลเร็วกว่า CPU อะครับ แต่ไปหาข้อมูลก็เจอแต่ว่าเป็นหน่วยความจำย่อย เลยอยากรู้ว่า Register ประมวลผลได้เปล่า แล้วถ้าได้จะเร็ว กว่า CPU ไหม ขอบคุณครับ
Announcement
Collapse
No announcement yet.
ขอถามเรืื่อง Register ใน Cpu หน่อยครับ
Collapse
X
-
ผมอธิบายสั้นๆแบบนี้นะ
หัวใจของ cpu คือ alu ถือว่าเป็นส่วนสมองของจริง
register เป็นหน่วยความจำที่เหมือนแขนขาของ cpu (ไม่เกี่ยวกะ cache นะ)
สมองคิดได้ แต่การกระทำต้องผ่านแขนขา
ทั้งคู่อยู่ใน cpu
ถ้าให้งานทุกอย่าง ต้องผ่านสมองหมด งานจะช้า
งานบางอย่างที่เป็นงานประจำ จึงถูกออกแบบให้แขนขาสามารถทำงานได้เองโดยไม่ต้องพึ่งสมอง
คล้ายระบบประสาทอัตโนมัตินะ
เช่น address register มันถูกออกแบบให้เพิ่มค่าได้เองอัตโนมัติ โดยไม่ต้องถูกสั่งให้เพิ่มจาก alu
alu สั่ง address register ได้ และมันสามารถทำงานเองได้ด้วย
ไม่ใช่แค่งานลักษณะแบบนี้
งานคำนวณอีกหลายลักษณะ register หลายตัว สามารถทำงานหลายๆอย่างที่ alu ทำได้
เพราะ register เหล่านั้น มี alu เป็นของตัวเอง
ใน cpu (ซึ่งจะเรียกให้ถูกต้อง ควรเรียกว่า microprocessor) ตั้งแต่ยุค 1980 มี alu หลายตัวครับ
alu เหล่านี้ อยู่ในรูปของ register ทำให้การทำงานมีประสิทธิภาพมากขึ้น
คำสั่งที่ต้องใช้หลายขั้นตอน ที่เคยใช้จำนวน cycle มาก ก็ลดลงแบบเท่าตัว
Originally posted by kenshero View Postเลยอยากรู้ว่า Register ประมวลผลได้เปล่า แล้วถ้าได้จะเร็ว กว่า CPU ไหม
ถ้าจะเทียบกับ cpu แบบที่ถาม
จะถามกลับว่า เข้าใจรึเปล่าว่า cpu คืออะไร มันประมวลผลยังไง
เพราะถ้าเอาสองอันนี้มาเทียบความเร็วกัน แสดงว่าหลงทางแล้วครับ
register มันอยู่ใน cpu แล้วมันจะแข่งอะไรกันได้ยังไง จริงมั้ย
Comment
-
Register คือกระดาษโน๊ตครับ ไม่ไช่แขนขา แขนขาคือ I/O
เอาจริงๆก็คือแรมนั้นล่ะครับ แต่อยู่ในระดับที่เรียกว่าติดอยู่แกนกลางเลย อยู่ไกล้กว่า Cache ครับ
Register -> Cache -> RAM -> Storage
ระหว่าง Register -> Cache หรือ RAM นั้นจะกระทำผ่านกระบวนการทำงานของ CPU ผ่าน I/O ไปภายนอก
Register ประมวลผลไม่ได้ 100% สิ่งที่ประมวลผลคือกลไกลของ CPU ครับ แต่ Register บางตัวเปลี่ยนค่าเองได้ ก็ไม่ไช่ผลของ register ครับแต่เป็น control unit ที่คอยดังจับการเปลี่ยนแปลงครับ หรือผลแห่งการประมวลผลของ CPU นั้นล่ะคัรบ
Comment
-
ขอบคุณครับได้อะไรเยอะขึ้น งั้นผมขอถามเพิ่มได้ไหมครับ คือ I/O ใช่ Input Output เปล่า แล่วการทำงานของ Contro unit ที่ควบคุมการทำงาน H/W ผมอยากรู้ว่า H/W คืออะไรผมเดาว่า เป็นสัญญาณนาฬิกา แต่ไม่แน่ใจ แล้วอยากให้อธิบายเรื่อง ฮาร์ดดิสนึดหนึ่งว่า ทำไม ฮาร์ดดิสที่ขนาดเท่ากันแต่ความจุไม่เท่ากัน เพราะอะไรผมไปค้นๆดู เขาบอกเพราะถ้า โดเมนแม่เหล็กเล็กมากเท่าไหร่จะยิ่งจุมากและเร็วมากเท่านั้น แต่ผมไม่รู้ว่า โดเมนแม่เหล็กคืออะไรแบบยังง สงสัยอยู่
Comment
-
ต้องขออภัย จขกท.
พอผมอ่านปุ๊บผมก็เข้าใจว่าเป็น cache register เลย และมองข้าม register ใน ALU ไป
เรื่อง register ท่าน m shifu ก็ได้อธิบายไปแล้ว
ส่วนผมก็ไม่ได้เป็นระดับเทพด้าน ไมโครคอนโทรลเลอร์
แต่จากที่ได้ทำงานมาบ้าง เล็กน้อย ในมุมมองของผม ยังไง register ก็เป็นหน่วยความจำ
ไม่ว่ามันจะสามารถทำงานได้เอง หรือต้องเรียกมันมาทำงานในโปรแกรมก็ตาม
register มีอยู่ด้วยกันหลายแบบอย่างที่ท่าน m shifu ว่าไว้
แต่เรื่อง ALU อยู่ภายใน register ผมไม่เคยใช้งาน ผมเคยใช้งานแต่ register ที่สามารถทำชุดคำสั่งได้เอง
โดยแค่เรียกปู๊บก็ได้ผลปั๊บ ซึ่งมันจะเรียกและส่งข้อมูลไปทำงานโดยจะใช้ register กี่ตัวก็แล้วแต่ตามแต่บริษัทสร้างจะพัฒนามา
เช่น register คำสั่ง + - x / หรือ register ควบคุม timing ฯลฯ
ผมก็ยังมองว่ามันเหมือนกับ เรียกคำสั่ง ใส่ ข้อมูล แล้ว มันจะวิ่งผ่าน เกท ต่างๆ จนได้ออกมา
เหมือนกับที่แค่ + - x / เลขสองตัว ถ้าเขียนภาษา Assembly ก็ต้องเขียนตั้ง 3-4 บรรทัดกว่าจะได้คำตอบ
แต่ถ้าใช้ register มันเป็นการทำงานด้วยเวลา timing ของฮาร์ดแวร์ ในขณะที่การทำงานโปรแกรม 3-4 บรรทัดจะใช้เวลามากกว่า
Comment
-
Originally posted by kenshero View Postขอบคุณครับได้อะไรเยอะขึ้น งั้นผมขอถามเพิ่มได้ไหมครับ คือ I/O ใช่ Input Output เปล่า แล่วการทำงานของ Contro unit ที่ควบคุมการทำงาน H/W ผมอยากรู้ว่า H/W คืออะไรผมเดาว่า เป็นสัญญาณนาฬิกา แต่ไม่แน่ใจ แล้วอยากให้อธิบายเรื่อง ฮาร์ดดิสนึดหนึ่งว่า ทำไม ฮาร์ดดิสที่ขนาดเท่ากันแต่ความจุไม่เท่ากัน เพราะอะไรผมไปค้นๆดู เขาบอกเพราะถ้า โดเมนแม่เหล็กเล็กมากเท่าไหร่จะยิ่งจุมากและเร็วมากเท่านั้น แต่ผมไม่รู้ว่า โดเมนแม่เหล็กคืออะไรแบบยังง สงสัยอยู่
การทำงานของ Contro unit ที่ควบคุมการทำงาน H/W ผมอยากรู้ว่า H/W คืออะไรผมเดาว่า เป็นสัญญาณนาฬิกา แต่ไม่แน่ใจ หลักๆคือ เกทต่างๆ พวก and or nand xor gate ผลการทำงานเหมือนกับตรรกศาสตร์เลยครับ บางครั้งเรียกว่า logic gate
โดเมนแม่เหล็กเล็กมากเท่าไหร่จะยิ่งจุมากและเร็วมากเท่านั้น แต่ผมไม่รู้ว่า โดเมนแม่เหล็กคืออะไรแบบยังง คงต้องเรียนวิชาแม่เหล็กไฟฟ้าก่อน ผมก็ไม่ค่อยเข้าใจ รู้แค่ว่าตอนอาจารย์สอน ท่านบอกว่าท่านเพิ่งจะเข้าใจเรื่องแม่เหล็กอย่างถ่องแท้ก็ตอนเรียน ป.เอก
Comment
-
ไม่รู้จะอธิบายง่ายๆยังไงนะ อิ อิ
อยากให้เข้าใจตรงกันว่า cpu ที่เราเรียกกันทุกวันนี้ จริงๆคือกรอบ ที่มี alu register ฯลฯ อยู่ข้างใน
i/o ของ cpu ก็เป็น register แบบนึงนะ
ตัวอย่าง รูปที่ท่าน Indy Shopz โพสข้างบน
วงจรของ register แต่ละตัว มันไม่ได้เหมือนกันหมด มันแตกต่างกัน
ตัว A วงจรซับซ้อนมากสุด และทำงานได้มากอย่างที่สุด
ถ้าเทียบกับ 8080 ที่เป็นต้นแบบ
วงจรของ register ตัวเดียวกันกับ 8088 ก็มีวงจรไม่เหมือนกันเป๊ะครับ
register ใน cpu รุ่นแรกๆ วงจรเป็นแค่ flip-flop หลายๆตัวต่อกันตามจำนวนบิต
บางตัวใส่วงจร counter เพิ่มเข้าไป
ต่อมาก็เพิ่มวงจร counter ให้ register หลายๆตัว ทำให้คำสั่งพวก block ทำได้เร็วขึ้น
วงจรยุค 1980 เริ่มเห็นใส่ alu ลงไปใน register
เช่น 68000 ของ motorola มีการใส่ alu ลงไปใน address register ทำให้คำสั่งที่มี addressing ทำได้เร็วขึ้น
เพราะไม่ต้องอาศัย alu ตัวหลักทำการคำนวณ address
68000 มี alu 3 ตัวครับ
Originally posted by tawat_kun View Postต้องขออภัย จขกท.
พอผมอ่านปุ๊บผมก็เข้าใจว่าเป็น cache register เลย และมองข้าม register ใน ALU ไป
เรื่อง register ท่าน m shifu ก็ได้อธิบายไปแล้ว
ส่วนผมก็ไม่ได้เป็นระดับเทพด้าน ไมโครคอนโทรลเลอร์
แต่จากที่ได้ทำงานมาบ้าง เล็กน้อย ในมุมมองของผม ยังไง register ก็เป็นหน่วยความจำ
ไม่ว่ามันจะสามารถทำงานได้เอง หรือต้องเรียกมันมาทำงานในโปรแกรมก็ตาม
register มีอยู่ด้วยกันหลายแบบอย่างที่ท่าน m shifu ว่าไว้
แต่เรื่อง ALU อยู่ภายใน register ผมไม่เคยใช้งาน ผมเคยใช้งานแต่ register ที่สามารถทำชุดคำสั่งได้เอง
โดยแค่เรียกปู๊บก็ได้ผลปั๊บ ซึ่งมันจะเรียกและส่งข้อมูลไปทำงานโดยจะใช้ register กี่ตัวก็แล้วแต่ตามแต่บริษัทสร้างจะพัฒนามา
เช่น register คำสั่ง + - x / หรือ register ควบคุม timing ฯลฯ
ผมก็ยังมองว่ามันเหมือนกับ เรียกคำสั่ง ใส่ ข้อมูล แล้ว มันจะวิ่งผ่าน เกท ต่างๆ จนได้ออกมา
เหมือนกับที่แค่ + - x / เลขสองตัว ถ้าเขียนภาษา Assembly ก็ต้องเขียนตั้ง 3-4 บรรทัดกว่าจะได้คำตอบ
แต่ถ้าใช้ register มันเป็นการทำงานด้วยเวลา timing ของฮาร์ดแวร์ ในขณะที่การทำงานโปรแกรม 3-4 บรรทัดจะใช้เวลามากกว่า
แต่ใน alu ก็มี register จริงๆครับ คือเรียกตามวงจรนะ อันนี้ลงลึกกว่า diagram ของ cpu ครับ
เรื่อง alu ที่ผมพูดถึง เป็นเรื่องฮาร์ดแวร์ภายใน cpu ล้วนๆครับ cpu ทุกตัวต้องมีวงจรนี้
ใช้ทรานซิสเตอร์เหมือนกับวงจรส่วนอื่นๆ แต่รายละเอียดวงจรต่างกัน ทำให้มันเป็น alu
cpu ที่เราใช้กัน เราไม่สามารถใช้คำสั่งเรียกใช้ alu โดยตรง (ภาษา assembly ไม่มีคำสั่งนี้ ใครเรียกใช้ได้ก็ประหลาดละ)
คนที่เรียกใช้ alu คือคนที่ออกแบบ micro code ของ cpu ตัวนั้น
พวกเราออกแบบคอม เขียนโปรแกรมสั่งงาน cpu ได้หลายภาษา
แต่ cpu จะรับคำสั่งในรูปแบบ machine code จึงต้องมี compiler
cpu รับเข้าไปแล้ว ต้องแปลคำสั่งเป็น micro code อีกทีครับ
micro code จะสั่งงานในระดับฮาร์ดแวร์ เรียกใช้งานส่วนต่างๆ ซึ่งมี alu เป็นหัวใจสำคัญ
ดังนั้น ถ้าท่านไม่ได้ใช้ cpu ยุค 8 บิต ท่านก็ใช้งาน alu ใน register อยู่แล้วครับ
ลองดูคำสั่งที่มีการใช้ index addressing ในภาษา assembly ของ cpu ซึ่งจะมีหลาย Operand
กรณี cpu รุ่นเก่า เช่น z-80 ที่ไม่มี alu ใน address register (มันแค่เก็บข้อมูลอย่างเดียว)
เวลาทำงาน มันต้อง move ข้อมูลใน register แต่ละตัว มาบวกกันที่ alu หลัก
ได้ผลลัพท์ แล้วจึง move กลับไป
alu ต้องเสียเวลามาคำนวณตรงนี้ ย้ายไปย้ายมาก็เสียเวลาอีก
คนออกแบบ cpu จึงใส่ alu ลงไปที่ address register
ทีนี้ พอเจอคำสั่ง index addressing มันไม่ต้องไปรบกวน alu หลัก
มันจะโหลด operand มาบวกกันได้เอง และเก็บผลลัพท์ได้ในตัวเอง
ทำงานไปพร้อมกันกับ alu หลัก ทำให้ใช้เวลา(จำนวน cycle) น้อยลงมาก
หลักการเหมือนกับหลายๆ core นั่นแหละ
เท่านี้นะครับ เพราะเรื่องพวกนี้ ไม่ใช่เรื่องที่สมาชิกส่วนใหญ่สนใจกัน
คุยเรื่อง 80+ เร้าใจกว่าเยอะ อิ อิ
ฝาก จขกท. ด้วยข้อความที่ผมเคยโพสนะ
การจะเข้าใจเรื่องพวกนี้ ควรศึกษาจากพื้นฐาน
เริ่มที่เคมี ฟิสิก โครงสร้างอะตอม ชั้นพลังงาน
แล้วต่อที่ pn junction diode transistor
amp psu logic ไปเรื่อยๆครับ
เข้าใจ logic gate แล้วค่อยมาที่ flip flop -> counter -> ram ->alu
แล้วค่อยศึกษาระบบคอมพิวเตอร์ครับ
Comment
-
ผมพิมพ์ผิดครับ
ควรจะต้องพิมพ์ว่า register ใน CPU
ส่วนเรื่อง register ผมก็เข้าใจมาตลอดว่าเป็น หน่วยความจำ ตามตัวอย่าง diagram ข้างล่าง
ซึ่งกำลังทำความเข้าใจตามที่ท่าน m shifu อธิบายอยู่ครับ
ของ 8051
8051.png
ของ PIC
pic16B84.png
ว่าแต่...ก็ยังสงสัยอยู่ดีครับว่า...
ทำไมใน block diagram จึงไม่เอา ALU ไปไว้ใน register และ/หรือ ทำไมไม่เอา register ไปไว้ใน ALU
และ
ทำไมลากเส้นจาก Fetch/Decode ไปที่ register
Comment
-
^^
Register คือ หน่วยความจำเท่านั้น คุณเข้าใจถูกแล้วครับ ส่วนที่บอกว่า Register ทำงานได้นั้นเป็นการเข้าใจผิดแน่นอน ที่ทำงานคือ control unit ที่คอย monitor register เหล่านั้นตางหากครับ ซึ่งพวกนี้น่าจะจัดรวมให้เป็นส่วนหนึ่งของ ALU มากกว่าส่วนหนึ่งของ Register ครับ
Comment
Comment