Benchmarking
Suppose we write a simple program that sums the squares of some integers:
def main (n: i32): i32 =
0 (map (**2) (0..<n)) reduce (+)
We can benchmark this program by adding a test stanza to the source
file (say, benchmarking.fut
) that looks like this:
-- ==
-- compiled input { 1000 } output { 332833500 }
-- compiled input { 1000000 } output { 584144992 }
-- compiled input { 1000000000 } output { -2087553280 }
The output
parts are optional. We then use futhark bench
:
$ futhark bench benchmarking.fut
Compiling benchmarking.fut...
Results for benchmarking.fut:
dataset #0 ("1000i32"): 0.20us (avg. of 10 runs; RSD: 2.00)
dataset #1 ("1000000i32"): 290.00us (avg. of 10 runs; RSD: 0.03)
dataset #2 ("1000000000i32"): 270154.20us (avg. of 10 runs; RSD: 0.01)
This will use the default (c
) backend. Things are more
interesting with opencl
:
$ futhark bench --backend=opencl benchmarking.fut
Compiling benchmarking.fut...
Results for benchmarking.fut:
dataset #0 ("1000i32"): 49.70us (avg. of 10 runs; RSD: 0.18)
dataset #1 ("1000000i32"): 44.40us (avg. of 10 runs; RSD: 0.02)
dataset #2 ("1000000000i32"): 1693.80us (avg. of 10 runs; RSD: 0.04)