à medida que os microprocessadores estão se tornando mais rápidos, principalmente por causa dos núcleos que estão sendo adicionados a cada poucos meses, o gap de latência de memória está se tornando mais amplo. A latência da memória foi de poucos ciclos em 1980 e está alcançando atualmente quase 1000 ciclos. Se o micro-processador tem núcleos suficientes e esperamos que eles não estão enviando pedidos para a memória principal ao mesmo tempo, haverá uma ocultação agregada parcial de latência de memória. Alguns núcleos podem estar executando enquanto outros estão esperando por resposta de memória. Esta não é a melhor situação para processadores multi-core. Especialistas em computação de alto desempenho estão se esforçando para manter todos os núcleos ocupados o tempo todo. Então, se cada núcleo é mantido ocupado o tempo todo, uma utilização completa de todo o micro-processador é possível. Criar threads baseados em software não vai resolver o problema por uma razão óbvia. Context switching threads to main memory is much expensive operation when compared to memory latency. Por exemplo, no contexto do motor de banda larga celular, mudar qualquer fio do núcleo leva 2000 micro-segundos, nos melhores casos. Algumas técnicas de software como dupla ou multi-buffering podem resolver o problema de latência de memória. No entanto, eles podem ser usados em algoritmos regulares, onde o programa sabe onde é o próximo bloco de dados para recuperar da memória; neste caso, ele envia pedido para a memória enquanto está processando dados previamente requisitados. No entanto, esta técnica não vai funcionar se ele o programa não sabe o próximo bloco de dados para recuperar da memória. Em outras palavras, ele não vai funcionar em algoritmos combinatórios, como a extensão de árvores ou ranking de listas aleatórias. Além disso, multi-buffering assume que a latência de memória é constante e pode ser escondida por estaticamente. No entanto, a realidade mostra que a latência da memória muda de aplicação para outra. Depende da carga geral dos recursos compartilhados do microprocessador, como a taxa de pedidos de memória de interconexões de núcleos compartilhados.