Bien que la plupart des réponses approchent du côté du modèle logiciel et / ou matériel, la façon la plus propre est de considérer le fonctionnement des puces de RAM physiques. (Le cache est situé entre le processeur et la mémoire, et utilise simplement le même bus d'adresse, et son fonctionnement est complètement transparent pour le processeur.) Les puces RAM ont un décodeur d'adresse unique, qui reçoit l'adresse de la cellule de mémoire, arrivant sur le bus d'adresse (et de même un bus de données, soit en entrée, soit en sortie). Les mémoires actuelles sont construites selon "l'approche à processeur unique", c'est-à-dire qu'un processeur est connecté via un bus à une puce de mémoire. En d'autres termes, il s'agit du "goulot d'étranglement de von Neumann", car chaque instruction doit faire référence à la mémoire au moins une fois. Pour cette raison, sur un fil (ou des fils, alias bus), un seul signal peut exister à la fois, de sorte que la puce RAM peut recevoir une adresse de cellule à la fois. Tant que vous ne pouvez pas vous assurer que les deux cœurs mettent la même adresse sur le bus d'adresses, l'accès simultané au bus par deux pilotes de bus différents (comme les cœurs) n'est physiquement pas possible. (Et, si c'est la même chose, c'est redondant).
Le reste est la soi-disant accélération matérielle. Le bus de cohérence, le cache, l'accès SIMD, etc. ne sont que quelques belles façades devant la RAM physique, votre question portait sur. Les accélérateurs mentionnés peuvent couvrir la lutte pour l'utilisation exclusive du bus d'adresse, et les modèles de programmation n'ont pas grand-chose à voir avec votre question. A noter également que l'accès simultané serait également contre l'abstraction "espace d'adressage privé".
Donc, à vos questions: l'accès direct direct à la RAM n'est pas possible, ni avec la même, ni avec des adresses différentes. L'utilisation du cache peut couvrir ce fait et peut permettre un accès apparemment simultané dans certains cas. Cela dépend du niveau et de la construction du cache, ainsi que de la localisation spatiale et temporelle de vos données. Et oui, vous avez raison: le traitement multi (cœur) sans accès amélioré à la RAM, n'aidera pas beaucoup les applications gourmandes en RAM.
Pour une meilleure compréhension: rappelez simplement le fonctionnement de Direct Memory Access. Le CPU et le périphérique DMA peuvent tous deux mettre une adresse sur le bus, de sorte qu'ils doivent s'exclure mutuellement de l'utilisation simultanée du bus.