Puis-je vérifier si une partie de la mémoire (allouée à l’aide de malloc) rest dans le cache?

Supposons que j’alloue de l’espace en utilisant malloc. Puis-je vérifier si cette mémoire continue rest dans le cache de la CPU (ou même mieux dans quels niveaux de cache L1, L2, L3, etc.) au moment de l’exécution?

    Non, mais vous pouvez utiliser les instructions de prélecture pour le déplacer de la mémoire vers la mémoire cache avant de l’utiliser. Si les données sont déjà dans le cache, ces instructions doivent être rapides (il y a des mises en garde spécifiques à l’architecture, mais je ne sais pas quelle plate-forme vous utilisez).

    Vous pouvez demander si la mémoire est en cache parce que le matériel le gère au-dessous du niveau que vous pouvez facilement observer. Et sur les architectures avec TLB géré par le matériel, la mémoire sera suivie partout par des adresses virtuelles.

    Déterminer le contenu du cache de la CPU est très faible et va au-delà de ce que C peut faire. En fait, la mise en cache est complètement transparente pour le code que vous écrivez peut-être, car le CPU décide à peu près ce qu’il faut mettre en cache et ne peut pas se permettre de perdre du temps dans une logique compliquée qui explique comment procéder. Un guide Google rapide sur des outils spécifiques à cet effet a abouti au Guide de réglage Intel et aux Performance Analysis Papers: https://software.intel.com/en-us/articles/processor-specific-performance-analysis-papers . Évidemment, ce sera spécifique au vendeur. AMD aura probablement des outils spécifiques.

    De manière générale, du moins pour la plupart des choses pratiques, non (et même si vous le pouviez, au moment où vous avez essayé d’utiliser les informations, elles pourraient bien être périmées).

    Si vous lisez les données à plusieurs resockets, vous pouvez mesurer le temps d’access moyen à long terme assez facilement, ce qui donne une indication assez convenable de la provenance des données.

    Il existe quelques processeurs (principalement intégrés) qui vous permettent de verrouiller certaines données dans le cache ou de mettre de côté une partie du cache en tant que mémoire adressable que vous gérez manuellement.