Archives


- Beowulf
- Beowulf Announce
- Scyld-users
- Beowulf on Debian

[Beowulf] Java vs C++ for interfacing to parallel library

Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.

Search

Geoff Jacobs gdjacobs at gmail.com
Sun Aug 20 11:15:01 PDT 2006


Joe Landman wrote:
> 
> Geoff Jacobs wrote:
> 
>> *throws on his scalliwag hat*
>> And also many inappropriate languages, such as Intercal, APL, BrainF***,
>> or even Perl when you're on a caffeine buzz.
>> *removes hat*
> 
> Hey ... I like that +/vector is a sum reduction over a variable named
> vector, and it can do it on the outermost index.
> 
> Don't knock APL, it was designed for calculation.  That it was also as
> arcane in its syntax as possible, as well as being insanely terse in its
> implementation.  Still, any language that allows you to model a physical
> system in 4 lines of code and gives you meaningful answers cannot be all
> bad.
> 
> I ... just ... dont ... want ... to  ... use ... it  ...... again.  Ever.
> 
> As for Perl, I have written several HPC apps in it.  You use Perl as the
> wrapper/glue for the parts written in C/others.  Use it to interface to
> the OS, and do all the things you shouldn't be doing in C/others anyway.
>  Works really well.  About 6 years ago we were demonstrating something
> like 80x on 84 CPUs, and around 200x on 256 CPUs with it.  Don't knock
> the language, it is incredibly powerful.  I just would not use it for
> time sensitive calculations, just as I would not use Java, Python, or
> Ruby for such things.  But for stitching together applications?  Its
> hard to beat.  Python is pretty good at this too, and NumPy and other
> tools make this simple.  I see lots of Perl bashing from people who
> raise what they perceive to to be its negatives, though their points
> could be made about any language for the most part, and their
> specificity to Perl is incorrect at best.  Just shows the commenter's
> biases.

Biased? Perhaps.

I think the compressed syntax as well as the broad semantics, which are
a benefit to the implementer, really hamper ongoing maintenance of
software written in Perl.

>> I don't see what the question is. We don't know the requirements for the
>> software to be written, so it's sorta hard to evaluate against them. If
> 
> We know something of the task.  As it is in implementat decision phase,
> it would be good to understand the code issues, design, goals, ...
> 
>> the library is handling most of the computation, I can't see how using a
>> VM language will really be of concern.
> 
> Performance, or specifically, lack of it.  Microbenchmarks of the
> language not-withstanding, OO languages tend to have an abstraction
> penalty (C++) compared to non-OO.  The abstraction makes programming
> easier, and it makes getting performance harder.  Then there are the
> preferred implementation decisions such as object factories and
> inheritance which pretty much prevent you from insuring that you have
> well aligned data structures, which SSE requires for good performance,
> or simple function pointer to function mapping.  If you call a function
> many times, and you have to walk a pointer tree over your set of objects
> that you are iterating over for each calculation, this makes these
> function calls expensive.  You have to start using tricks to effectively
> unwind the inheritance trees, see if you have overloaded the functions,
> before you can finally dispatch them.  Optimizing these pointer trees,
> which usually only exist at run time, is a nightmare if you have to deal
> with multiple inheritance and overloading.

Even on microbenchmarks, Java bytecode tends to see a significant
performance hit compared to native languages (although not always). And,
as you point out, C++ has it's own performance considerations.

If the overwhelming majority of CPU cycles are spent in native C
subroutines, the performance hit of using Java or C++ will be greatly
mitigated. Implementing a numerical kernel in C would be fairly easy if
there is significant computation to be done outside of PETSc.

>> If you have access to a trained Java programmer who's a whiz with JNI,
>> go for it. If the people you can lay your hands on use C++, use that.
> 
> I would suggest waiting until you have a good strong idea of what
> algorithms the code is going to use, how it will be implemented.  If you
> can use libraries that do all the heavy lifting and do it well, you can
> likely stitch your application together using stuff that already works
> well.  Then you might be able to use the OO language to build the app
> from there.

Absolutely.

-- 
Geoffrey D. Jacobs

Go to the Chinese Restaurant,
Order the Special



More information about the Beowulf mailing list