CPU / คอร์หลายตัวสามารถเข้าถึง RAM เดียวกันได้หรือไม่


15

นี่คือสิ่งที่ฉันคิดว่าจะเกิดขึ้น:

  1. หากสองคอร์พยายามเข้าถึงที่อยู่เดียวกันใน RAM ใครจะต้องรอให้อีกคนหนึ่งเข้าถึง RAM สองเวลานั้นแต่ละคอร์จะพยายามที่จะเข้าถึงที่อยู่เดียวกันพวกเขาก็อาจจะยังคงมี RAM ที่เก็บไว้ชั่วคราวเพื่อให้พวกเขาสามารถเข้าถึงตนแคชพร้อมกัน

  2. หากสองคอร์พยายามเข้าถึงที่อยู่ที่แตกต่างกันใน RAM เดียวกันจะต้องรอให้อีกสองเครื่องเข้าถึง RAM

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

ดังนั้นซีพียูหลายคอร์ / สามารถเข้าถึง RAM เดียวกันพร้อมกันหรือสิ่งที่ฉันพูดถูกต้องหรือไม่


ฉันไม่สามารถพูดถึงระดับฮาร์ดแวร์ที่คุณอ้างถึง แต่ฉันสามารถพูดได้ว่างานที่ต้องใช้หน่วยความจำอย่างเข้มข้นสามารถได้รับความช่วยเหลือจากการประมวลผลหลายตัวโดยแยกการใช้งาน กล่าวคือถ้าคุณมี 500MB ของข้อมูลในหน่วยความจำคุณจะต้องประมวลผลให้ออก 250MB จากที่ข้อมูล / แกะให้เป็นหนึ่ง proc และ 250MB ไปยังอีกและคุณได้สองเท่าของคุณได้อย่างมีประสิทธิภาพเป็นไปได้ผ่าน (ข้อ จำกัด แบนด์วิดธ์หน่วยความจำไม่อดทน) นอกเหนือจากที่ฮาร์ดแวร์สามารถทำได้หรือไม่การมีตัวประมวลผลหลายตัวที่เข้าถึงที่อยู่ ram เดียวกันนั้นเป็นแนวคิดที่ไม่ดีอย่างแท้จริงและรหัส multi-proc ส่วนใหญ่พยายามหลีกเลี่ยงอย่างระมัดระวัง
จิมมี่ฮอฟฟา

1
@JimmyHoffa แต่ข้อ จำกัด แบนด์วิดท์ของ RAM เป็นสิ่งที่เขากำลังพูดถึงอย่างแม่นยำ

@ จิมมี่ฉันไม่เห็นปัญหาใด ๆ กับโปรเซสเซอร์สองตัวที่พยายามอ่านจากที่อยู่ RAM เดียวกัน ฉันจะเห็นปัญหาเฉพาะเมื่อพวกเขาพยายามเขียนถึงมันในเวลาเดียวกัน
Lost Hobbit

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

2
คำตอบสั้น ๆ : ขึ้นอยู่กับสถาปัตยกรรมระบบบัสโปรโตคอลการเชื่อมโยงกันแคชจำนวนพอร์ตในตัวควบคุม DDR ของคุณและจำนวนตัวควบคุม DDR คำตอบยาวอยู่ในแผ่นข้อมูลของระบบของคุณ
SK-logic

คำตอบ:


11

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

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


รายละเอียดจะขึ้นอยู่กับสถาปัตยกรรมที่คุณใช้ สมมติว่าบางสิ่งเช่น SMP และ SDRAM ที่ทันสมัย

  1. หากสองคอร์พยายามเข้าถึงที่อยู่เดียวกันใน RAM ...

    สามารถไปได้หลายวิธี:

    • พวกเขาทั้งสองต้องการอ่านพร้อมกัน:

      • สองคอร์ในชิปตัวเดียวกันอาจแชร์แคชระดับกลางในระดับหนึ่ง (2 หรือ 3) ดังนั้นการอ่านจะทำได้เพียงครั้งเดียว ในสถาปัตยกรรมสมัยใหม่แต่ละคอร์อาจสามารถดำเนินการ µ-ops จากท่อหนึ่งหรือมากกว่านั้นได้จนกว่าจะถึงบรรทัดแคชพร้อม
      • สองคอร์ในชิปที่แตกต่างกันอาจไม่แชร์แคช แต่ก็ยังจำเป็นต้องประสานการเข้าถึงรถบัส: นึกคิดว่าชิปตัวไหนที่ไม่ได้มีปัญหาการอ่านจะทำให้การตอบสนองง่ายขึ้น
    • หากพวกเขาทั้งสองต้องการเขียน:

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

      • คอร์สองแกนบนชิปที่ต่างกันมีข้อขัดแย้งและแคชไลน์จะต้องถูกเขียนกลับไปที่ RAM โดย chip1 ดึงเข้าไปในแคชของ chip2 แก้ไขแล้วเขียนกลับมาอีกครั้ง (ไม่ทราบว่าการเขียน / ดึงข้อมูลสามารถรวมตัวกันโดยการสอดแนม)

  2. หากสองคอร์พยายามเข้าถึงที่อยู่ที่แตกต่างกัน ...

    สำหรับการเข้าถึงครั้งเดียว CAS latency หมายถึงการดำเนินการสองอย่างที่อาจเกิดขึ้นได้โดยไม่ต้องใช้เวลานาน (หรืออาจจะนานกว่านั้นเล็กน้อย) ถ้าบัสไม่ได้ทำงาน


