/mobile Handheld Friendly website
Ubuntu : Intel® Q6600® quad-core |
Each table row shows performance measurements for this ATS program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 500 | 0.18 | 0.18 | ? | 1138 | 0% 0% 0% 94% |
| 3,000 | 6.16 | 6.16 | 348 | 1138 | 0% 1% 100% 0% |
| 5,500 | 20.68 | 20.69 | 608 | 1138 | 0% 0% 100% 0% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read spectral-norm benchmark to see what this program should do.
ATS/Anairiats version 0.2.8
(* ** The Computer Language Benchmarks Game ** http://benchmarksgame.alioth.debian.org/ ** ** contributed by Hongwei Xi ** ** compilation command: ** atscc -O3 -msse2 spectralnorm.dats -o spectralnorm -lm ** *) staload M = "libc/SATS/math.sats" %{^ static inline ats_ptr_type darray_make (ats_int_type n, ats_double_type f) { int i; ats_double_type *p0, *p ; p0 = malloc(n * sizeof(ats_double_type)) ; p = p0 ; for (i = 0; i < n; ++i) { *p = f; ++p; } return p0 ; } static inline ats_void_type darray_free (ats_ptr_type A) { free (A) ; return ; } static inline ats_double_type darray_get (ats_ptr_type A, ats_int_type i) { return ((ats_double_type *)A)[i] ; } static inline ats_void_type darray_set (ats_ptr_type A, ats_int_type i, ats_double_type f) { ((ats_double_type *)A)[i] = f ; return ; } static inline ats_double_type eval_A (ats_int_type i, ats_int_type j) { return 1.0/((i+j)*(i+j+1)/2+i+1); } %} absviewt@ype darray (n:int) // it is linear, so it cannot be leaked. extern fun darray_make {n:nat} (n: int n, d: double): [l:addr] (darray n @ l | ptr l) = "darray_make" extern fun darray_free {n:nat} {l:addr} (pf: darray n @ l | p: ptr l): void = "darray_free" extern fun darray_get {n:nat} (A: &darray n, i: natLt n): double = "darray_get" extern fun darray_set {n:nat} (A: &darray n, i: natLt n, d: double): void = "darray_set" overload [] with darray_get overload [] with darray_set // extern fun eval_A (i: int, j: int): double = "eval_A" fn eval_A_times_u {N:nat} (N: int N, u: &darray N, Au: &darray N): void = let fun loop2 {i,j:nat | i < N; j <= N} .<N-j>. (u: &darray N, Au: &darray N, i: int i, j: int j):<cloptr1> void = if j < N then begin Au[i] := Au[i] + eval_A(i, j) * u[j]; loop2 (u, Au, i, j+1) end fun loop1 {i:nat | i <= N} .<N-i>. (u: &darray N, Au: &darray N, i: int i):<cloptr1> void = if i < N then begin Au[i] := 0.0; loop2 (u, Au, i, 0); loop1 (u, Au, i+1) end in loop1 (u, Au, 0) end // fn eval_At_times_u {N:nat} (N: int N, u: &darray N, Au: &darray N): void = let fun loop2 {i,j:nat | i < N; j <= N} .<N-j>. (u: &darray N, Au: &darray N, i: int i, j: int j):<cloptr1> void = if j < N then begin Au[i] := Au[i] + eval_A(j, i) * u[j]; loop2 (u, Au, i, j+1) end fun loop1 {i:nat | i <= N} .<N-i>. (u: &darray N, Au: &darray N, i: int i):<cloptr1> void = if i < N then begin Au[i] := 0.0; loop2 (u, Au, i, 0); loop1 (u, Au, i+1) end in loop1 (u, Au, 0) end fn eval_AtA_times_u {N:nat} (N: int N, u: &darray N, AtAu: &darray N):<cloptr1> void = let val (pf | p_v) = darray_make (N, 0.0) in eval_A_times_u(N, u, !p_v); eval_At_times_u (N, !p_v, AtAu); darray_free (pf | p_v) end // #define TIMES 10 implement main (argc, argv) = let val () = assert_errmsg (argc = 2, "Exit: wrong command format!\n") val [N:int] N = int1_of_string argv.[1] val () = assert_errmsg ( N >= 0, "The input integer needs to be a natural number.\n" ) val (pf_u | p_u) = darray_make (N, 1.0) val (pf_v | p_v) = darray_make (N, 0.0) fun loop1 {i:nat | i <= TIMES} .<TIMES-i>. (u: &darray N, v: &darray N, i: int i):<cloptr1> void = if (i < TIMES) then begin eval_AtA_times_u(N, u, v); eval_AtA_times_u(N, v, u); loop1 (u, v, i+1) end val () = loop1 (!p_u, !p_v, 0) fun loop2 {i:nat| i <= N} .<N-i>. (u: &darray N, v: &darray N, vBv: double, vv: double, i: int i):<cloptr1> @(double, double) = if i < N then let val ui = u[i] and vi = v[i] in loop2 (u, v, vBv+ui*vi, vv+vi*vi, i+1) end else (vBv, vv) val (vBv, vv) = loop2 (!p_u, !p_v, 0.0, 0.0, 0) val () = (darray_free (pf_u | p_u); darray_free (pf_v | p_v)) in printf("%0.9f\n", @($M.sqrt (vBv/vv))) end // end of [main] (* ****** ****** *) (* end of [spectral-norm.dats] *)
Wed, 23 Jan 2013 05:36:35 GMT MAKE: /usr/local/src/ats-lang-anairiats-0.2.9/bin/atscc -pthread -D_GNU_SOURCE -D_ATS_MULTITHREAD -pipe -Wall -O3 -fomit-frame-pointer -march=native -mfpmath=sse -msse2 spectralnorm.dats -o spectralnorm.ats_run -lm /usr/local/src/ats-lang-anairiats-0.2.9/bin/atsopt --output spectralnorm_dats.c --dynamic spectralnorm.dats In file included from spectralnorm_dats.c:19:0: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats: In function ‘atspre_fprint_newline’: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats:271:11: warning: variable ‘n2’ set but not used [-Wunused-but-set-variable] /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/basics.cats:271:7: warning: variable ‘n1’ set but not used [-Wunused-but-set-variable] spectralnorm_dats.c: In function ‘eval_A_times_u_0’: spectralnorm_dats.c:293:1: warning: label ‘__ats_lab_eval_A_times_u_0’ defined but not used [-Wunused-label] spectralnorm_dats.c: In function ‘eval_At_times_u_3’: spectralnorm_dats.c:424:1: warning: label ‘__ats_lab_eval_At_times_u_3’ defined but not used [-Wunused-label] spectralnorm_dats.c: In function ‘eval_AtA_times_u_6’: spectralnorm_dats.c:442:1: warning: label ‘__ats_lab_eval_AtA_times_u_6’ defined but not used [-Wunused-label] spectralnorm_dats.c: In function ‘mainats’: spectralnorm_dats.c:621:1: warning: label ‘__ats_lab_mainats’ defined but not used [-Wunused-label] In file included from spectralnorm_dats.c:29:0: spectralnorm_dats.c: At top level: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/pointer.cats:52:14: warning: ‘atspre_null_ptr’ defined but not used [-Wunused-variable] In file included from spectralnorm_dats.c:30:0: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:57:1: warning: ‘atspre_fprintf_err’ defined but not used [-Wunused-function] /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:69:1: warning: ‘atspre_fprintf_exn’ defined but not used [-Wunused-function] /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/printf.cats:105:1: warning: ‘atspre_prerrf_exn’ defined but not used [-Wunused-function] In file included from spectralnorm_dats.c:33:0: /usr/local/src/ats-lang-anairiats-0.2.9/prelude/CATS/string.cats:351:14: warning: ‘atspre_stropt_none’ defined but not used [-Wunused-variable] spectralnorm_dats.c:224:1: warning: ‘loop2_1_closure_make’ defined but not used [-Wunused-function] spectralnorm_dats.c:278:1: warning: ‘loop1_2_closure_make’ defined but not used [-Wunused-function] spectralnorm_dats.c:355:1: warning: ‘loop2_4_closure_make’ defined but not used [-Wunused-function] spectralnorm_dats.c:409:1: warning: ‘loop1_5_closure_make’ defined but not used [-Wunused-function] spectralnorm_dats.c:468:1: warning: ‘eval_AtA_times_u_6_closure_make’ defined but not used [-Wunused-function] spectralnorm_dats.c:522:1: warning: ‘loop1_8_closure_make’ defined but not used [-Wunused-function] spectralnorm_dats.c:588:1: warning: ‘loop2_9_closure_make’ defined but not used [-Wunused-function] gcc -I/usr/local/src/ats-lang-anairiats-0.2.9/ -I/usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ -L/usr/local/src/ats-lang-anairiats-0.2.9/ccomp/lib/ /usr/local/src/ats-lang-anairiats-0.2.9/ccomp/runtime/ats_prelude.c -pthread -D_GNU_SOURCE -D_ATS_MULTITHREAD -pipe -Wall -O3 -fomit-frame-pointer -march=native -mfpmath=sse -msse2 spectralnorm_dats.c -o spectralnorm.ats_run -lm -lats_mt -lats rm spectralnorm.dats 0.38s to complete and log all make actions COMMAND LINE: ./spectralnorm.ats_run 5500 PROGRAM OUTPUT: 1.274224153