前几天,我在午餐时与一位朋友讨论神经网络 (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 性能对比,但在这方面仍然很有趣:A 关于在垃圾收集环境中运行的程序的性能。

如果担心过多的垃圾收集,您始终可以重用未使用的高流失对象。

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

可能是 C++,尽管我相信除了启动时间慢之外你几乎不会注意到其中的区别。然而,Java 使开发更快、维护更容易。

从总体上看,您可能会争论 5% 的性能差异,而通过迁移到 CUDA 或专用硬件,您会获得几个数量级的提高。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top