神经网络的C ++ / Java性能?

时间:2008-09-15 16:46:04

标签: java c++ performance neural-network

前几天我和一位朋友在午餐时讨论神​​经网络(NN),他声称用Java编写的NN的性能类似于用C ++编写的。我知道,通过'及时'编译技术,Java可以做得很好,但不知怎的,我只是不买它。有没有人有经验可以解释这个问题? This page是我对这个主题的阅读程度。

7 个答案:

答案 0 :(得分:10)

Hotspot JIT现在可以比C ++更快地生成代码。原因是运行时经验优化。

例如,它可以看到某个循环在99%的时间内占用“假”分支并相应地重新排序机器代码指令。

有很多关于此的文章。如果您需要所有详细信息,请阅读Sun's excellent whitepaper。有关更多非正式信息,try this one

答案 1 :(得分:2)

我对Hotspot JIT和配置文件引导优化优化C ++之间的比较感兴趣。

我在Hotspot JIT(以及任何运行时配置文件优化的JIT编译器)中看到的问题是必须保留统计信息并修改代码。虽然存在孤立的情况,但这会导致代码运行速度更快,我怀疑在大多数情况下,配置文件优化的JIT编译器运行速度要比优化良好的C或C ++代码快。 (当然我可能是错的。)

无论如何,通常你会受到更大项目的支配,使用与其相同的语言。或者你将受到同事知识库的支配。或者你将受到你所针对的平台的支配(是你目标的架构上可用的JVM吗?)。在极少数情况下,您拥有完全的自由并且熟悉这两种语言,请与您可以使用的工具进行一些比较。这确实是决定什么是最好的唯一方法。

答案 2 :(得分:2)

唯一可能的答案是:制作原型并自行测量。如果我的经验有任何兴趣,那么Java和C#总是比C ++慢得多,因为我正在做的工作 - 我相信主要是因为内存消耗很高。当然,你可以得出一个完全不同的结论。

答案 3 :(得分:0)

这不是严格意义上的C ++与Java性能,但在这方面仍然很有意思:A paper关于在垃圾收集环境中运行的程序的性能。

答案 4 :(得分:0)

如果需要考虑过多的垃圾收集,您可以随时重复使用未使用的高流失对象。

创建一个工厂,将SoftReferences队列保存到回收对象,在创建新对象之前使用这些对象。然后在使用这些对象的代码中,显式地将这些对象返回工厂进行回收。

答案 5 :(得分:0)

可能是C ++,虽然我相信除了缓慢的启动时间之外你几乎不会注意到这种差异。然而,Java使开发更快,维护更容易。

答案 6 :(得分:-1)

在宏观方案中,你可能会争论5%的性能差异,你可以通过迁移到CUDA或专用硬件来获得几个数量级的增加。