RunMat
GitHub

timeit — Measure the execution time of a zero-argument function handle.

t = timeit(f) evaluates the zero-argument function handle f repeatedly and returns the median runtime (in seconds). RunMat accepts the optional numOutputs argument for MATLAB compatibility; today the handle executes with its default output arity (or none when you pass 0) and all returned values are discarded.

Syntax

t = timeit(f)
t = timeit(f, numOutputs)
  • f is a zero-argument function handle (for example, @() myOp(A)).
  • numOutputs is an optional nonnegative integer kept for MATLAB compatibility. Passing 0 suppresses outputs entirely; any other value currently executes the handle with its default output arity while discarding the result.

How timeit works in RunMat

  • Executes f repeatedly, adjusting the inner loop count until a single batch takes at least a few milliseconds or the function is slow enough.
  • Collects multiple samples (at least seven batches) and returns the median per-invocation time, which is robust against outliers.
  • Drops the outputs produced by f; you should perform any validation that depends on those outputs inside the handle. Multi-output dispatch will route through this helper once the runtime exposes multi-return feval.
  • Leaves GPU residency untouched—if f launches GPU kernels, they execute on the active provider. Insert wait(gpuDevice) inside the handle if you need explicit synchronisation.

Examples

Timing a simple anonymous function

f = @() sin(rand(1000, 1));
t = timeit(f)

Comparing two implementations

A = rand(1e5, 1);
slow = @() sum(A .* A);
fast = @() sumsq(A);

slowTime = timeit(slow);
fastTime = timeit(fast)

Timing a function that returns no outputs

logMessage = @() fprintf("Iteration complete\n");
t = timeit(logMessage, 0)

Timing a multiple-output function

svdTime = timeit(@() svd(rand(256)), 3)

Measuring GPU-bound work

gfun = @() gather(sin(gpuArray.rand(4096, 1)));
tgpu = timeit(gfun)

Timing a preallocation helper

makeMatrix = @() zeros(2048, 2048);
t = timeit(makeMatrix)

FAQ

What does timeit return?

— A scalar double containing the median runtime per invocation in seconds.

How many runs does timeit perform?

— It automatically selects a loop count so each batch lasts a few milliseconds, collecting at least seven batches.

Does timeit synchronise GPU kernels?

— No. Insert wait(gpuDevice) inside the handle when you need explicit synchronisation.

Can I time functions that require inputs?

— Yes. Capture them in the handle, for example timeit(@() myfun(A, B)).

How do I time a function with multiple outputs?

— Pass timeit(@() svd(A), 3) to mirror MATLAB’s call signature. RunMat currently ignores values greater than zero until multi-output dispatch lands, but the handle still executes.

Why do successive runs differ slightly?

— Normal system jitter, cache effects, and GPU scheduling can change runtimes slightly; the median mitigates outliers.

Can timeit time scripts?

— Wrap the script body in a function handle so it becomes zero-argument, then call timeit on that handle.

Does timeit participate in fusion or JIT tiers?

— It simply executes the provided handle; any tiering or fusion happens inside the timed function.

What happens if the function errors?

— The error is propagated immediately and timing stops, matching MATLAB behaviour.

Is there a limit on runs?

— Yes. timeit caps the inner loop at about one million iterations to avoid runaway measurements.

These functions work well alongside timeit. Each page has runnable examples you can try in the browser.

tic, toc, pause

Open-source implementation

Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how timeit works, line by line, in Rust.

About RunMat

RunMat is an open-source runtime that executes MATLAB-syntax code — faster, on any GPU, with no license required.

  • Simulations that took hours now take minutes. RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed.
  • Start running code in seconds. Open the browser sandbox or download a single binary. No license server, no IT ticket, no setup.
  • A full development environment. GPU-accelerated 2D and 3D plotting, automatic versioning on every save, and a browser IDE you can share with a link.

Getting started · Benchmarks · Pricing

Try RunMat — free, no sign-up

Start running MATLAB code immediately in your browser.