Nhiều lõi / lõi của CPU có thể truy cập cùng một RAM không?


15

Đây là những gì tôi đoán sẽ xảy ra:

  1. Nếu hai lõi cố gắng truy cập cùng một địa chỉ trong RAM, thì một lõi sẽ phải đợi lõi kia truy cập vào RAM. Lần thứ hai mà mỗi lõi sẽ cố gắng truy cập vào cùng một địa chỉ, họ vẫn có thể có bộ nhớ cache RAM đó, vì vậy họ có thể truy cập bộ nhớ cache tương ứng .

  2. Nếu hai lõi cố gắng truy cập các địa chỉ khác nhau trong cùng một RAM, thì một lõi sẽ phải đợi lõi kia truy cập vào RAM.

Nói cách khác, tôi sẽ tưởng tượng rằng đối với các tác vụ lập trình chuyên sâu về RAM, đa xử lý sẽ không giúp ích nhiều trừ khi nó liên quan đến việc đọc từ cùng một địa chỉ trong RAM nhiều lần trên mỗi lõi.

Vì vậy, nhiều CPU / lõi có thể truy cập cùng một RAM một cách đồng thời, hoặc điều tôi đang nói có đúng không?


Tôi không thể nói đến cấp độ phần cứng mà bạn đang đề cập, nhưng tôi có thể nói rằng các tác vụ chuyên sâu ram có thể được hỗ trợ bằng cách xử lý đa phương tiện bằng cách chia nhỏ cách sử dụng; mà là để nói nếu bạn có 500MB dữ liệu trong ram bạn cần xử lý, đưa ra 250MB của dữ liệu / ram để một proc và 250MB khác và bạn đã tăng gấp đôi hiệu quả của bạn có thể thông (hạn chế băng thông ram không chịu được). Ngoài việc phần cứng có thể làm điều đó hay không, việc có nhiều bộ xử lý truy cập vào cùng một địa chỉ ram là một ý tưởng thực sự tồi tệ và hầu hết các mã đa cấp đều cố gắng tránh nó.
Jimmy Hoffa

1
@JimmyHoffa Nhưng các hạn chế về băng thông RAM chính xác là những gì anh ấy đang nói đến (vì giả định rằng nhiệm vụ là giới hạn bộ nhớ).

@Jimmy Tôi không thấy bất kỳ vấn đề nào với hai bộ xử lý đang cố đọc từ cùng một địa chỉ RAM. Tôi sẽ chỉ nhìn thấy một vấn đề nếu họ cố gắng viết cho nó cùng một lúc.
Mất Hobbit

1
tại bộ xử lý đa lõi cụ thể mà tôi đã từng làm việc với, các lõi không "biết" bất cứ điều gì ngoài bộ nhớ cache cục bộ của chúng; những thứ cần thiết để đồng bộ hóa với bộ đệm được chia sẻ đã được thực hiện một cách minh bạch cho những thứ này trong số chu kỳ bộ xử lý được chỉ định; lập trình viên sẵn sàng tính đến điều này chỉ cần thêm thủ công số lượng cần thiết noptrong mã lắp ráp của họ
gnat

2
Câu trả lời ngắn: phụ thuộc vào kiến ​​trúc bus hệ thống, giao thức kết hợp bộ đệm, số lượng cổng trong bộ điều khiển DDR và ​​số bộ điều khiển DDR. Câu trả lời dài nằm trong bảng dữ liệu của hệ thống của bạn.
SK-logic

Câu trả lời:


11

Tóm tắt: thông thường một lõi có thể bão hòa bus bộ nhớ nếu truy cập bộ nhớ là tất cả.

Nếu bạn thiết lập băng thông bộ nhớ của máy, bạn sẽ có thể xem liệu một quy trình đơn luồng có thực sự đạt được điều này hay không, và nếu không, cách sử dụng băng thông hiệu quả sẽ chia tỷ lệ với số lượng bộ xử lý.


