Pré-extraction de données dans le cache pour x86-64
Dans mon application, à un moment, j'ai besoin d'effectuer des calculs sur un grand bloc contigu de mémoire de données (100s de mo). Ce que je pensais était de garder le pré-chargement de la partie du bloc mon programme va toucher à l'avenir, de sorte que lorsque je effectuer des calculs sur cette partie, les données sont déjà dans le cache.
Quelqu'un peut me donner un exemple simple de comment réaliser cela avec gcc? J'ai lu _mm_prefetch
quelque part, mais ne savent pas comment l'utiliser correctement. Note aussi que j'ai un système multicœur, mais chaque âme sera de travailler sur une région différente de la mémoire en parallèle.
source d'informationauteur pythonic | 2012-04-25
Vous devez vous connecter pour publier un commentaire.
gcc
utilise des fonctions internes comme une interface de bas niveau des instructions. En particulier, pour votre cas__builtin_prefetch
. Mais vous ne devriez voir une différence mesurable lors de l'utilisation de ce dans les cas où le motif de l'accès n'est pas facile de prédire automatiquement.Les Processeurs modernes ont de très bonnes automatique prefetch et vous découvrirez peut-être que vous faire plus de mal que de bien si vous essayez de lancer le logiciel de pré-chargement. Il est plus probable beaucoup plus "low hanging fruits" que vous pouvez vous concentrer sur l'optimisation si vous trouvez que vous avez réellement un problème de performance. Prefetch tend à être l'une des dernières choses que vous pourriez essayer, lorsque vous êtes désespéré pour un peu plus de pour cent de débit.