簡體   English   中英

神經網絡的C ++ / Java性能?

[英]C++/Java Performance for Neural Networks?

前幾天我和一位朋友在午餐時討論神​​經網絡(NN),他聲稱用Java編寫的NN的性能類似於用C ++編寫的。 我知道,通過'及時'編譯技術,Java可以做得很好,但不知怎的,我只是不買它。 有沒有人有經驗可以解釋這個問題? 這個頁面是我對這個主題的閱讀程度。

Hotspot JIT現在可以比C ++ 更快地生成代碼。 原因是運行時經驗優化。

例如,它可以看到某個循環在99%的時間內采用“假”分支並相應地重新排序機器代碼指令。

有很多關於此的文章。 如果您想了解所有細節,請閱讀Sun優秀的白皮書 如需更多非正式信息,請試試這個

我對Hotspot JIT和配置文件引導優化優化的C ++之間的比較感興趣。

我在Hotspot JIT(以及任何運行時配置文件優化的JIT編譯器)中看到的問題是必須保留統計信息並修改代碼。 雖然存在孤立的情況,但這會導致代碼運行速度更快,我懷疑在大多數情況下,配置文件優化的JIT編譯器運行速度要比優化良好的C或C ++代碼快。 (當然我可能是錯的。)

無論如何,通常你會受到更大項目的支配,使用與其相同的語言。或者你將受到同事知識庫的支配。 或者你將受到你所針對的平台的支配(是你目標的架構上可用的JVM嗎?)。 在極少數情況下,您擁有完全的自由並且熟悉這兩種語言,請與您可以使用的工具進行一些比較。 這確實是確定什么是最好的唯一方法。

唯一可能的答案是:制作原型並自己測量。 如果我的經驗有任何興趣,那么Java和C#總是比C ++慢得多,因為我正在做的工作 - 我相信主要是因為內存消耗很高。 當然,你可以得出一個完全不同的結論。

可能是C ++,雖然我相信除了緩慢的啟動時間之外你幾乎不會注意到它的差異。 然而,Java使開發更快,維護更容易。

這並不是嚴格意義上的C ++與Java性能,但在這方面仍然很有趣: 一篇關於在垃圾收集環境中運行的程序性能的論文

如果需要考慮過多的垃圾收集,則可以始終重用未使用的高流失對象。

創建一個工廠,將SoftReferences隊列保存到回收對象,在創建新對象之前使用這些對象。 然后在使用這些對象的代碼中,將這些對象顯式返回工廠進行回收。

在宏觀方案中,你可能會爭論5%的性能差異,你可以通過遷移到CUDA或專用硬件來獲得幾個數量級的增長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM