简体   繁体   中英

C++/Java Performance for Neural Networks?

I was discussing neural networks (NN) with a friend over lunch the other day and he claimed the the performance of a NN written in Java would be similar to one written in C++. I know that with 'just in time' compiler techniques Java can do very well, but somehow I just don't buy it. Does anyone have any experience that would shed light on this issue? This page is the extent of my reading on the subject.

The Hotspot JIT can now produce code faster than C++. The reason is run-time empirical optimization.

For example, it can see that a certain loop takes the "false" branch 99% of the time and reorder the machine code instructions accordingly.

There's lots of articles about this. If you want all the details, read Sun's excellent whitepaper . For more informal info, try this one .

I'd be interested in a comparison between Hotspot JIT and profile-guided optimization optimized C++.

The problem I see with the Hotspot JIT (and any runtime-profile-optimized JIT compiler) is that statistics must be kept and code modified. While there are isolated cases this will result in faster-running code, I doubt that profile-optimized JIT compilers will run faster than well optimized C or C++ code in most circumstances. (Of course I could be wrong.)

Anyway, usually you're going to be at the mercy of the larger project, using the same language it is written in. Or you'll be at the mercy of the knowledge base of your co-workers. Or you'll be at the mercy of the platform you are targetting (is a JVM available on the architecture you're targetting?). In the rare case you have complete freedom and you're familiar with both languages, do some comparisons with the tools you have at your disposal. That is really the only way to determine what's best.

The only possible answer is: make a prototype and measure for yourself. If my experience is of any interest, Java and C# were always much slower than C++ for the kind of work I was doing - I believe mostly because of the high memory consumption. Of course, you can come to a completely different conclusion.

Probably C++, although I believe you'll hardly notice the difference besides a slow startup time. Java however makes development faster and maintenance easier.

这并不是严格意义上的C ++与Java性能,但在这方面仍然很有趣: 一篇关于在垃圾收集环境中运行的程序性能的论文

If excessive garbage collection is a concern, you can always reuse unused high-churn objects.

Create a factory that keeps a queue of SoftReferences to recycled objects, using those before creating new objects. Then in code that uses these objects, explicitly return these objects to the factory for recycling.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM