Prefix sums

Mesham is a type oriented programming language allowing the writing of high performance parallel codes which are efficient yet simple to write and maintain

Overview
Prefix sums is a very simple, basic parallel algorithm commonly used as the building block of many applications. Also known as a scan, each process will sumate their value with every preceding processes' value. For instance, p=0 returns its value, p=1 returns p=1 + p=0 values, p=2 returns p=2 + p=1 + p=0 values. The MPI reduce command often implements the communication via the logarithmic structure shown below.

Source Code
var processes:=10; function void main(var argc:Int,var argv:array[String]) { var a:Int :: allocated[multiple[]]; var p;   par p from 0 to processes - 1 { var mine:Int;	// Force to be an integer as randomnumber function defaults to double mine:= randomnumber(0,toint(argv[1])); var i;      for i from 0 to processes - 1 { var myvalue:=mine; if (i < p) myvalue:=0; (a :: reduce[i, "sum"]):=myvalue; };		      print(itostring(p)+" "+itostring(mine)+" = "+itostring(a)+"\n"); }; };
 * 1) include
 * 2) include 
 * 3) include

This code requires at least Mesham version 1.0

Download
Download the entire prefix sums source code here you can also download a legacy version for Mesham 0.5 here