Como escrever programa amigável de cache de instruções em c ++?

Recentemente, Herb Sutter deu uma ótima palestra sobre"C ++ moderno: o que você precisa saber". O tema principal dessa palestra foi a eficiência e a importância da localização dos dados e do acesso à memória. Ele também explicou como o acesso linear da memória (array / vetor) seria amado pela CPU. Ele pegou um exemplo de outra referência clássica"Desempenho do jogo por Bob Nystrom" neste tópico.

Depois de ler esses artigos, percebi que há dois tipos de cache que afetam o desempenho do programa:

Cache de DadosCache de instruções

Cachegrind A ferramenta também mede as informações de instrumentação do tipo cache do nosso programa. Os primeiros pontos foram explicados por muitos artigos / blog e como obter a boa eficiência do cache de dados (localidade dos dados).

No entanto, não recebi muita informação sobre o tópicoCache de instruções e que tipo de coisa devemos cuidar em nosso programa para obter o melhor desempenho? De acordo com meu entendimento, nós (programadores) não temos muito controle sobre qual instrução ou qual ordem estaria executando.

Seria muito bom se pequenos programas em c ++ explicassem como esse contador (cache de instruções .i.e.) varia com o nosso estilo de programa de gravação. Quais são as melhores práticas que o programador deve seguir para obter melhor desempenho em relação a este ponto?

Quero dizer, podemos entender sobre os tópicos do cache de dados se o nosso programa (lista vetor versus vetor) da mesma maneira, for possível explicar sobre o segundo ponto. A principal intenção desta pergunta é entender o assunto o máximo possível.

questionAnswers(1)

yourAnswerToTheQuestion