Các chi tiết sẽ phụ thuộc vào kiến ​​trúc bạn đang sử dụng. Giả sử một cái gì đó như SMP và SDRAM hiện đại:

  1. Nếu hai lõi cố gắng truy cập cùng một địa chỉ trong RAM ...

    có thể đi một số cách:

    • cả hai đều muốn đọc cùng một lúc:

      • hai lõi trên cùng một chip có thể sẽ chia sẻ bộ đệm trung gian ở một mức nào đó (2 hoặc 3), vì vậy việc đọc sẽ chỉ được thực hiện một lần. Trên một kiến ​​trúc hiện đại, mỗi lõi có thể tiếp tục thực hiện các lệnh op-op từ một hoặc nhiều đường ống cho đến khi dòng bộ đệm sẵn sàng
      • hai lõi trên các chip khác nhau có thể không chia sẻ bộ đệm, nhưng vẫn cần phối hợp truy cập vào xe buýt: lý tưởng, bất kỳ chip nào không phát hành, việc đọc sẽ chỉ đơn giản là theo dõi phản hồi
    • nếu cả hai đều muốn viết:

      • hai lõi trên cùng một chip sẽ chỉ được ghi vào cùng một bộ đệm và điều đó chỉ cần được xóa vào RAM một lần. Trong thực tế, vì bộ nhớ sẽ được đọc và ghi vào RAM trên mỗi dòng bộ đệm, nên ghi vào các địa chỉ riêng biệt nhưng đủ gần có thể được kết hợp thành một lần ghi vào RAM

      • hai lõi trên các chip khác nhau có xung đột và dòng bộ đệm sẽ cần được ghi lại vào RAM bằng chip1, được nạp vào bộ đệm của chip2, sửa đổi và sau đó ghi lại (không biết liệu ghi / tìm nạp có thể được kết hợp lại bằng cách rình mò không)

  2. Nếu hai lõi cố gắng truy cập các địa chỉ khác nhau ...

    Đối với một truy cập duy nhất , độ trễ CAS có nghĩa là hai hoạt động có thể có khả năng được xen kẽ để không mất nhiều thời gian (hoặc có lẽ chỉ lâu hơn một chút) so với khi xe buýt không hoạt động.


Một mục danh sách khác là khi một lõi bắt đầu chuyển DMA trong khi lõi anpther chọc vào vùng đích.
ott--

7

Vì vậy, nhiều CPU / lõi có thể truy cập cùng một RAM một cách đồng thời, hoặc điều tôi đang nói có đúng không?

Có rất nhiều kiến ​​trúc máy khác nhau, mỗi cái có một bộ tính năng riêng. Một loại máy đa xử lý được gọi là MISD , cho Dữ liệu đơn hướng dẫn nhiều lệnh và các máy như vậy được thiết kế để cung cấp cùng một dữ liệu cho nhiều bộ xử lý cùng một lúc. Một lớp máy liên quan được gọi là kiến trúc SIMD (Nhiều hướng dẫn nhiều dữ liệu) phổ biến hơn nhiều và cũng cung cấp quyền truy cập vào cùng một bộ nhớ cùng một lúc, nhưng bộ nhớ chứa hướng dẫn thay vì dữ liệu. Trong cả MIMD và SIMD, "quyền truy cập" có nghĩa là quyền truy cập đọc - bạn có thể tưởng tượng những rắc rối bạn gặp phải nếu hai đơn vị cố gắng ghi vào cùng một vị trí cùng một lúc!


3

Mặc dù hầu hết các câu trả lời tiếp cận từ phía bên của mô hình phần mềm và / hoặc phần cứng, cách sạch nhất là xem xét cách thức hoạt động của các chip RAM vật lý. (Bộ đệm được đặt giữa bộ xử lý và bộ nhớ và chỉ cần sử dụng cùng một bus địa chỉ và hoạt động của nó hoàn toàn trong suốt đối với bộ xử lý.) Các chip RAM có một bộ giải mã địa chỉ duy nhất, nhận địa chỉ của ô nhớ, đến bus địa chỉ (và tương tự là bus dữ liệu, vào hoặc ra). Các bộ nhớ hiện tại được xây dựng theo "cách tiếp cận bộ xử lý đơn", tức là một bộ xử lý được kết nối qua một bus với một chip bộ nhớ. Nói cách khác, đây là "nút cổ chai von Neumann", vì mỗi lệnh đơn lẻ phải tham chiếu bộ nhớ ít nhất một lần. Bởi vì điều này, trên một dây (hoặc dây, còn gọi là bus) chỉ có một tín hiệu có thể tồn tại tại một thời điểm, do đó, chip RAM có thể nhận được một địa chỉ ô tại một thời điểm. Cho đến khi bạn có thể đảm bảo hai lõi đặt cùng một địa chỉ cho bus địa chỉ, việc truy cập xe buýt đồng thời bởi hai trình điều khiển xe buýt khác nhau (như lõi) là không thể. (Và, nếu nó giống nhau, nó là dư thừa).

