Pergunta

Eu não espero que todo mundo está usando o Rational Purify.

Então, o que fazer quando você quer medir:

  • o tempo tomado por uma função
  • uso de memória de pico
  • cobertura de código

No momento, temos que fazer isso manualmente usando instruções de log com carimbos de data / hora e um outro script para analisar o log e a saída para o excel.ufa...)

O que você recomendaria?Apontando para ferramentas ou técnicas serão bem-vindos!

EDITAR:Desculpe, eu não especifique o ambiente de primeira, A sua simples C em uma propriedade móvel plataforma

Foi útil?

Solução

Você provavelmente deseja que diferentes ferramentas de criação de perfil de desempenho e cobertura de código.

Para perfilamento eu prefiro Tubarão no MacOSX.É grátis da Apple e muito bom.Se o seu aplicativo é de baunilha C você deve ser capaz de usá-lo, se você pode se apossar de um Mac.

Para a criação de perfis no Windows, você pode usar LTProf.Barato, mas não muito:http://successfulsoftware.net/2007/12/18/optimising-your-application/

(Acho que a Microsoft está realmente fotografar a si mesmo em pé, por não prestar um bom profiler com o mais barato versões do Visual Studio.)

Para a cobertura eu prefiro a Cobertura do Validador no Windows:http://successfulsoftware.net/2008/03/10/coverage-validator/ Ele atualiza a cobertura em tempo real.

Outras dicas

Eu tenho feito muito isso.Se você tem um IDE, ou um GELO, existe uma técnica que demora algum esforço manual, mas funciona sem falhar.

Aviso:programadores modernos odeio isso, e eu estou indo para obter votos negativos.Eles adoram suas ferramentas.Mas ele realmente funciona, e nem sempre você tem a boas ferramentas.

Eu suponho que no seu caso o código é algo como o DSP ou vídeo que é executado em um timer, e tem de ser rápido.Suponha que você executar em cada escala de timer é subrotina A.Escrever o código de teste para executar Uma sub-rotina em um loop simples, digamos 1000 vezes, ou o tempo suficiente para fazer você esperar pelo menos alguns segundos.

Durante a sua execução, aleatoriamente parar com uma tecla de pausa e de exemplo a pilha de chamadas (não apenas o contador de programa) e gravar.(Que é a parte manual.) Fazer isso algumas número de vezes, como 10.Uma vez não é suficiente.

Agora olhar para as semelhanças entre a pilha de amostras.Olhar para qualquer instrução ou instrução call, que aparece em pelo menos 2 amostras.Haverá muitos desses, mas alguns deles serão no código que você pode otimizar.

Fazê-lo, e você vai obter um bom speedup, garantido.A 1000 iterações vai demorar menos tempo.

A razão que você não precisa de um monte de amostras é que você não está procurando por coisas pequenas.Como se você vê uma chamada específica de instrução, em 5 de 10 amostras, é responsável por cerca de 50% do tempo total de execução.Mais amostras, diria mais precisamente o que a percentagem é, se você realmente quer saber.Se você gosta de mim, tudo que você quer saber é onde ele está, para que você possa corrigi-lo e passar para o próximo.

Faça isso até que você não pode encontrar qualquer coisa mais para otimizar, e você vai estar em ou perto da sua velocidade máxima.

Para aplicações complexas sou uma grande fã da Intel Vtune.Ele é um pouco diferente mentalidade tradicional profiler que instrumentos o código.Ele funciona por amostragem, o processador para ver onde o ponteiro de instrução é 1.000 vezes por segundo.Ele tem a enorme vantagem de não necessitar de quaisquer alterações aos seus binários, que tão frequentemente como não mudaria o tempo de que você está tentando medir.

Infelizmente, não é boa para .net ou java, já que não existe um caminho para a Vtune para mapear ponteiro de instrução para o símbolo, assim como não há com o código tradicional.

Ele também permite a você medir a todo o tipo de processador/hardware centrada métricas, como relógios por instrução, de acertos do cache/perde, TLB acertos/erros, etc., que permitem que você identifique o porquê de certas seções de código pode ser mais demorado do que seria de esperar apenas por inspecionar o código.

Se você está fazendo um 'metálicos' incorporado 'C' do sistema (não sei bem o que 'móvel', implícita no seu lançamento) e, em seguida, você geralmente tem algum tipo de temporizador ISR, em que é bastante fácil de exemplo o código de endereço em que ocorreu a interrupção (por escavar na pilha ou olhando link registos ou o que seja).Então é trivial para construir um histograma de endereços de algumas combinações de granularidade/intervalo de interesse.

Normalmente, em seguida, não é muito difícil inventar alguma combinação de código/script/planilhas do Excel, que se funde seu histograma conta com endereços do seu vinculador símbolo/lista de arquivo para dar a você as informações de perfil.

Se você está muito RAM limitada, pode ser um pouco de dor para coletar dados suficientes para ser simples e útil, mas você precisa informar-nos mais sobre a sua plataforma.

nProf - Livre, que não para .LÍQUIDA.

Começa o trabalho feito, pelo menos o suficiente para ver o 80/20.(20% do código, tendo 80% do tempo)

Windows (.A NET Nativa e Exes): AQTime é uma grande ferramenta para o dinheiro.Autônomo ou como Visual Studio plugin.

Java:Eu sou um fã de JProfiler.Novamente, pode executar autônoma ou como um Eclipse (ou vários outros IDEs) plug-in.

Eu acredito que ambos têm versões de avaliação.

O O Google Perftools são extremamente úteis nesse sentido.

Eu uso devpartner com MSVC 6 e XP

Como qualquer ferramenta, indo para o trabalho, se a sua plataforma é um sistema operacional proprietário?Eu acho que você está fazendo o melhor que você pode agora

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