Easily readable syntax. A coNCePTuaL program is essentially executable
pseudocode.
Simple, SPMD
semantics. Control flow is straightforward and many complex
conditional expressions needed in other languages can be avoided in
coNCePTuaL.
Domain-specific features. Many idioms needed for
writing network performance tests appear as language primitives:
synchronous and asynchronous sends and receives
collective communication (barriers, multicasts, reductions)
statistics gathering and data logging
command-line parsing
precise control over buffer alignment and buffer reuse
data touching to force message data into the cache
data verification of all message bits—much
stronger than a
CRC
computation for a given length of time
memory thrashing for any level of the memory hierarchy
neighbor calculations for various process topologies
timed loops
Many-to-many communication. A
single coNCePTuaL statement can specify a
large set of communication operations.
Elimination of mundane operations. There's no
need to explicitly manage memory, handle communication boundary cases
(communication with a nonexistent peer is automatically ignored),
compute statistics on measurement data, post matching receive
operations, or do many of the other tedious operations required by a
general-purpose language.
Portability across messaging layers. coNCePTuaL is not tied to MPI or any other messaging
layer. Depending upon the compiler flags specified, a coNCePTuaL program can target any of a number of
communication libraries.
Cross-language hooks. If necessary,
a coNCePTuaL program can embed
non-coNCePTuaL code (e.g., C code),
for example to access a specialized configuration option for a
particular communication library.
Implementation overview
Easy to use. Users can either write coNCePTuaL code directly or run coNCePTuaL's graphical user
interface, which lets one draw communication patterns
with a mouse. The two approaches can even be mixed as the coNCePTuaL GUI can both load and save coNCePTuaL programs directly.
Portable. coNCePTuaL
has been run on workstation clusters and supercomputers of up to
147,456 processor cores. It has been tested on a wide variety of Unix
and Unix-like platforms and builds with a wide variety of C
compilers.
General. The compiler comes with multiple
backends (think: code generators, although some of them don't generate
code), and new backends are relatively straightforward to create.
Merely by selecting an appropriate backend, the
same coNCePTuaL program can be compiled to
C plus MPI calls or C
plus Unix-domain datagram sockets. Profiling and/or tracing output
can be layered atop the basic, generated code. The source code can be
interpreted, simulating any number of processors. The most exciting
of the supplied backends automatically
generates a space-time diagram
of a coNCePTuaL program—directly
from a program's source code!
Thorough. When a program writes data to a log
file, coNCePTuaL additionally records a large quantity of system
information. The goal is to store enough information so that
anyone can reproduce a performance test.
Well documented. The coNCePTuaL
User's Guide provides a thorough description of how to
build and use coNCePTuaL.