2009-12-15 2 views
0

J'essaye d'obtenir les défauts de page quand j'exécute un programme avec deux parties différentes. Ce que je fais est quelques opérations utilisant deux méthodes de multiplication de matrice et essayent de comprendre lequel cause plus de défauts de page.Comment utiliser getrusage pour lire les erreurs de page en C?

/Operations for method 1 

getrusage (RUSAGE_SELF, &usage); 
fault1=usage.ru_minflt; 

/operations for Method 2 


getrusage (RUSAGE_SELF, &usage); 
fault2=usage.ru_minflt-fault1; 

Mais semble que fault2 = 0, ce que je ne pense pas est correct. Si j'utilise deux variables différentes utilisation et utilisation2, ne semble pas fonctionner non plus. Y a-t-il une commande pour commencer à compter les défauts pour chaque méthode de multiplication? Est-ce que je me trompe avec le code?

Merci pour les réponses

Répondre

0

Il est tout à fait possible que le nombre de défauts de page est zéro. Cela dépend davantage de la façon dont vous chargez les données, des bibliothèques partagées que vous utilisez (et si elles sont déjà en mémoire ou non), de l'utilisation de la copie sur écriture et similaire à celle de vos algorithmes. .

Etes-vous sûr de ne pas rechercher le nombre d'échecs de cache du processeur à la place? Pour la multiplication matricielle de grandes matrices, un algorithme naïf peut avoir une utilisation du cache beaucoup plus mauvaise qu'une optimisation optimale. Essayez d'utiliser valgrind avec l'outil cachegrind.

+0

Merci pour le commentaire, comment puis-je vérifier les failles du cache à la place? – Peter

+0

Exécutez-le sous 'cachegrind' (le cache frappe et se perd dans le matériel, en dessous du niveau du système d'exploitation, de sorte que le système d'exploitation ne les garde pas). – caf