opa, se vc nao otimizar manualmente seu codigo asm, com toda certeza o compilador vai acabar batendo ele em performance. veja que os primeiros compiladores fortran na decada de 50 jah tinham performance proxima a codigo asm *otimizado* manualmente.
o que assusta de olhar o codigo gerado pelo compilador eh perceber que no caso de algoritmos complexos, nao adianta nem tentar, o compilador sempre vai conseguir traduzir o algotimo complexo em uma sequencia mais otimizada de instrucoes. o grande problema entao nao eh saber se o compilador vai fazer isso bem ou nao, mas sim se o seu algoritmo de alto nivel esta bom. e nisso eu vejo uma grande falha na maioria dos ambientes de desenvolvimento de software.
tradicionalmente, uma ide para software nao passa de um bom editor de texto. quando muito, ele possui um software extra q te permite debugar (usando o hw real) e nos melhorzinhos simular o hw via software. mas a parte de debug costuma nao passar de uma tela com o codigo asm e C onde vc pode avancar passo a passo e colocar alguns break points.
isso constrasta bastante com uma ide para fpga, onde os editores de texto nem sao tao bons hehehe mas vc comeca escrevendo a descricao comportamental do hardware em verilog, por exemplo. entao a medida que vai descrevendo as interfaces e conectando os modulos, vc vai visualizando a arquitetura hierarquica dos modulos conectados uns aos outros. na medida que vc tem alguma coisa mais palpavel, vc pode sintetizar e conferir o esquematico rtl para ver a situacao do negocio.
ocorre que, conforme a sintaxe que vc escolhe para descrever o comportamento do hw, vc vai obter um ou outro resultado. de olho vc percebe se o resultado eh bom ou ruim. normalmente um resultado ruim eh quando vc tem logica combinacional muito extensa entre registros clockados e muito uso de celulas. o resultado eh bom quando vc tem pouca logica combinacional entre registros e vasto uso de estruturas compactas disponiveis no proprio hw da fpga.
infelizmente nao existe nada parecido em software, entao fica dificil, olhando para um codigo asm, imaginar se o fluxo de dados esta otimizado ou nao. vc pode malemal inferir se o resultado esta bom ou nao pelo tamanho do codigo, mas isso nao eh um indicativo bom para processadores maiores (jah fiz testes de otimizacao manual trocando dezenas de instrucoes simples geradas pelo gcc por instrucoes compactas para operacao de blocos no x86... e no fim obtive ganho zero!). nao sei se realmente valeria a pena inspecionar asm... acho que alguma forma de diagrama seria o mais correto e, de fato, algumas metodologias de zero defeitos apontam justamente para esse caminho.
bom, daih tem a simulacao. normalmente vc pode simular um processador no seu pc, mas comparando com o que se consegue numa ide de fpga dah vontade de chorar. na ide para fpga vc nao simula apenas o componente alvo, como consegue simular todos os outros componentes presentes na mesma placa e mesmo os outros componentes que formam o sistema como um todo.
isso ocorre pq existe o codigo sintetizavel que ira dar origem a fpga em si e o codigo nao sintetizavel, que esta mais para linguagem C do que para hw em si. e exatamente essa parte nao sintetizavel que fornece flexibilidade para gerar impulsos que simulam os componentes em volta da fpga. vc pode tanto monitorar os sinais eletricos em qq ponto do sistema como pode tratar o sistema como uma entidade de alto nivel, por exemplo, com um modulo que simula um processador escrevendo dados na fpga e consultando registros de estado.
eu ateh jah pensei em entrar nesse mercado de ides avancadas para sw, mas eh um negocio complexo demais... e claro, os fabricantes dos processadores tem mais condicoes de produzir ides tao completas, com simuladores e debuggers, mas mesmo assim, acho que meio que falta muita coisa ainda para chegar no mesmo estagio dos fabricantes de fpgas... e dureza eh saber que os caras que suportam o projeto de asics tem metodologias ainda mais avancadas e completas!
Djalma Toledo Rodrigues escreveu:compiladores podem eventualmente gerar codigo mais eficiente que codigos otimizados manualmente. "
Em Assembly raramente se otimiza, não se faz necessário. (*)
um exemplo bem classico sao os compiladores para fpgas, onde vc entra com uma descricao comportamental do hardware e o compilador infere uma logica para o que vc escreveu. neste caso, eh comum vc codificar e continuamente olhar o esquematico rtl, para ver se o compilador esta inferindo solucoes logicas de melhor performance.
Idem. Projeto de Circuito .
Apenas Circuitos de RF geralmente necessitam, já que por sua própria natureza é
sensível a posicionamento de componentes, interacoplamentos, etc.
Em Circuitos de Aúdio, e aqui mi refiro a Audio de Alta Qualidade, também mas, raro
vc pode fazer o mesmo no caso de um compilador C.
Rs uma contradição com a primeira Citação ?
DJ