2012-06-16 3 views
0

Existe-t-il un moyen java de vérifier si un objet spécifique se trouve dans le cache CPU? Existe-t-il un moyen de tester si la lecture/écriture d'un de ses champs rendra un cache manquant?Comment vérifier si un objet se trouve dans le cache de l'UC?

J'ai écrit des programmes java dans le passé, mais pas complexes, et maintenant je dois faire des recherches académiques en Java.

Si ce n'est pas possible, existe-t-il une façon générique de simuler ce genre de chose? Et est-ce possible dans la programmation de bas niveau, comme C?

+0

Les programmes Java s'exécutent tous dans une machine virtuelle ... pour le dire simplement, non. – Brendan

+2

Je serais très choqué s'il y avait un moyen de le faire. De tels détails devraient être cachés du programmeur ... –

+1

Je ne suis pas sûr que ce soit même possible en C ou même en assemblage. Toute tentative de "vérifier" l'adresse l'amènera automatiquement dans le cache. – Mysticial

Répondre

6

TL; DR - Pas

En Java la machine virtuelle Java vous protège de la CPU si ce genre d'information à faible niveau est, par sa conception, pas exposé au programme. En outre, même si vous utilisez des langages de niveau inférieur (par exemple, C) et que vous utilisez des hacks au niveau de l'assembly, j'imagine difficilement où vous pourriez obtenir des données significatives sur l'état du cache pour la raison suivante: le cache est dynamique - les nouvelles données sont chargées en continu et les données (plus anciennes) en sont continuellement vidées. À chaque instant donné, plusieurs processus s'exécutent au sommet de votre CPU, chacun d'eux engendrant au moins un thread (probablement plus que cela) - l'activité combinée de tous ces threads affecte le cache et les données stockées dans celui-ci. Ainsi, même si vous pouviez obtenir une réponse Y/N à la question is object X in cache, cette réponse deviendrait obsolète dès que vous l'auriez obtenue.

+0

Y at-il un moyen de savoir à propos d'un cache-miss après que cela soit arrivé? – Oren

+0

Pour ce que cela vaut, mémoire de bloc-notes et les instructions de cache de MIPS sont des exemples de la façon dont certains processeurs exposent le cache à l'application. –

+0

@Oren vous pouvez vérifier les échecs de cache en utilisant MEM_LOAD_RETIRED.LLC_MISS perf. counter (pour cache L3) par VTune ou tout autre profileur. – Elalfer

0

Comme d'autres l'ont déjà dit: non.

Et même si vous pouviez interroger le cache pour des données spécifiques, il est impossible de dire si l'objet entier est dans le cache, car il n'existe pas de telle notion à un niveau aussi bas.

Questions connexes