Это не ухудшит производительность и не будет сопряжено со значительной сложностью в схеме.
Это ложные предположения, которые мы принимаем как факт, которые действительно избавляют от дальнейшего понимания.
Your comment в другом вопросе используется гораздо более подходящей формулировка («я не думаю, что это будет ухудшать» ...)
ли вы считаете, что архитектура памяти использует множество микросхем памяти параллельно для для максимизации пропускной способности? И что конкретный элемент данных находится только в одном чипе, вы не можете просто прочитать, какой чип окажется наиболее удобным, и ожидать, что он будет иметь нужные вам данные.
Прямо сейчас центральный процессор и память могут быть соединены между собой так, что биты 0-7 подключаются только к микросхеме 0, 8-15 для чипа 1, 16-23 для чипа 2, 24-31 для чипа 3. И для всех целых чисел N ячейка памяти 4N хранится в чипе 0, 4N + 1 в чипе 1 и т. д. И это N-й байт в каждом из этих чипов.
Давайте посмотрим на адреса памяти, хранившихся при каждом смещении каждого чипа памяти
memory chip 0 1 2 3
offset
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
N 4N 4N+1 4N+2 4N+3
Так что, если вы загружаете из памяти байты 0-3, N = 0, каждый из отчетов чип его внутренний байт 0, все бит заканчивается в правильных местах, и все отлично.
Теперь, если вы попытаетесь загрузить слово, начинающееся с места памяти 1, что происходит?
Прежде всего, мы рассмотрим, как это делается. Первые байты памяти 1-3, которые хранятся в микросхемах памяти 1-3 со смещением 0, заканчиваются битами 8-31, потому что именно эти микросхемы памяти прикреплены, хотя вы попросили их быть в битах 0-23. Это не имеет большого значения, потому что процессор может их swizzle внутренне, используя ту же схему, что и для логического сдвига влево. Затем в следующем байте 4 памяти транзакции, который хранится в микросхеме памяти 0 со смещением 1, считывается в биты 0-7 и swizzled в биты 24-31, где вы этого хотели.
Обратите внимание на что-то здесь. Запрошенное слово разбивается на смещения, первая транзакция памяти считывается со смещения 0 из трех фишек, вторая транзакция памяти считывается со смещения 1 другого чипа. Вот где проблема. Вы должны сообщить микросхемам памяти смещение, чтобы они могли отправить вам нужные данные назад, а смещение составляет ~ 40 бит, а сигналы - ОЧЕНЬ высокая скорость. Прямо сейчас есть только один набор сигналов смещения, который соединяется со всеми микросхемами памяти, чтобы сделать одну транзакцию для неравномерного доступа к памяти, вам понадобится независимое смещение (называемое адресной шиной BTW), работающее с каждой микросхемой памяти. Для 64-битного процессора вы должны перейти от одной адресной шины к восьми, увеличившись почти на 300 контактов. В мире, где процессоры используют от 700 до 1300 контактов, это вряд ли можно назвать «незначительным увеличением схемы». Не говоря уже о огромном увеличении шума и перекрестных помех от многих дополнительных высокоскоростных сигналов.
Хорошо, это не так уж плохо, потому что на адресной шине одновременно может быть максимум два разных смещения, а один - другой плюс один. Таким образом, вы можете уйти с одним дополнительным проводом к каждой микросхеме памяти, сказав, что это либо (прочитайте смещение, указанное на адресной шине), либо (прочитайте смещение), которое является двумя состояниями. Но теперь в каждом чипе памяти есть дополнительный сумматор, а это значит, что он должен вычислить смещение до фактического доступа к памяти, что замедляет максимальную тактовую частоту для памяти. Это означает, что выровненный доступ становится медленнее, если вы хотите, чтобы неравномерный доступ был быстрее. Поскольку 99,99% доступа можно выровнять, это чистый убыток.
Таким образом, неравномерный доступ делится на два этапа. Поскольку адресная шина разделяется всеми задействованными байтами. И это на самом деле упрощение, потому что, когда у вас есть разные смещения, у вас также есть разные линии кэша, поэтому вся логика когерентности кэша должна удвоиться, чтобы дважды обрабатывать связь между ядрами ЦП.
Конечно, я не эксперт. Сожалею! С тех пор я буду следить за своими словами. Спасибо за ваш ответ, и я думаю, что это именно то, что я ищу. – spockwang
+1 Это отличный ответ. –
Очень хороший ответ. Стоит отметить, что в некоторых чипах для высокоскоростной графики или обработки сигналов есть подсистемы памяти, которые могут обрабатывать операции, охватывающие слова памяти. Такая вещь может быть разумно эффективно реализована в массиве памяти, если между разделами были мультиплексоры, которые заставили бы каждый раздел либо использовать ту же строку, что и предыдущий раздел, или строку под ней. Я не знаю, что когда-либо были какие-либо микросхемы памяти, которые открывали такую функцию, хотя в некоторых случаях это могло бы быть приятно. – supercat