e
I'm working with my advisor,
Lori
Pollock, on developing general purpose parallel programming for
workstation clusters.
My work is based on the idea that most people now work in offices with dozens of machines connected by a communications network. At any given moment, the vast majority of those machines are simply idle: either not being used at all, or sitting in idle loops waiting for keypresses or disk blocks.
But relatively infrequently, users do things that require a singificant amount of computation: things like reformatting a large document, or compiling and optimizing a program, or performing a complex operation on a database. These tasks can take a very long time on a single PC or workstation. (packages like Word can take over an hour to do a final reformatting of a 150 page document!)
What I want to do is allow general purpose programmings to write applications that can take advantage of the computational power represented by all of the idle processors in a cluster, by treating them as a coarse grained parallel processor.
The linguistic and runtime support for doing this is quite different from what is present in the vast majority of parallel programming tools. Most parallel languages are geared towards scientific comptutation, which uses very regular, static data structures like arrays. General purpose programming differs from scientific programming in that programs are largely centered around manipulating complex, dynamic data structures.
Meantime, distributed programming tools exist for workstation clusters, and they provide exactly the kind of runtime support that is necessary for a general purpose parallel programming tool for clusters - but they lack linguistic support for parallelism.
So, To allow general purpose programs to make use of parallelism, we need to forge a link between the linguistic support for parallelism that is provided by models like data-parallelism, and the kind of runtime and data structure support that is provided by a good distributed programming tool. We can do this by building new language constructs that allow programmers to create parallel forms of general purpose data structures, which can be effectively compiled for execution on a coarse grain parallel machine like a cluster through a distributed programming tool..
I've designed a construct called a composite tree,which can be added to just about any object oriented programming language. Composite trees give you the ability to write data parallel programs on a very coarse grain, using tree based data structures.
We've got some papers that give you the full details on our work, in postscript or HTML. Some of what you'll find is current, but some is rather out of date.
carroll@cis.udel.edu