Pergunta

Eu estava discutindo redes neurais (NN) com um amigo durante o almoço outro dia e ele afirmou que o desempenho de uma NN escrita em Java seria semelhante a uma escrita em C++.Eu sei que com técnicas de compilador 'just in time' o Java pode se sair muito bem, mas de alguma forma eu simplesmente não acredito nisso.Alguém tem alguma experiência que possa esclarecer esse assunto? Esta página é a extensão da minha leitura sobre o assunto.

Foi útil?

Solução

O Hotspot JIT agora pode produzir código mais rápido do que C++.O motivo é a otimização empírica em tempo de execução.

Por exemplo, ele pode ver que um determinado loop pega a ramificação "falsa" 99% do tempo e reordena as instruções do código de máquina de acordo.

Há muitos artigos sobre isso.Se você quiser todos os detalhes, leia Excelente whitepaper da Sun.Para informações mais informais, tente este.

Outras dicas

Eu estaria interessado em uma comparação entre o Hotspot JIT e o C++ otimizado para otimização guiada por perfil.

O problema que vejo com o Hotspot JIT (e qualquer compilador JIT otimizado para perfil de tempo de execução) é que as estatísticas devem ser mantidas e o código modificado.Embora existam casos isolados, isso resultará em código de execução mais rápida, duvido que os compiladores JIT otimizados para perfil sejam executados mais rapidamente do que código C ou C++ bem otimizado na maioria das circunstâncias.(Claro que posso estar errado.)

De qualquer forma, normalmente você ficará à mercê do projeto maior, usando a mesma linguagem em que está escrito.Ou você ficará à mercê da base de conhecimento de seus colegas de trabalho.Ou você estará à mercê da plataforma que você está almejando (uma JVM está disponível na arquitetura que você está almejando?).No caso raro de você ter total liberdade e estar familiarizado com os dois idiomas, faça algumas comparações com as ferramentas que tem à sua disposição.Essa é realmente a única maneira de determinar o que é melhor.

A única resposta possível é:faça um protótipo e meça você mesmo.Se minha experiência for de algum interesse, Java e C# sempre foram muito mais lentos que C++ para o tipo de trabalho que eu estava fazendo - acredito que principalmente por causa do alto consumo de memória.Claro, você pode chegar a uma conclusão completamente diferente.

Não se trata estritamente de desempenho C++ versus Java, mas ainda assim é interessante nesse aspecto:A papel sobre o desempenho de programas executados em um ambiente de coleta de lixo.

Se a coleta excessiva de lixo for uma preocupação, você sempre poderá reutilizar objetos não utilizados de alta rotatividade.

Crie uma fábrica que mantenha uma fila de SoftReferences para objetos reciclados, utilizando-os antes de criar novos objetos.Em seguida, no código que usa esses objetos, devolva-os explicitamente à fábrica para reciclagem.

Provavelmente C++, embora eu acredite que você dificilmente notará a diferença além de um tempo de inicialização lento.Java, entretanto, torna o desenvolvimento mais rápido e a manutenção mais fácil.

No grande esquema das coisas, você está debatendo talvez uma diferença de desempenho de 5%, onde obteria um aumento de várias ordens de magnitude ao mudar para CUDA ou hardware dedicado.

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