Los datos actualizados con frecuencia son la aplicación perfecta de caché. Como mencionó jdt, los cachés de CPU modernos son bastante grandes, y 0.5mb bien caben en el caché. Sin embargo, lo más importante es que leer, modificar, escribir en la memoria no en memoria caché es MUY lento: la lectura inicial tiene que bloquearse en la memoria, y luego la operación de escritura TAMBIÉN tiene que bloquearse en la memoria para confirmar. Y para colmo de males, la CPU podría implementar memoria sin memoria caché cargando los datos en la memoria caché, e inmediatamente invalidando la línea de la memoria caché, dejándolo en una posición que está garantizada que es peor que antes.
Antes de intentar superar la CPU de esta manera, realmente debe comparar el programa completo y ver dónde está la ralentización real. Los perfiladores modernos como valgrind cachegrind pueden medir errores de caché, por lo que puede encontrar si eso también es una fuente importante de desaceleración.
En otra nota más práctica, si está haciendo 30 RMW por segundo, en el peor de los casos es algo del orden de 1920 bytes de huella de caché. Esto es solo 1/16 del tamaño L1 de un procesador Core 2 moderno, y es probable que se pierda en el ruido general del sistema. Así que no te preocupes demasiado :)
Dicho esto, si por 'acceso simultáneo' te refieres a 'accedido por múltiples hilos simultáneamente', ten cuidado con las líneas de caché que rebotan entre las CPU. Esto no sería ayudado por la memoria RAM no almacenada en memoria caché - en todo caso sería peor, ya que los datos tendrían que viajar hasta la memoria RAM física cada vez en lugar de posiblemente pasar por el bus más rápido entre CPU, y la única manera evitarlo como un problema es minimizar la frecuencia de acceso a los datos compartidos. Para obtener más información al respecto, consulte http://www.ddj.com/hpc-high-performance-computing/217500206
Creo que esto dañaría el rendimiento: al marcar como no almacenable en caché todas las escrituras de actualización frecuentes tendrían que ir a la memoria en lugar de escribir en el caché. – Michael
La caché solo es útil en este caso si las escrituras no son secuenciales y las escrituras múltiples caen en la misma línea de caché. Si las escrituras son semi aleatorias y para el momento en que se vuelve a escribir la misma ubicación, esa ubicación se ha eliminado de la memoria caché, tiene poco sentido. –
@Michael: se supone que * las actualizaciones * omiten la caché en este caso. – Tom