อีกรายการหนึ่งคือเมื่อคอร์หนึ่งเริ่มต้นการถ่ายโอน DMA ในขณะที่แกนกลางอันใดอันหนึ่งโผล่ขึ้นมาบนพื้นที่เป้าหมาย
ott--

7

ดังนั้นซีพียูหลายคอร์ / สามารถเข้าถึง RAM เดียวกันพร้อมกันหรือสิ่งที่ฉันพูดถูกต้องหรือไม่

มีสถาปัตยกรรมเครื่องจักรที่แตกต่างกันออกไปมากมายแต่ละชุดมีคุณสมบัติของตัวเอง เครื่องมัลติโพรเซสซิงหนึ่งประเภทเรียกว่าMISDสำหรับ Multiple Instruction Single Data และเครื่องดังกล่าวได้รับการออกแบบมาเพื่อให้ข้อมูลเดียวกันกับโปรเซสเซอร์หลายตัวในเวลาเดียวกัน คลาสที่เกี่ยวข้องของเครื่องที่รู้จักกันในชื่อสถาปัตยกรรมSIMD (Single Instruction Multiple Data) นั้นพบได้ทั่วไปมากขึ้นและยังให้การเข้าถึงหน่วยความจำเดียวกันในเวลาเดียวกัน แต่หน่วยความจำมีคำแนะนำแทนข้อมูล ในทั้ง MIMD และ SIMD "การเข้าถึง" หมายถึงการเข้าถึงแบบอ่าน - คุณสามารถจินตนาการถึงปัญหาที่คุณมีหากทั้งสองหน่วยพยายามเขียนไปยังตำแหน่งเดียวกันพร้อมกัน!


3

แม้ว่าคำตอบส่วนใหญ่จะมาจากด้านข้างของซอฟต์แวร์และ / หรือรุ่นฮาร์ดแวร์วิธีที่สะอาดที่สุดคือการพิจารณาว่าชิป RAM ทางกายภาพทำงานอย่างไร (แคชอยู่ระหว่างโปรเซสเซอร์และหน่วยความจำและใช้บัสแอดเดรสเดียวกันและการดำเนินการนั้นโปร่งใสสำหรับโปรเซสเซอร์) ชิปแรมมีตัวถอดรหัสแอดเดรสเดียวซึ่งได้รับที่อยู่ของเซลล์หน่วยความจำ แอดเดรสบัส (และบัสข้อมูลเดียวกันหรือทั้งสองอย่าง) ความทรงจำในปัจจุบันถูกสร้างขึ้นใน "วิธีการประมวลผลเดียว" คือหนึ่งหน่วยประมวลผลเชื่อมต่อผ่านบัสหนึ่งไปยังชิปหน่วยความจำหนึ่ง กล่าวอีกนัยหนึ่งนี่คือ "von Neumann bottleneck" เนื่องจากคำสั่งทุกคำสั่งต้องอ้างอิงหน่วยความจำอย่างน้อยหนึ่งครั้ง ด้วยเหตุนี้บนสายเดียว (หรือสาย, อาคาบัส) หนึ่งสัญญาณอาจมีอยู่ในแต่ละครั้ง ดังนั้นชิป RAM อาจได้รับที่อยู่เซลล์หนึ่งครั้ง จนกว่าคุณจะมั่นใจได้ว่าสองคอร์ใส่ที่อยู่เดียวกันกับบัสแอดเดรสการเข้าถึงบัสพร้อมกันโดยคนขับรถบัสสองคนที่แตกต่างกัน (เช่นแกน) เป็นไปไม่ได้ทางร่างกาย (และถ้ามันเหมือนกันมันซ้ำซ้อน)

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

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

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


1

คุณไม่สนใจ RAM จริงคุณสนใจมากขึ้นเกี่ยวกับหน่วยความจำเสมือนและพื้นที่ที่อยู่ของกระบวนการหรือเธรด ( เธรดทั้งหมดของกระบวนการเดียวกันแบ่งปันพื้นที่แอดเดรสทั่วไป) ในทางปฏิบัติ

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

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

มาตรฐานล่าสุดของอุตสาหกรรมเช่นภาษาC11หรือ C ++ 11มีบางส่วน (ด้ายหลายตระหนัก) หน่วยความจำแบบ


0

CPU สมัยใหม่เชื่อมโยงกับอุปกรณ์หน่วยความจำภายนอกเพื่อรับแบนด์วิดธ์การถ่ายโอนข้อมูลสูงสุด นี่เป็นเพราะข้อกำหนดด้านความสมบูรณ์ของสัญญาณ (ความยาวการติดตาม, การเลิก, การเอียงนาฬิกา ฯลฯ ) ที่จำเป็นต่อการรักษาอัตราการถ่ายโอนสูง ตัวอย่างเช่นบนเมนบอร์ดที่ใช้ CPU หลายตัว CPU แต่ละตัวจะมีสล็อต DIMM เฉพาะชุด ไม่ว่าโปรแกรมเมอร์ซอฟต์แวร์จะคิดอย่างไร CPU ตัวหนึ่งไม่สามารถเข้าถึงข้อมูลหน่วยความจำภายนอกของ CPU ตัวอื่นได้ ซอฟต์แวร์การจัดการหน่วยความจำของระบบไม่ว่าที่ระดับเคอร์เนลระบบปฏิบัติการ, Hypervisor, data plane cores หรืออย่างอื่นจัดการการถ่ายโอนข้อมูลระหว่างหน่วยความจำของ CPU


1
โพสต์นี้ค่อนข้างอ่านยาก (ผนังข้อความ) คุณจะช่วยแก้ไขมันให้เป็นรูปร่างที่ดีขึ้นได้ไหม
ริ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.