The Computer Language
24.04 Benchmarks Game

spectral-norm Chapel program

source code

/* The Computer Language Benchmarks Game
   https://salsa.debian.org/benchmarksgame-team/benchmarksgame/

   contributed by Lydia Duncan, Albert Sidelnik, and Brad Chamberlain
   derived from the GNU C version by Sebastien Loisel and the C# version
   by Isaac Gouy
*/

config const n = 500;           // the size of A (n x n), u and v (n-vectors)

proc main() {
  var tmp, u, v: [0..#n] real;

  u = 1.0;

  for 1..10 {
    multiplyAtAv(u, tmp, v);    // v = A^T*A*u
    multiplyAtAv(v, tmp, u);    // u = A^T*A*v
  }

  writef("%.9dr\n", sqrt(+ reduce (u*v) / + reduce (v*v)));
}

//
// Compute A-transpose * A * v ('AtAv').
//
proc multiplyAtAv(v, ref tmp, ref AtAv) {
  multiplyAv(v, tmp);
  multiplyAtv(tmp, AtAv);
}

//
// Compute A * v ('Av').
//
proc multiplyAv(v: [?Dv], ref Av: [?DAv]) {
  forall i in DAv do
    Av[i] = + reduce (for j in Dv do A[i,j] * v[j]);
}

//
// Compute A-tranpose * v ('Atv').
//
proc multiplyAtv(v: [?Dv], ref Atv: [?DAtv]) {
  forall i in DAtv do
    Atv[i] = + reduce (for j in Dv do A[j,i] * v[j]);
}

//
// Compute element i,j of the conceptually infinite matrix A.
//
inline proc A(i, j) {
  return 1.0 / ((((i+j) * (i+j+1)) / 2) + i + 1);
}
    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
chpl version 2.0.0
built with LLVM version 17.0.2
Copyright 2020-2024
Hewlett Packard
Enterprise Development LP
Copyright 2004-2019 Cray Inc.


 Sat, 30 Mar 2024 17:04:34 GMT

MAKE:
mv spectralnorm.chapel spectralnorm.chpl
/opt/src/chapel-2.0.0/bin/linux64-x86_64/chpl --fast spectralnorm.chpl -o spectralnorm.chapel_run
rm spectralnorm.chpl

19.31s to complete and log all make actions

COMMAND LINE:
 ./spectralnorm.chapel_run --n=5500

PROGRAM OUTPUT:
1.274224153