Pergunta

Eu preciso para melhorar a taxa de transferência do sistema.

O ciclo normal de otimização tem sido feito e nós já atingiu 1,5 X melhor taxa de transferência.

Agora estou começando a me perguntar se eu posso utilizar o cachegrind de saída para melhorar a taxa de transferência.

Alguém pode me apontar para como começar isso?

O que eu entendo é que nós precisamos para garantir dados mais frequentemente utilizados devem ser mantidos pequenos o suficiente para que ele permaneça em cache L1 e o próximo conjunto de dados deve caber na L2.

É este o sentido correto eu estou tomando?

Foi útil?

Solução

É verdade que cachegrind de saída, em si, não dá muita informação de como ir sobre otimização de código.O que precisa de saber como interpretá-lo e o que você está dizendo sobre ajustes de dados em L1 e L2, de fato, é a direção certa.

Para entender completamente como a memória de acesso a padrões de influenciar o desempenho, recomendo a leitura de um excelente artigo "O Que Todo Programador Deveria Saber Sobre A Memória" por Ulrich Drepper, a GNU libc mantenedor.

Outras dicas

Se você está tendo problemas para analisar o cachegrind de saída, olhe para o KCacheGrind (ele deve estar disponível na sua distribuição de escolha).Eu uso ele e encontrá-lo muito útil.

De acordo com a o Cachegrind documentação, os detalhes fornecidos a você por cachegrind são o número de erros de cache para uma determinada parte do código.O que você precisa saber sobre como caches de trabalho sobre a arquitetura que você está direcionando assim que você souber como corrigir o código.Na prática, isso significa fazer de dados menores ou alterar o padrão de acesso de alguns dados para que os dados em cache ainda está no cache.No entanto, você precisa entender o seu programa de dados e acesso a dados antes que você possa agir sobre a informação.Como diz no manual,

Em suma, Cachegrind posso dizer a você onde alguns dos gargalos no código são, mas não posso dizer-lhe como corrigi-los.Você tem que trabalhar isso para si mesmo.Mas pelo menos você tem a informação!

1,5 x é um bom speedup.Isso significa que você encontrou algo que teve 33% do tempo que você poderia se livrar.Eu aposto que você pode fazer mais, mesmo antes de descer para baixo-nível de questões como os dados do cache de memória. Este é um exemplo de como. Basicamente, você pode ter mais problemas de desempenho (e oportunidades para o speedup) que não foram grandes antes, como 25% de dizer.Bem, com 1,5 x speedup, que de 25%, agora é de 37,5%, por isso ele é "vale mais" do que ele era.Muitas vezes o problema está na forma de alguns meados de pilha de chamada de função que está a pedir trabalho, uma vez que você sabe quanto custa, você pode decidir não é totalmente necessário.Desde o kcachegrind não realmente identificar estes, você pode não perceber que isso é um problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top