神经网络的 C++/Java 性能?
-
09-06-2019 - |
题
前几天,我在午餐时与一位朋友讨论神经网络 (NN),他声称用 Java 编写的 NN 的性能与用 C++ 编写的神经网络类似。我知道通过“及时”编译器技术,Java 可以做得很好,但不知怎的,我就是不相信它。有没有人有任何经验可以阐明这个问题? 这一页 是我对这个主题的阅读程度。
其他提示
我对 Hotspot JIT 和配置文件引导优化 C++ 之间的比较感兴趣。
我发现 Hotspot JIT(以及任何运行时配置文件优化的 JIT 编译器)的问题是必须保留统计信息并修改代码。虽然在个别情况下这会导致代码运行速度更快,但我怀疑在大多数情况下,配置文件优化的 JIT 编译器是否会比优化良好的 C 或 C++ 代码运行得更快。(当然我可能是错的。)
不管怎样,通常你会受到更大项目的支配,使用与它编写的语言相同的语言。否则您将受到同事知识库的支配。否则,您将受到目标平台的支配(您目标的架构上是否有 JVM?)。在极少数情况下,您有完全的自由并且熟悉两种语言,请与您可以使用的工具进行一些比较。这确实是确定最好的唯一方法。
唯一可能的答案是:自己制作一个原型并进行测量。如果我的经验对您感兴趣的话,那么对于我所做的工作来说,Java 和 C# 总是比 C++ 慢得多 - 我相信主要是因为内存消耗很高。当然,你也可以得出完全不同的结论。
这并不是严格意义上的 C++ 与 Java 性能对比,但在这方面仍然很有趣:A 纸 关于在垃圾收集环境中运行的程序的性能。
如果担心过多的垃圾收集,您始终可以重用未使用的高流失对象。
创建一个工厂,保存对回收对象的软引用队列,在创建新对象之前使用它们。然后在使用这些对象的代码中,显式地将这些对象返回给工厂进行回收。
可能是 C++,尽管我相信除了启动时间慢之外你几乎不会注意到其中的区别。然而,Java 使开发更快、维护更容易。
从总体上看,您可能会争论 5% 的性能差异,而通过迁移到 CUDA 或专用硬件,您会获得几个数量级的提高。