The Chapel Programming Language

Productive parallel computing at every scale.
writeln("Hello, world!");

// create a parallel task per processor core
coforall tid in 0..<here.maxTaskPar do
  writeln("Hello from task ", tid);

// print these 1,000 messages in parallel using all cores
forall i in 1..1000 do
  writeln("Hello from iteration ", i);
// print a message per compute node
coforall loc in Locales do
  on loc do
    writeln("Hello from locale ", loc.id);

// print a message per core per compute node
coforall loc in Locales do
  on loc do
    coforall tid in 0..<here.maxTaskPar do
      writeln("Hello from task ", tid, " on locale ", loc.id);

// print 1,000 messages in parallel using all nodes and cores
use BlockDist;
const Inds = blockDist.createDomain(1..1000);
forall i in Inds do
  writeln("Hello from iteration ", i, " running on locale ", here.id);
use IO;

// read in a file containing 'city name;temperature' lines (1BRC-style)
const stats = [line in stdin.lines()] new cityTemperature(line);
writeln(stats);

record cityTemperature {
  const city: string;  // city name
  const temp: real;    // temperature

  proc init(str: string) {
    const words = str.split(";");
    this.city = words[0];
    this.temp = words[1]: real;
  }
}
// set different values at runtime with command line arguments
// e.g. --n=2048 --numSteps=256 --alpha=0.8
config const n = 1000,
             numSteps = 100,
             alpha = 1.0;

const fullDomain = {1..n},
      interior   = {2..n-1};

var u: [fullDomain] real = 1.0; 
u[n/4..3*n/4] = 2.0;  // make the middle a bit hotter

var un = u;

for 1..numSteps {
  forall i in interior do  // shared-memory parallelism
    u[i] = un[i] + alpha * (un[i-1] - 2*un[i] + un[i+1]);  
  un <=> u;  // swap the two arrays
}

writeln(un);
use Random, Math;

const nGpus = here.gpus.size,
      n     = Locales.size*nGpus;

var A: [1..n, 1..n] real;

fillRandom(A);

// use all nodes
coforall (loc, localRowStart) in zip(Locales, 1.. by nGpus) do on loc { 
  // and all GPUs within each
  coforall (gpu, row) in zip(here.gpus, localRowStart..) do on gpu {    
    var B: [1..n] real = A[row, ..];    // copy a row from device to host
    B = asin(B);                        // compute (kernel launch)
    A[row, ..] = B;                     // copy the row back
  }
}

writeln(A);

Users Love It

The use of Chapel worked as intended: the code maintenance is very much reduced, and its readability is astonishing. This enables undergraduate students to contribute to its development, something almost impossible to think of when using very complex software.

- Éric Laurendeau, Professor, Polytechnique Montréal

A lot of the nitty gritty is hidden from you until you need to know it. ... It feels like the complexity grows as you get more comfortable -- rather than being hit with everything at once.

- Tess Hayes, Developer, Bytoa

Chapel in Production

What’s New?

ChapelCon '25 Talks Available!

on November 10, 2025

ChapelCon '25 talk slides, code, and video are now available from the program page.

Click for More

Chapel at SC25

on November 10, 2025

Attending SC25? Catch the Chapel talks at PAW-ATM or stop by the HPE booth to chat with Chapel developers

Click for More

Chapel Featured on 'Technology Now' Podcast

on October 30, 2025

This week's 'Technology Now' podcast features a conversation about Chapel with Brad Chamberlain.

Click for More

10 Myths About Scalable Parallel Programming Languages (Redux), Part 7: Minimalist Language Designs

By Brad Chamberlain on October 15, 2025

The seventh archival post from the 2012 IEEE TCSC blog series with a current reflection on it

Click for More

Announcing Chapel 2.6!

By David Longnecker, Jade Abraham, Lydia Duncan, Daniel Fedorin, Ben Harshbarger, Brad Chamberlain on September 18, 2025

Highlights from the September 2025 release of Chapel 2.6

Click for More

7 Questions for Marjan Asgari: Optimizing Hydrological Models with Chapel

By Engin Kayraklioglu, Brad Chamberlain on September 15, 2025

An interview with Dr. Marjan Asgari about her use of Chapel for hydrological research

Click for More