NERSCPowering Scientific Discovery Since 1974

Chapel

Introduction

Chapel is an emerging parallel programming language being developed by Cray Inc. with the goal of improving programmer productivity.  Chapel's implementation is a work-in-progress and one that Cray is undertaking in a collaborative, open-source manner at SourceForge under the BSD license.  Cray Inc.  encourages feedback from potential users in order to help improve Chapel's utility, generality, and adoptability, and are are also interested in seeking out mutually beneficial collaborations with external research groups.

Quick start


1) Load the Chapel module:

% module load chapel


2) Compile an example program using:

% chpl -o hello6-taskpar-dist $CHPL_HOME/examples/hello6-taskpar-dist.chpl


3) Execute the resulting executable (on four locales):

% ./hello6-taskpar-dist -nl 4

This will submit a batch script reqeusting 4 nodes and using all logical cores available per node (48). Please note the Chapel code should run out of a Lustre file system, eg., in your scratch directory ($SCRATCH) on Edison. Executing this program from a non-Lustre file system may cause it to be unlaunchable, or for file I/O to be performed on a non-local file system.

Note:

    • Directly invoking Chapel executabes as shown above does not currently work on Edison, due to a bug in the batch system.  Please submit Chapel jobs directly to the batch system (as shown below) until this bug is fixed.
    • Please note it is necessary to load the chapel module to get the proper environment variables set at runtime.

An alternative way to run Chapel applications is to submit a batch script directly to the batch system, as is done with traditional MPI applications.  This method also gives you  more control over how you run the code.

#PBS -N test_chapel
#PBS -q debug
#PBS -l walltime=15:00
#PBS -l mppwidth=96
#PBS -j oe

cd $PBS_O_WORKDIR

module load chapel

# Run without using Hyper-Threading
aprun -n4 -N1 -d24 -cc none hello6-taskpar-dist_real -nl 4