สวัสดีครับ วันนี้เราก็จะมาพูดถึงเรื่องใกล้ตัวกันสักนิดเกี่ยวกับอุปกรณ์สำคัญในเครื่องคอมพิวเตอร์ที่หลาย ๆ คนรู้จักกันดี สิ่ง ๆ นั้นก็คือ แรม หรือ RAM (Random Access Memory) นั่นเอง
 
RAM
 
หน้าที่ของเจ้านี่ก็จะคล้ายกับกระดาษทด/โน๊ต หรือ พื้นที่สมองเอาไว้ทดเลขในใจของของคอมพิวเตอร์ที่เอาไว้ cache ข้อมูลชั่วคราว เพื่อนำไปประมวลผลได้ทันทีที่ต้องการ เนื่องจาก RAM นั้นมี access time และ bandwidth ที่เหนือกว่าอุปกรณ์เก็บข้อมูลถาวรอย่างพวก HDD หรือ DVD แต่ข้อจำกัดก็คือข้อมูลทั้งหมดก็จะหายไป ถ้าหากไม่มีไฟมาเลี้ยงตัวมันนั่นเองครับ
 
 
 
Memory Controller

แล้ว CPU จะติดต่อกับ RAM ยังไงล่ะ? --- CPU จะทำการติดต่อและดึงข้อมูลจาก RAM ผ่านชิพที่เรียกกันว่า Memory controller ซึ่งเมื่อก่อนมันจะอยู่ในชิพเซตที่เรียกว่า Northbridge บนเมนบอร์ดอีกทีนั่นเอง
 
[CPU] < ------ > [Northbridge] < ------- > [RAM]
 
แต่ CPU สมัยนี้ได้ทำการรวม Memory controller เอาไว้ใน CPU เลยเพื่อลดเวลาการติดต่อกับ RAM ทำให้ประสิทธิภาพเพิ่มขึ้น เพราะสามารถติดต่อได้โดยตรงเลย ไม่ต้องผ่านชิพนอก CPU อีกต่อไป
 
 
[CPU + Memory Controller] < ------- > [RAM]
 
 
ทีนี้ RAM ช้าหรือเร็วส่งผลกระทบต่อประสิทธิภาพของเครื่องอย่างไร ... logic ปกติคือ RAM เป็นเหมือนกระดาษทด หรือพื้นที่สมองที่เอาไว้คิดเลขในใจของเรา ถ้ามันช้าก็จะนำข้อมูลที่ทดเอาไว้มาใช้ได้ช้า ถึงแม้ว่า CPU จะเร็วแค่ไหนก็ตามมันจึงได้เป็นคอขวด ทำให้ระบบโดยรวมช้าไปทั้งหมดด้วยนั่นเอง
 
รู้ไว้ใช่ว่า
AMD ไม่ได้เป็นเจ้าแรกที่ทำการรวม Memory controller ลงบน CPU หากแต่เป็นเจ้าแรกที่ทำให้เทคโนโลยีนี้มีชื่อเสียงขึ้นมา โดยเริ่มเมื่อปี 2003 ได้นำเทคโนโลยีนี้มาใช้กับคอร์ CPU ที่ชื่อว่า SledgeHammer (Opteron, Athlon FX-51 - Socket 940) และ Clawhammer (Athlon 64 - Socket 754) ส่วน Intel นั้นเริ่มนำเทคโนโลยีนี้มาใช้เมื่อปี 2009 โดยเริ่มกับสถาปัตยกรรม Nehalem (Core i7 9xx, Xeon 35xx, Xeon 55xx - Socket LGA1366) ... ส่วน CPU ตัวแรกที่มีการรวม memory controller เข้ามาใน CPU คือ Transmeta Crusoe ในปี 2001 แต่ก็ไม่ได้มีชื่อเสียงนักเพราะประสิทธิภาพค่อนข้างต่ำมาก
 
 
 
Bandwidth
 
