Articles of cpu cache

Utilisation du compteur d’horodatage et de clock_gettime pour les erreurs de cache

Pour faire suite à cette rubrique , afin de calculer la latence de mémoire manquante, j’ai écrit le code suivant en utilisant _mm_clflush , __rdtsc et _mm_lfence (basé sur le code de cette question / réponse ). Comme vous pouvez le constater dans le code, je commence par charger le tableau dans le cache. Ensuite, […]

Structures de tableaux, tableaux de structures et modèle d’utilisation de la mémoire

J’ai lu sur la SOA et je voulais essayer de l’implémenter dans un système que je construis. Je suis en train d’écrire une simple structure C pour faire des tests mais je suis un peu confus, pour le moment j’ai 3 structures différentes pour un vec3 . Je vais leur montrer ci-dessous et ensuite entrer […]

Instruction probable Problème de synchronisation du cache dans le code à auto-modification?

Beaucoup de questions connexes mention x86 doit gérer correctement la synchronisation i-cache dans un code à auto-modification. J’ai écrit le morceau de code suivant qui bascule un appel de fonction entre différents threads entrelacés avec son exécution. J’utilise les opérations de comparaison et d’échange en tant que protection supplémentaire afin que la modification soit atomique. […]

Comment détecter de manière générique l’associativité de la ligne de cache à partir du code en mode utilisateur?

Je suis en train de monter un petit correctif pour l’outil cachegrind / callgrind dans valgrind qui détectera automatiquement, en utilisant un code complètement générique, des instructions CPU et la configuration du cache (pour le moment, seules les configurations automatiques x86 / x64 et d’autres architectures ne fournissent pas Configuration de type CPUID en code […]

Comment fonctionne CLFLUSH pour une adresse qui n’est pas encore en cache?

Nous essayons d’utiliser l’instruction Intel CLFLUSH pour vider le contenu du cache d’un processus sous Linux dans l’espace utilisateur. Nous créons un programme C très simple qui accède d’abord à un grand tableau, puis appelle CLFLUSH pour vider l’espace adresse virtuel de tout le tableau. Nous mesurons le temps de latence nécessaire à CLFLUSH pour […]

Copie conviviale en mémoire cache d’un tableau avec réajustement par index connu, rassemblement, dispersion

Supposons que nous ayons un tableau de données et un autre tableau avec des index. data = [1, 2, 3, 4, 5, 7] index = [5, 1, 4, 0, 2, 3] Nous voulons créer un nouveau tableau à partir d’éléments de data positionnés à partir d’ index . Le résultat devrait être [4, 2, 5, […]

Comment éviter les «spaghettis de pointeur de tas» dans les graphiques dynamics?

Le problème générique Supposons que vous codiez un système constitué d’un graphe et de règles de réécriture de graphes pouvant être activées en fonction de la configuration des nœuds voisins. C’est-à-dire que vous avez un graphique dynamic qui augmente / diminue de façon imprévisible au cours de l’exécution. Si vous utilisez naïvement malloc , de […]

Différence entre l’utilisation de while () et sleep () pour mettre le programme en mode veille

J’ai créé un object partagé et y accéder à partir de deux programmes différents et en mesurant le temps. Le tableau DATA est l’object partagé entre deux processus. Cas 1: Utilisation de While à l’intérieur du programme1 programme1: access shared DATA array ;// to load into memory and avoid page fault during access time calculation […]

pthread_create (3) et garantie de synchronisation de la mémoire dans les architectures SMP

Je suis en train de regarder la section 4.11 du document Section 4.11 de la norme Open Group Base Issue Issue 7 (Norme IEEE 1003.1, 2013), qui définit les règles de synchronisation de la mémoire. C’est le plus spécifique du standard POSIX que je suis parvenu à détailler le modèle de mémoire POSIX / C. […]

Inclus ou exclusif? Cache L1, L2 dans un processeur Intel Core IvyBridge

J’ai un processeur Intel Core IvyBridge, un processeur Intel (Core) i7-3770 @ 3.40GHz (L1-32KB, L2-256KB, L3-8MB). Je sais que la L3 est inclusive et partagée entre plusieurs kernelx. Je veux savoir ce qui suit concernant mon système PARTIE 1 : La L1 est-elle inclusive ou exclusive? L2 est inclusif ou exclusif? PARTIE 2 : Si […]