No sólo son diferentes núcleos pueden leer desde el mismo bloque de memoria, que se les permita escribir al mismo tiempo también. Si es "seguro" o no, esa es una historia completamente diferente. Necesitas implementar algún tipo de protección en tu código (usualmente hecho con semáforos o derivados de ellos) para protegerse contra múltiples núcleos que luchan por el mismo bloque de memoria de una manera que no permites específicamente.
Acerca del tamaño de la memoria que lee un núcleo a la vez, normalmente es un valor de registro, 32 bits en una CPU de 32 bits, 64 bits para una CPU de 64 bits, etc. Incluso la transmisión se realiza dword por dword (mira memcpy, por ejemplo).
Acerca de cómo son múltiples núcleos concurrentes, cada núcleo utiliza un solo bus para leer y escribir en la memoria, por lo que acceder a cualquier recurso (RAM, dispositivos externos, la unidad de procesamiento de coma flotante) es una solicitud a la vez núcleo a la vez. Sin embargo, el procesamiento real dentro del núcleo es completamente concurrente. Las transferencias de DMA tampoco bloquean el autobús, las transferencias simultáneas se ponen en cola y se procesan de una en una (creo que no estoy 100% seguro de esto).
editar: solo para aclarar, a diferencia de la otra respuesta aquí, estoy hablando solo de un escenario sin caché. Por supuesto, si la memoria se almacena en caché, el acceso de solo lectura es completamente simultáneo.
Cualquier acceso de memoria tiene realmente un tamaño de línea de caché = 64 bytes para procesadores modernos. El acceso a la línea de caché es atómico. Las líneas pueden ser compartidas por núcleos para leer. – osgx