A. Installing Charm++

Charm++ can be installed either from the source code or using a precompiled binary package. Building from the source code provides more flexibility, since one can choose the options as desired. However, a precompiled binary may be slightly easier to get running.

A. 1 Downloading Charm++

Charm++ can be downloaded using one of the following methods:

If you download the source code from the website, you will have to unpack it using a tool capable of extracting gzip'd tar files, such as tar (on Unix) or WinZIP (under Windows). Charm++ will be extracted to a directory called ``charm''.

A. 2 Installation

A typical prototype command for building Charm++ from the source code is:

./build $<$ TARGET $>$ $<$ TARGET ARCHITECTURE $>$ [OPTIONS] where,

is the framework one wants to build such as charm++ or AMPI .
is the machine architecture one wants to build for such as netlrts-linux-x86_64 , pamilrts-bluegeneq etc.
are additional options to the build process, e.g. smp is used to build a shared memory version, -j8 is given to build in parallel etc.

In Table  A.1 , a list of build commands is provided for some of the commonly used systems. Note that, in general, options such as smp , --with-production , compiler specifiers etc can be used with all targets. It is advisable to build with --with-production to obtain the best performance. If one desires to perform trace collection (for Projections), --enable-tracing --enable-tracing-commthread should also be passed to the build command.

Details on all the available alternatives for each of the above mentioned parameters can be found by invoking ./build --help . One can also go through the build process in an interactive manner. Run ./build , and it will be followed by a few queries to select appropiate choices for the build one wants to perform.

Table A.1: Build command for some common cases
Net with 32 bit Linux ./build charm++ netlrts-linux --with-production -j8
Multicore (single node, shared memory) 64 bit Linux ./build charm++ multicore-linux-x86_64 --with-production -j8
Net with 64 bit Linux ./build charm++ netlrts-linux-x86_64 --with-production -j8
Net with 64 bit Linux (intel compilers) ./build charm++ netlrts-linux-x86_64 icc --with-production -j8
Net with 64 bit Linux (shared memory) ./build charm++ netlrts-linux-x86_64 smp --with-production -j8
Net with 64 bit Linux (checkpoint restart based fault tolerance) ./build charm++ netlrts-linux-x86_64 syncft --with-production -j8
MPI with 64 bit Linux ./build charm++ mpi-linux-x86_64 --with-production -j8
MPI with 64 bit Linux (shared memory) ./build charm++ mpi-linux-x86_64 smp --with-production -j8
MPI with 64 bit Linux (mpicxx wrappers) ./build charm++ mpi-linux-x86_64 mpicxx --with-production -j8
IBVERBS with 64 bit Linux ./build charm++ verbs-linux-x86_64 --with-production -j8
Net with 64 bit Windows ./build charm++ netlrts-win-x86_64 --with-production -j8
MPI with 64 bit Windows ./build charm++ mpi-win-x86_64 --with-production -j8
Net with 64 bit Mac ./build charm++ netlrts-darwin-x86_64 --with-production -j8
Blue Gene/Q ./build charm++ pami-bluegeneq xlc --with-production -j8
Blue Gene/Q ./build charm++ pamilrts-bluegeneq xlc --with-production -j8
Cray XE6 ./build charm++ gni-crayxe --with-production -j8
Cray XK7 ./build charm++ gni-crayxe-cuda --with-production -j8
Cray XC30 ./build charm++ gni-crayxc --with-production -j8

As mentioned earlier, one can also build Charm++ using the precompiled binary in a manner similar to what is used for installing any common software.

The main directories in a Charm++ installation are:

Executables, such as charmc and charmrun, used by Charm++ .

Documentation for Charm++ , such as this document. Distributed as LaTeX source code; HTML and PDF versions can be built or downloaded from our web site.

The Charm++ C++ and Fortran user include files (.h).

The libraries (.a) that comprise Charm++ .

Example Charm++ programs.

Source code for Charm++ itself.

Directory where Charm++ is built.

Test Charm++ programs used by autobuild.

A. 3 Security Issues

On most computers, Charm++ programs are simple binaries, and they pose no more security issues than any other program would. The only exception is the network version netlrts-* , which has the following issues.

The network versions utilize many unix processes communicating with each other via UDP. Only a simple attempt is currently made to filter out unauthorized packets. Therefore, it is theoretically possible to mount a security attack by sending UDP packets to an executing Converse or Charm++ program's sockets.

The second security issue associated with networked programs is associated with the fact that we, the Charm++ developers, need evidence that our tools are being used. (Such evidence is useful in convincing funding agencies to continue to support our work.) To this end, we have inserted code in the network charmrun program (described later) to notify us that our software is being used. This notification is a single UDP packet sent by charmrun to . This data is put to one use only: it is gathered into tables recording the internet domains in which our software is being used, the number of individuals at each internet domain, and the frequency with which it is used.

We recognize that some users may have objections to our notification code. Therefore, we have provided a second copy of the charmrun program with the notification code removed. If you look within the bin directory, you will find these programs:

     $ cd charm/bin
    $ ls charmrun*

The program charmrun.silent has the notification code removed. To permanently deactivate notification, you may use the version without the notification code:

     $ cd charm/bin
    $ cp charmrun.silent charmrun

The only versions of Charm++ that ever notify us are the network versions.

A. 4 Reducing disk usage

The charm directory contains a collection of example-programs and test-programs. These may be deleted with no other effects. You may also strip all the binaries in charm/bin .