Хотя большинство ответов подходит со стороны модели программного и / или аппаратного обеспечения, самый простой способ - рассмотреть, как работают физические чипы ОЗУ. (Кэш расположен между процессором и памятью и просто использует одну и ту же адресную шину, и его работа полностью прозрачна для процессора.) Микросхемы ОЗУ имеют один единственный адресный декодер, который получает адрес ячейки памяти, поступающей на адресная шина (и аналогично шина данных, входящая или выходящая). Настоящая память встроена в «однопроцессорный подход», то есть один процессор подключен через одну шину к одному чипу памяти. Другими словами, это «узкое место фон Неймана», поскольку каждая отдельная инструкция должна ссылаться на память хотя бы один раз. Из-за этого на одном проводе (или проводах, или шине) одновременно может существовать только один сигнал, таким образом, чип ОЗУ может получать по одному адресу ячейки за раз. Пока вы не сможете убедиться, что два ядра поместят один и тот же адрес в адресную шину, одновременный доступ к шине двумя разными драйверами шины (например, ядрами) физически невозможен. (И, если это то же самое, это избыточно).
Остальное - это так называемое аппаратное ускорение. Шина когерентности, кеш, доступ к SIMD и т. Д. - это всего лишь несколько приятных фасадов перед физической памятью, о которых был задан ваш вопрос. Упомянутые ускорители могут охватывать борьбу исключительно за использование адресной шины, а модели программирования не имеют ничего общего с вашим вопросом. Также обратите внимание, что одновременный доступ также будет против абстракции "личное адресное пространство".
Итак, на ваши вопросы: одновременный прямой доступ к ОЗУ невозможен, ни с одинаковыми, ни с разными адресами. Использование кэша может охватить этот факт и, возможно, в некоторых случаях разрешить одновременный доступ. Это зависит от уровня и структуры кэша, а также от пространственной и временной локализации ваших данных. И да, вы правы: многоядерная обработка без расширенного доступа к ОЗУ мало поможет приложениям, интенсивно использующим ОЗУ.
Для лучшего понимания: просто вспомните, как работает Direct Memory Access. Как процессор, так и устройство DMA могут назначать адрес на шину, поэтому они должны исключать друг друга из одновременного использования шины.