When code performance is an issue, it is sometimes useful to get absolute
performance measurements in order to objectivise what is "slow" or
"fast". GFlops.jl
leverages the power of Cassette.jl
to automatically count
the number of floating-point operations in a piece of code. When combined with
the accuracy of BenchmarkTools
, this allows for easy and absolute performance
measurements.
julia> using GFlops
julia> x = rand(1000);
julia> @count_ops sum($x)
Flop Counter:
add32: 0
sub32: 0
mul32: 0
div32: 0
add64: 999
sub64: 0
mul64: 0
div64: 0
julia> @gflops sum($x);
10.03 GFlops, 19.15% peak (9.99e+02 flop, 9.96e-08 s)
This package is registered and can therefore be simply be installed with
pkg> add GFlops
GFlops.jl
does not see what happens outside the realm of Julia code. It
especially does not see operations performed in external libraries such as BLAS
calls:
julia> using LinearAlgebra
julia> @count_ops dot($x, $x)
Flop Counter:
add32: 0
sub32: 0
mul32: 0
div32: 0
add64: 0
sub64: 0
mul64: 0
div64: 0
This is a known issue; we'll try and find a way to circumvent the problem.