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

时间:2020-03-05 18:53:56  来源:igfitidea点击:

前几天我正与朋友讨论神经网络(NN),他声称用Java编写的NN的性能将类似于用C ++编写的。我知道使用"及时"编译器技术,Java可以做得很好,但是我不知何故不买它。有没有人有任何经验可以阐明这个问题?这页是我阅读该主题的程度。

解决方案

回答

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

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

关于这方面有很多文章。如果需要所有详细信息,请阅读Sun的优秀白皮书。有关更多非正式信息,请尝试此。

回答

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

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

无论如何,通常我们将使用较大的项目,使用与该语言相同的语言来摆布。或者,我们将受到同事的知识库的摆布。否则,我们将受到目标平台的摆布(目标平台上是否提供JVM?)。在极少数情况下,我们拥有完全的自由,并且我们熟悉这两种语言,请与我们可以使用的工具进行一些比较。这实际上是确定最佳方法的唯一方法。

回答

这并不是严格地关于C ++与Java的性能,但是在这方面还是很有趣的:关于在垃圾收集环境中运行的程序的性能的论文。

回答

唯一可能的答案是:制作原型并自己测量。如果对我的经验感兴趣,我认为Java和Cwe总是比C ++慢很多,我认为这主要是因为内存消耗很高。当然,我们可以得出完全不同的结论。

回答

如果要考虑过多的垃圾收集,则始终可以重用未使用的高流失对象。

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

回答

在宏伟的方案中,我们可能会争论5%的性能差异,通过使用CUDA或者专用硬件,我们将获得几个数量级的增长。