Mixing C and Java™ for High Performance Computing.

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Performance computing software, especially high performance embedded computing (HPEC) software, is typically developed in C for processing as well as infrastructure functionality. Infrastructure includes communications, processor/core allocation, task management, job scheduling, fault detection, fault handling, and logging. C and optimized assembler language libraries are used to achieve the highest processing performance relative to limitations on size, weight, and power dissipation. There has been a trend to move away from dedicated logic and specialty programmable processors to commodity-based processors. As a result, it is now possible to examine more robust software options. Many of these functions, especially infrastructure functions, can be implemented quickly and safely utilizing Java™ frameworks but some doubt that the performance can be satisfactory. Java frameworks have extensive open source and vendor support, and Java’s platform independence reduces the need to redevelop functions as hardware and operating systems evolve. Tests show that the performance of Oracle® Java™ 7 Standard Edition (on Intel processors) can equal that of C for some problems if dynamic object creation is used judiciously and the application can afford a brief start-up and warm-up time. Java can invoke native libraries very quickly. With some of the available bridging technologies it can natively allocate data and even extend its garbage collection discipline to such data. Even though there is some additional Java overhead for invoking and utilizing graphics processing units, in tests it was able to utilize the graphical processing unit (GPU) at the same rate as native C code when the data was allocated natively. Java compute-grid frameworks offer features such as auto-discovery, auto-failover, inter-node data synchronization, automatic data serialization, multi-node work queuing, active load monitoring, adaptive load balancing, and, dynamic grid resizing that can save significant developer time if such features are needed. GridGain was easy to setup and use and has many options for work distribution and handling node failures. Akka and Storm, performed well relative to the high-performance community’s Message Passing Interface (MPI) even though such a comparison is unfair due to the significant differences between MPI framework features and the Java framework features. On a 10 gigabit Ethernet cluster, Akka and Storm achieved 10,000 asynchronous round-trip exchanges per second, which is more than adequate for many applications. Scala and Python also are investigated briefly to understand how they perform relative to each other and relative to Java. Scala is newer, more concise, and equal in performance to Java. Python is older, does not perform as well, but has extensive native library support and a concise syntax. Hybrid Java/C applications make sense and can be designed to perform well. This opens the door to intricate high performance applications in which developer productivity via Java can be traded against the ultimate compute speed attainable with C and native customized libraries.

Author(s): Nazario Irizarry, Jr.
Series: Mitre Technical Report (2013)
Year: 2019

Language: English
Pages: 136