ก่อนจะพูดถึงเรื่องต่อไปเรามาพูดถึงเรื่อง Bandwidth หรือ ช่องทางการรับ-ส่งข้อมูล ของแรมกันก่อน ... คำว่า bandwidth ในที่นี้เราจะหมายถึงความเร็วสูงสุดในอุดมคติ (หรือในทางทฤษฎี) ที่อุปกรณ์นั้น ๆ จะส่งถ่ายข้อมูลกันได้ มีหน่วยเป็นไบท์ต่อวินาที (byte/s, MB/s, GB/s)
 
โดยค่า bandwidth นี้สามารถที่จะคำนวณได้ด้วยสูตรนี้
 
bandwidth = [สัญญาณนาฬิกาจริง หรือ clock rate] * [จำนวนข้อมูลที่ส่งได้ในหนึ่งสัญญาณนาฬิกา หรือ data rate] * [จำนวนบิทที่สามารถส่งได้ในหนึ่งสัญญาณนาฬิกา หรือ bus width] / 8
 
เช่น สมมติว่าเรามี RAM แบบ DDR3-1600 จำนวน 1 แถว
 
Spec จริงของ RAM
- ความเร็วจริง (clock rate) = 800MHz
- สามารถส่งข้อมูลได้ในหนึ่งสัญญาณนาฬิกา = 2 ครั้ง (DDR - double data rate)
- ทำงานแบบ Single-channel ฉะนั้นมี bus width = 64-bit
 
ก็จะคิด bandwidth ได้ดังนี้:
 
800 * 2 * 64 / 8 = 12,800 MB/s
 
พึงระลึกไว้ว่าตัวเลขพวกนี้เป็นตัวเลขสูงสุดในทางทฤษฎี ซึ่งจะไม่มีทางได้เห็นในการใช้งานจริง ๆ แน่นอน (เพราะมีเรื่องลึก ๆ แบบค่า overhead และตัวแปรอื่นที่ต้องเอามาคิดหักออกอีก) แต่ก็เป็นเรื่องที่คนทั่วไปสมควรรู้ติดตัวเอาไว้ เพราะว่าจะได้เข้าใจระบบการทำงานของมันครับ
 
 
 
Multi-channel memory
 
เรามาต่อกันในเรื่องต่อไปดีกว่าครับ ... และพอถึงสมัยที่ CPU เร็วขึ้น แต่ RAM ในตอนนั้นไม่สามารถทำงานเร็วทันได้ เกิดเป็นปัญหาคอขวด ก็เลยมีการคิดสถาปัตยกรรมหน่วยความจำแบบหลายช่องทาง (Multi-channel memory architecture) โดยอาศัยวิธีการติดตั้งหน่วยความจำ 2 แถวขึ้นไปเพื่อขยาย bus width ขึ้นไปเพื่อลดปัญหาคอขวดนี้ไปนั่นเอง
 
 
 
Single-channel memory
 
เมื่อสมัยก่อนที่ยังไม่มี multi-channel memory นี้ หน่วยความจำบนคอมพิวเตอร์จะทำงานแบบช่องทางเดียว (single-channel) ดังนี้:
 
[ Memory Controller ]  < ---------64-bit bus width ----------- > [RAM0] + [RAM1]
 
ยกตัวอย่าง bandwidth สูงสุดในทางทฤษฎี (ใช้แรม DDR3-1600): 800 * 2 * 64 / 8 = 12,800 MB/s
 
 
 
Dual-Channel memory
 
เป็นสถาปัตยกรรมหน่วยความจำที่จำเป็นต้องติดตั้ง RAM เป็นอย่างน้อย 2 แถว (และควรจะมี spec เหมือนกันหมด) เพื่อขยาย bandwidth ขึ้นไป 2 เท่า ... และ Dual-channel memory architecture ก็จะมีแยกย่อยลงไปอีกเรียงไปตามยุคสมัยดังนี้:
 
Ganged Mode
 
[ Memory Controller ]  < ----- 128-bit data bus ---- > [RAM0 + RAM1]
 
ก็จะเห็นได้ว่า bus width ของแรมได้ขยายขึ้นจากเดิม 2 เท่า โดยคิดว่า RAM ทั้งหมดเป็นก้อนเดียวกัน
 
Unganged mode
 
[ Memory   ] < ------- 64-bit bus width -------> [RAM0]
[ Controller ] < ------- 64-bit bus width -------> [RAM1]
 
แต่พอถึงยุคของ CPU แบบ multi-core (dual-core, quad-core) ก็เกิดโหมดการทำงานของ dual-channel ใหม่ขึ้นมาเรียกว่า Unganged mode ซึ่งโหมดนี้จะทำให้ RAM แต่ละ channel แบ่งกันทำงานพร้อม ๆ กันได้เพื่อเสริมประสิทธิภาพในการทำงานแบบ multi-thread นั่นเอง
 
ยกตัวอย่าง bandwidth สูงสุดในทางทฤษฎี (DDR3-1600): 800 * 2 * 128 / 8 = 21,600 MB/s
 
 
 
Triple-Channel memory
 
เป็นสถาปัตยกรรมที่มีให้เห็นเฉพาะกับ Intel Nehalem ที่ใช้ Socket LGA1366 (Core i7 9xx, Xeon 35xx~36xx, Xeon 55xx ~ 56xx) เท่านั้น โดย bus width สูงสุดจะเป็น 192-bit และจำเป็นจะต้องใส่ RAM 3 หรือ 6 แถวเท่านั้น (ถ้าใส่ 6 แถว แบ่งออกเป็น 2 กลุ่ม โดยแต่ละกลุ่มสามารถมีขนาดต่างกันได้ แต่ RAM ในกลุ่มนั้น ๆ จะต้องเหมือนกัน เช่น สามารถใส่ 1GB จำนวน 3 แถว เป็นกลุ่มแรก และใส่ 2GB จำนวน 3 แถว ในกลุ่ม 2 เพื่อทำให้มี RAM ในระบบขนาด 9 GB ได้
 
ยกตัวอย่าง bandwidth สูงสุดในทางทฤษฎี (DDR3-1600): 800 * 2 * 192 / 8 = 38,400 MB/s
 
 
 
Quad-Channel memory
 
เป็นสถาปัตยกรรมใหม่ล่าสุดที่มีให้เห็นเฉพาะกับ Intel Sandy Bridge-E ที่ใช้ Socket LGA2011 (ณ ตอนนี้ มีแค่ Core i7 38xx~39xx) เท่านั้น โดย bus width สูงสุดจะเพิ่มเป็น 256-bit และจำเป็นที่จะต้องใส่ RAM 4 หรือ 8 แถวเท่านั้น (ถ้าใส่ 8 แถว ก็จะแบ่งออกเป็น 2 กลุ่ม ในแต่ละกลุ่มสามารถมีขนาดต่างกันได้ แต่ RAM ในกลุ่มนั้น ๆ จะต้องเหมือนกัน เช่น สามารถใส่ 1GB จำนวน 4 แถว เป็นกลุ่มแรก และใส่ 2GB จำนวน 4 แถว ในกลุ่ม 2 เพื่อทำให้มี RAM ในระบบขนาด 12 GB ได้
 
ยกตัวอย่าง bandwidth สูงสุดในทางทฤษฎี (DDR3-1600): 800 * 2 * 256 / 8 = 51,200 MB/s
 
 
.............
 
 
สุดท้ายก็หวังว่าเรื่องนี้น่าจะเป็นประโยชน์สำหรับท่าน ๆ ที่กำลังสงสัยหรือไม่มั่นใจในเรื่องพวกนี้อยู่ครับ ครั้งนี้ผมก็ต้องขอลากันไปก่อน สวัสดีครับ :D
 
 

Comment

Comment:

Tweet

#2 By (27.55.28.189|27.55.28.189) on 2014-11-11 15:34

โอ้ ขอบคุณสำหรับความรู้ดี ๆ ครับ
อยากอัพเกรดคอมฯ ให้แรง ๆ เหมือนกัน
แต่ทรัพย์ไม่อำนวยเอาเสียเลย sad smile

#1 By タナカ on 2011-11-28 16:22

YaKiZoBa View my profile