Platforms

Your goal may be to write a particular software package to be as portable as possible, or you may know that the software will only ever run on a particular target platform, perhaps because it requires specific functionality which is available only on that platform.  In either case, Elepar's tools can help.  Here are some of the issues that must be addressed for different platforms.

GRID

A grid is a relatively persistent, geographically distributed collection of heterogeneous, high-performance computers (which may themselves be parallel).  As well as providing high availability for high performance applications, a grid can be used to effectively exploit, share, and integrate distributed resources of many different kinds, including data repositories and archives, skilled personnel, instruments, and specialized peripherals.  Grids bring the same challenges as any heterogeneous platform, plus others related to crossing administrative and security domains, and finding the resources needed for a particular task.  In some cases, resource providers may charge for the use of those resources, requiring both a means for users to find inexpensive resources, and for users and providers to establish a reliable mechanism for reimbursement.

Peer-to-peer

Peer-to-peer generally describes smaller compute or peripheral devices interacting with one another, often circumventing the need for an intermediate server.  The peer relationships are usually on-demand, more fleeting  than in persistent grid-like systems, and will often exist primarily to exchange or transfer information, but can also be used to help speed up large compute tasks.

Parallel/Clusters

Parallel and cluster environments are collections of relatively tightly coupled computers which have one primary goal:  High speed computing.  To achieve this, high-bandwidth, low-latency networks are often (but not always) employed to keep each processor adequately fed, and special programming techniques are used to further hide latency and optimize memory bandwidth.  These collections are often treated as a unit, as far as purchase and replacement goes, and as a partitionable collection as far as usage goes.

Distributed

Distributed systems can range from grids of geographically distributed high-performance computers to machines sitting on individual desks around the office.  They may be persistent, or may be treated as integrated systems for only hours at a time (e.g. at night when not otherwised being used for other tasks).  The goal may be to access data or other resources at/near their source, or to harness idle compute resources.  Programming issues include dealing adequately with the high communication latencies, achieving security to keep out unwanted access while facilitating authorized access, and dealing with potential interruptions resulting from equipment failure and/or withdrawal of resources by their individual owners or managers.

Uniprocessors

When considering portability, it is important to consider that there may be times when only traditional uniprocessor platforms are available.   In such cases, it is desireable for the same program which runs efficiently in a concurrent parallel or distributed environment also effectively utilize the compute and memory resources in a localized uniprocessor platform such as a workstation or PC.  If, in addition, the tools used to create the program are useful even in a uniprocessor environment (such as Elepar's SC tools), then true portability across the spectrum of platform results from any programming task.