S'il n'y a vraiment pas d'écritures dans votre bloc de 1 Mo, alors oui, chaque core peut lire sa propre ligne de cache sans problème car aucune écriture n'est validée et donc aucun problème de cohérence de cache.
Dans une architecture multicœur, il existe fondamentalement un cache pour chaque cœur et un «protocole de cohérence du cache» qui invalide le cache sur certains cœurs qui ne disposent pas des informations les plus à jour. Je pense que la plupart des processeurs implémentent le MOESI protocol pour la cohérence du cache.
La cohérence du cache est un sujet complexe qui a été largement discuté (j'aime particulièrement certains articles de Joe Duffy here et here). La discussion tourne néanmoins autour des pénalités de performance possibles du code qui, tout en étant apparemment sans verrou, peut ralentir en raison du protocole de cohérence de la mémoire cache pour maintenir la cohérence entre les caches des processeurs, mais tant qu'il n'y a pas d'écriture, cohérence à maintenir et donc pas perdu sur la performance. Pour clarifier, comme indiqué dans le commentaire, la RAM ne peut pas être accédée simultanément puisque les architectures x86 et x64 implémentent un seul bus qui est partagé entre les cœurs avec SMP garantissant l'équité d'accès à la mémoire principale. Néanmoins, cette situation est cachée par chaque cache central qui permet à chaque core d'avoir sa propre copie des données. Pour 1 Mo de données il serait possible d'engager sur certains conflits alors que le core mettrait à jour son cache mais cela serait négligeable.
Quelques liens utiles:
N'importe quel accès mémoire a vraiment une taille de ligne de cache = 64 octets pour les processeurs modernes. L'accès à la ligne de cache est atomique. Les lignes peuvent être partagées par des cœurs pour la lecture. – osgx