Thursday, January 27, 2011

JavaSeis Native Methods

We strive to provide JavaSeis as a "100%" Java project. In many industry settings, especially in the case where a company has a large base of well tested procedural code, the need for native methods arises. Before heading down this route, you should think carefully about the side effects. A pure Java project is portable, robust, and will almost never crash. This will immediately change once you head down the native method route. One of my favorite things about Java and Eclipse is saying goodbye to that old "edit, compile, link, run" cycle.

That being said, we finally bow to pressure from the crowd that likes pre-mature optimization and provide an Eclipse "javaseis_native" project in our SVN repository on SourceForge. The first application we are developing is an implementation of the JavaSeis IBigArray interface. This interface is used to provide a 1D array that is indexed by a long. IBigArray is the base storage that underlies JavaSeis distributed arrays. Once this implementation is up and running, it will be possible to construct JavaSeis distributed arrays that use native memory as the storage mechanism, and to share these large contiguous arrays with native codes.

Checkout the project on SourceForge now if you want to track the progress of how the interface is developed. If all you want is the finished product, stay tuned to the JavaSeis Blog and we will post comments on the finished result.

-Chuck

Sunday, January 23, 2011

Welcome to the JavaSeis Blog !

JavaSeis is aJava based framework for parallel I/O and computation for signal and image processing of seismic data. The project is a public domain effort hosted on SourceForge. The project has been in existance for over 5 years, but up to now usage has been limited to users who develop within the Halliburton SeisSpace seismic data processing package. JavaSeis development is based on Eclipse, but is not currently tied to any Eclipse specific sub-systems. 

Recently, I have begun work to provide improved documentation and file releases for users outside of the SeisSpace user base. At the same time, I am also undertaking a major refactoring effort. JavaSeis development has up to this point been driven mainly by the needs of seismic processing as represented by the SeisSpace seismic processing system from Halliburton / Landmark Graphics. As the SeisSpace product has gained more acceptance in the marketplace, we have been hearing more interest in using JavaSeis outside of SeisSpace. These requests have come from seismic software companies, research groups in oil companies, and university consortia that are supported by the oil industry.

As anyone who works in software knows, a good design often is eroded by usage. This has been the case for JavaSeis. Under the pressure of expediency, sub-optimal design choices creep into the system, and a clean design starts to get complicated. The refactoring effort is aimed at cleaning up the JavaSeis code base in preparation for future SeisSpace releases, but is also intended to enable usage of JavaSeis frameworks outside of SeisSpace. The areas that I think need work are:
  • Continue to support Eclipse based developement for JavaSeis
  • Add support for Thread parallel and mixed MPI / Thread parallel applications
  • Investigate OSGi / Equinox for a services model in JavaSeis
  • Provide a tool framework and execution environment for JavaSeis applications
  • Extract a clean interface for JavaSeis parallel I/O
  • Create a plugin architecture for interface implementations
I've got a start on a few of these, and hope to get most of these knocked off in the new year (2011). Let me know if you have something you think I should add to the list.

Stay tuned for more updates !

-Chuck