The ensamble allows parallel programs written using ASSISTcl to be seamlessly run on top of workstation networks supporting POSIX and ACE (the Adaptive Communication Environment, which is an extern, open source library used within the ASSISTcl run time support).
The programming environment and the coordination language have been
designed in a joint project ASI/CNR (Italian National Space Agency and
Italian National Research Council), by people of the Dept. of
Computer Sience of Pisa. Recently, this program terminated and the
development of ASSIST has been moved to other italian national
research projects (Strategic projects "Legge 289" and a FIRB project).
Using ASSISTcl the programmer may structure parallel application as generic graphs of either sequential processes or parallel modules. Nodes in the graphs (i.e. the processes or the parallel modules) are connected by means of data streams. Non deterministic control is provided to accept inputs from different streams and explicit commands are provided to output items on the output streams. Sequential portions of code can be written using C, C++ or FORTRAN77.
An ASSISTcl program follows a syntax which is in part borrowed from C and Pascal. The program has different sections: the first section describes the process/parallel activity graph, the second is used to hold the code describing each process/parallel activity. A parmod (the parallel module skeleton) is used to model most of the parallel activities appering in ASSISTcl program. A parmod can be specialized to behave as the most common parallelism exploitation pattern/skeleton/design patterns. Therefore parmods can be used to express farms, pipelines as well as geometric and data parallel computation patterns.
The parmod skeleton allows to define a set of Virtual Processors, to
assign them tasks (to all of them or one task per Virtual processor or
one task per partition of Virtual processors), to handle concurrent
accesses to state variables, to manage zero or more input stream and
zero or more output streams, and to interact with extern world
accessing (possibily shared) objects via standard object access
methods (e.g. CORBA).
Skeleton and coordination technology are exploited in the ASSIST environment in such a way the programmer is not required to handle most of the error prone details he is usually concerned with (process and communication setup, scheduling, mapping, etc.). The skeletons included in ASSISTcl are far more powerful that the traditional ones. The programmer can therefore implement parallel applications with complex parallelism exploitation patterns.
Sequential portions of code embedded in ASSISTcl programs can be written in C, C++ and FORTRAN, thus enhancing the possiblity to reuse existing code.
The programmer can experiment different parallelisation strategies just changing a few lines of code and recompiling.
INTEROPERABILITY: ASSISTcl programs can access external objects via CORBA. A whole ASSISTcl program can be automatically exported (i.e. standard IDL can be automatically generated and proper skeleton code is generated) as a CORBA object to the external world. Furthemore, facilities are present in the language that allow to use external libraries from within the sequential portions of code in the ASSISTcl programs.
ASSIST has been currently implemented on POSIX/ACE Linux workstation networks. We are currently completing the compiler part needed to target heterogeneous architectures. The POSIX calls used and ACE are available on most modern operating system including different Windows flavours, MacOS X, Linux, BSD, etc.
ASSISTcl benchmarks demonstrated good (close to ideal) scalability and efficiency on Linux clusters. Efficiency close to 99% has been achieved using medium to coarse grain parallel code.