Domanda

Stavo discutendo le reti neurali (NN) con un amico a pranzo l'altro giorno ha affermato le prestazioni di un NN scritto in Java sarebbe simile a quello scritto in C++.So che con il "just in time" compilatore tecniche di Java può fare molto bene, ma in qualche modo io non comprarlo.Qualcuno ha qualche esperienza che potrebbe far luce su questo problema? Questa pagina è la misura della mia lettura sul tema.

È stato utile?

Soluzione

L'Hotspot JIT può ora generare il codice più veloce rispetto al C++.Il motivo è di run-time empirica di ottimizzazione.

Per esempio, si può vedere che un certo ciclo prende il "falso" ramo 99% del tempo e riordinare le istruzioni in codice macchina di conseguenza.

C'è un sacco di articoli su questo.Se volete tutti i dettagli, leggere Sole eccellente whitepaper.Per di più informale, info, provate questo.

Altri suggerimenti

Sarei interessato a un confronto tra Hotspot JIT e di ottimizzazione pgo ottimizzato C++.

Il problema che vedo con l'Hotspot JIT (e qualsiasi runtime profilo ottimizzato compilatore JIT) è che le statistiche devono essere mantenuti e il codice modificato.Mentre ci sono casi isolati, questo si tradurrà in più rapida l'esecuzione di codice, mi viene il dubbio che il profilo ottimizzato compilatori JIT sarà correre più veloce di ben ottimizzato codice C o C++ in più circostanze.(Ovviamente potrei sbagliarmi.)

Comunque, di solito si sta andando essere in balia di un progetto più ampio, utilizzando lo stesso linguaggio è scritto in.O sarete in balia di una base di conoscenze dei vostri collaboratori.O sarete in balia della piattaforma si sono rivolti (è una JVM disponibili sull'architettura siete rivolti?).Nel raro caso, si ha la completa libertà e si ha familiarità con entrambe le lingue, fare alcuni confronti con gli strumenti che avete a vostra disposizione.Questo è davvero l'unico modo per determinare ciò che è meglio.

L'unica risposta possibile è:fare un prototipo e misura per te.Se la mia esperienza è di alcun interesse, Java e C# sono state sempre molto più lento rispetto a C++ per il tipo di lavoro che stavo facendo, credo soprattutto a causa dell'alto consumo di memoria.Naturalmente, si può venire a una completamente diversa conclusione.

Questo non è strettamente riguardanti il C++ vs Java prestazioni, ma comunque interessante in proposito:Un carta sulle performance dei programmi in esecuzione in un bidone della spazzatura raccolti ambiente.

Se eccessivo di garbage collection è un problema, si può sempre riutilizzare inutilizzati ad alta varianza di oggetti.

Creare una fabbrica che mantiene una coda di SoftReferences di oggetti di recupero, l'utilizzo di questi prima di creare nuovi oggetti.Poi nel codice che utilizza questi oggetti, in modo esplicito ritorno di questi oggetti per la fabbrica per il riciclaggio.

Probabilmente C++, anche se credo che quasi non si nota la differenza, oltre a un tempo di avvio lento.Java, tuttavia, rende lo sviluppo più rapido e più semplice la manutenzione.

Nel grande schema delle cose, si sta discutendo forse un 5% di differenza di prestazioni in cui si potrebbe ottenere diversi ordini di grandezza aumento, passando a CUDA o hardware dedicato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top