Although Java is quite a restrictive language, our experiments suggest that it should be possible develop a useful class library interface for data parallel programming, without necessarily extending the basic language.
Java's strict typing regime (the absence, for example, of castable pointers) makes it difficult to write interfaces to communication libraries that efficiently accept data of multiple types (polymorphism). The I/O and socket communication classes in the standard API resort to expensive format conversions whenever an object has to be transfered. Benchmarking the example presented earlier indicates that while parallelism gives genuine performance gains there is an obvious communication penalty even with large problem sizes. For example, the following timings were obtained on a grid size of 512 by 512
number of time per
processors iteration/ms
1 1502
2 1011
4 784
The volume of data that has to be communicated in an iteration is on
the order of 1% of the total data set, but speedup is still a long way
from ideal. Further benchmark results are available on the demo Web
page.
We hope that the efficiency problems can be overcome by taking
a different approach to implementing the interface. Instead of
implementing the library within Java on top of the standard API we will
call the existing PCRC run-time library through a native methods
interface. In any case this approach will be easier than
recoding collective communication operations, some much more complicated
the shift, within Java.