Многоядерная архитектура ПК, планирование доступа ядер к системной памяти

508
Ryan Budney

Мой офисный компьютер имеет 8 ядер. Недавно я обновил систему с 4 ГБ ОЗУ (в двух модулях) до 24 ГБ ОЗУ (в шести модулях) и заметил значительное увеличение производительности при работе нескольких ядер. В частности, когда все (или почти все) ядра являются активными и работают программы, которые требуют больше, чем обеспечивает кэш каждого ядра (8 МБ).

Старая и новая RAM имеют одинаковую скорость (FSB 1333 МГц). Поэтому я подозреваю, что это не то, что происходит.

Возможно ли, что (некоторые?) Архитектуры ПК позволяют ядрам одновременно получать доступ к оперативной памяти системы, если используемая ими память достаточно "далеко"? Я не уверен, что может означать «далеко друг от друга», но, возможно, есть способ для одного ядра для чтения / записи на карту 1 (или чип 3 на карте 1), в то время как другое ядро ​​может одновременно читать / писать на карту 2 (или чип 1) на карточке 1)? Архитектура ПК (и, возможно, операционные системы) настолько умна?

1

2 ответа на вопрос

3
AndrejaKo

Ну, есть NUMA . Когда оно используется, каждому ядру присваивается часть оперативной памяти. Так происходит именно то, что вы описали. Один процессор будет работать с выделенной ему ОЗУ, а другой - с другой частью ОЗУ. Некоторые материнские платы даже не обнаружат ОЗУ, если не будет достаточно процессоров, чтобы использовать их все. Я не знаю, так ли это с упомянутым здесь компьютером, но если это компьютер уровня рабочей станции, то это возможно.

Другой вариант - чередование памяти . Некоторые компьютеры могут получить доступ к памяти быстрее, если память «раздвинута». Принцип состоит в том, что, пока один модуль выполняет операцию записи, другой модуль может принимать команды, поэтому нет необходимости ждать завершения операции записи в одном модуле, прежде чем начинать ввод в другом модуле.

Итак, представьте массив чисел. Каждый номер представляет ячейку памяти. Предположим, что в этом примере упрощенно каждое местоположение имеет размер в один байт. Поэтому, если процессору нужно записать 4 байта, он будет записывать данные в первые 4 ячейки памяти. Обычно это происходит на том же модуле памяти и, вероятно, на том же чипе памяти. Компьютер должен будет ждать завершения каждой операции записи, прежде чем отправлять следующую информацию в память. Если используется перемежение, адреса по-разному отображаются. Если у нас есть компьютер с 4 слотами памяти, адрес 1 будет на первом слоте, 2 на втором, 3 на третьем и 4 на четвертом. Таким образом, когда процессору нужно записать 4 байта, он отправит их на первые 4 адреса памяти, но, поскольку они находятся в разных модулях, ему не нужно ждать завершения каждой операции записи. Вместо этого он отправит данные в первое местоположение, а затем во второе и так далее. Таким образом, к моменту окончания первой операции записи остальные 3 подходят к концу, поэтому данные могут быть записаны в память быстрее.

Ах, ладно, ну о чем я говорил. А по ссылкам на странице Википедии, которую вы предоставляете, похоже, что Intel i7 (мой офисный компьютер) реализует некоторые протоколы типа NUMA. Ryan Budney 13 лет назад 0
2
sblair

Предполагая, что материнская плата поддерживает трехканальную работу, тогда увеличение производительности, по крайней мере, частично, связано с переходом от двухканального к трехканальному.

Благодарю. Есть ли в Linux простой способ проверить, активна ли спецификация DDR3 на данном компьютере? Ваше объяснение звучит правдоподобно. «sudo lshw -c memory» не содержит такой информации. Ryan Budney 13 лет назад 0
@Ryan Один из способов выяснить это - поискать спецификацию материнской платы. Если материнская плата поддерживает трехканальный канал, то она, вероятно, активна, поскольку вы заполнили все шесть слотов памяти (если их всего шесть). BIOS также может быть в состоянии подтвердить, что трехканальный включен. sblair 13 лет назад 0
Ах, хорошо, это подтверждает это. 6 карт памяти идентичны и поддерживают DDR3, а материнская плата тоже. Ryan Budney 13 лет назад 0

Похожие вопросы