Les données fréquemment mises à jour sont en fait l'application parfaite du cache. Comme jdt mentionné, les caches CPU modernes sont assez grandes, et 0.5mb pourrait bien tenir dans le cache. Plus important, cependant, lire-modifier-écrire en mémoire non-attachée est TRÈS lent - la lecture initiale doit bloquer sur la mémoire, alors l'opération d'écriture AUSSI doit bloquer sur la mémoire pour commettre. Et juste pour ajouter l'insulte à la blessure, le CPU pourrait implémenter une mémoire non-cache en chargeant les données dans le cache, puis invalider immédiatement la ligne de cache - vous laissant ainsi dans une position qui est garanti être pire qu'avant. Avant d'essayer de dérouter le CPU comme cela, vous devriez vraiment tester l'ensemble du programme et voir où se trouve le vrai ralentissement. Les profileurs modernes tels que cachegrind de valgrind peuvent mesurer les échecs de cache, ainsi vous pouvez trouver si c'est aussi une source significative de ralentissement. Sur un autre point, plus pratique, si vous faites 30 RMW par seconde, il s'agit dans le pire des cas de quelque chose de l'ordre de 1920 octets d'encombrement du cache. Ceci est seulement 1/16 de la taille L1 d'un processeur Core 2 moderne, et susceptible d'être perdu dans le bruit général du système. Donc, ne vous en faites pas trop :)
Cela dit, si par «accédé simultanément» vous voulez dire «accédé par plusieurs threads simultanément», faites attention aux lignes de cache qui rebondissent entre les processeurs. Cela ne serait pas aidé par la mémoire RAM non attachée - si cela devait être pire, car les données devraient retourner à la RAM physique à chaque fois au lieu de passer éventuellement par le bus inter-CPU plus rapide - et la seule façon L'éviter en tant que problème est de minimiser la fréquence d'accès aux données partagées. Pour en savoir plus à ce sujet, voir http://www.ddj.com/hpc-high-performance-computing/217500206
Je pense que cela nuirait à perf - en marquant comme non-cacheable toutes les mises à jour fréquentes devraient aller en mémoire plutôt que d'écrire dans le cache. – Michael
Le cache n'est utile que dans ce cas si les écritures ne sont pas séquentielles et si plusieurs écritures tombent sur la même ligne de cache. Si les écritures sont semi-aléatoires et qu'au moment où le même emplacement est réécrit, l'emplacement a été vidé du cache. –
@Michael - les mises à jour sont supposées * contourner le cache dans ce cas. – Tom