À mesure que les microprocesseurs deviennent plus rapides, principalement en raison de l’ajout de cœurs tous les quelques mois, l’écart de latence de la mémoire s’élargit. La latence de la mémoire était de quelques cycles en 1980 et elle atteint aujourd’hui près de 1000 cycles. Si le micro-processeur a suffisamment de cœurs et qu’il n’envoie pas de requêtes à la mémoire principale en même temps, il y aura un masquage partiel de la latence de la mémoire. Certains cœurs peuvent s’exécuter tandis que d’autres attendent une réponse de la mémoire. Ce n’est pas la meilleure situation pour les processeurs multicœurs. Les experts en calcul haute performance s’efforcent de garder tous les cœurs occupés tout le temps. Ainsi, si chaque cœur est occupé tout le temps, une utilisation complète de l’ensemble du micro-processeur est possible. La création de threads logiciels ne résoudra pas le problème pour une raison évidente. La commutation de threads de contexte vers la mémoire principale est une opération très coûteuse par rapport à la latence de la mémoire. Par exemple, dans le contexte du moteur à large bande cellulaire, la commutation de l’un des threads du noyau prend 2000 micro-secondes dans les meilleurs cas. Certaines techniques logicielles telles que la double ou la mise en mémoire tampon multiple peuvent résoudre le problème de latence de la mémoire. Cependant, ils peuvent être utilisés dans des algorithmes réguliers, où le programme sait où se trouve le prochain bloc de données à récupérer de la mémoire; dans ce cas, il envoie une requête en mémoire pendant qu’il traite les données de requête précédentes. Cependant, cette technique ne fonctionnera pas si le programme ne connaît pas le prochain bloc de données à récupérer de la mémoire. En d’autres termes, cela ne fonctionnera pas dans les algorithmes combinatoires, tels que l’arborescence ou le classement aléatoire par liste. De plus, la mise en mémoire tampon multiple suppose que la latence de la mémoire est constante et peut être masquée statiquement. Cependant, la réalité montre que la latence de la mémoire change d’une application à l’autre. Cela dépend de la charge globale sur les ressources partagées du microprocesseur, telles que le taux de demandes de mémoire interconnexions de cœurs partagés.