Phần còn lại là cái gọi là tăng tốc phần cứng. Bus kết hợp, bộ nhớ cache, truy cập SIMD, v.v ... chỉ là một số mặt tiền đẹp trước RAM vật lý, câu hỏi của bạn là về. Các máy gia tốc được đề cập có thể bao gồm cuộc chiến chỉ sử dụng bus địa chỉ và các mô hình lập trình không liên quan nhiều đến câu hỏi của bạn. Cũng lưu ý rằng truy cập đồng thời cũng sẽ chống lại sự trừu tượng "không gian địa chỉ riêng".

Vì vậy, đối với câu hỏi của bạn: không thể truy cập RAM trực tiếp đồng thời, không cùng địa chỉ cũng như với các địa chỉ khác nhau. Sử dụng bộ đệm có thể bao gồm thực tế này và có thể cho phép truy cập rõ ràng đồng thời trong một số trường hợp. Nó phụ thuộc vào mức độ bộ nhớ và cấu trúc, cũng như địa phương và thời gian của dữ liệu của bạn. Và đúng, bạn đã đúng: xử lý đa (lõi) mà không cần truy cập RAM nâng cao, sẽ không giúp ích nhiều cho các ứng dụng cần nhiều RAM.

Để hiểu rõ hơn: chỉ cần nhớ lại cách thức hoạt động của Direct Memory Access. Cả CPU và thiết bị DMA đều có thể đặt địa chỉ lên bus, do đó phải loại trừ nhau khỏi việc sử dụng đồng thời của bus.


1

Bạn không quan tâm đến RAM vật lý, bạn quan tâm nhiều hơn đến bộ nhớ ảokhông gian địa chỉ của các tiến trình hoặc luồng (tất cả các luồng của cùng một tiến trình chia sẻ một không gian địa chỉ chung) trong thực tế.

Tất nhiên, nếu bạn đang mã hóa nhân hệ điều hành đa lõi, bạn quan tâm đến RAM và bộ nhớ cache kết hợp rất nhiều.

Hầu hết các bộ xử lý đa lõi có một số dạng cơ chế kết hợp bộ đệm . Chi tiết là bộ xử lý cụ thể. Vì bộ xử lý đang sử dụng bộ đệm CPU , đôi khi chúng hoạt động như thể một số lõi của bộ xử lý đang truy cập cùng một vị trí bộ nhớ.

Các tiêu chuẩn gần đây của các ngôn ngữ công nghiệp như C11 hoặc C ++ 11 có một số mô hình bộ nhớ (nhận biết đa luồng) .


0

Các CPU hiện đại được gắn vật lý với các thiết bị bộ nhớ ngoài của chúng để có được băng thông truyền dữ liệu tối đa. Điều này là do các yêu cầu về tính toàn vẹn tín hiệu (độ dài vết, chấm dứt, độ lệch của đồng hồ, v.v.) cần thiết để duy trì tốc độ truyền cao. Ví dụ, trên bo mạch chủ đa CPU, mỗi CPU có một bộ khe DIMM chuyên dụng. Bất kể các lập trình viên phần mềm có thể nghĩ gì, một CPU không thể truy cập dữ liệu bộ nhớ ngoài của CPU khác. Phần mềm quản lý bộ nhớ của hệ thống, cho dù ở cấp độ nhân OS, Hypervisor, lõi máy bay dữ liệu, hay nói cách khác, xử lý truyền dữ liệu bộ nhớ giữa các CPU.


1
bài này khá khó đọc (tường văn bản). Bạn có phiền chỉnh sửa ing nó thành một hình dạng tốt hơn?
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.