IMPORTANT: To view this page as Markdown, append `.md` to the URL (e.g. /docs/manual/basics.md). For the complete Mojo documentation index, see llms.txt.
Skip to main content
Version: Nightly
For the complete Mojo documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /docs/manual/basics.md).

Bencher

struct Bencher

Defines a Bencher struct which facilitates the timing of a target function.

Fields

  • num_iters (Int): Number of iterations to run the target function.
  • elapsed (Int): The total time elapsed when running the target function.

Implemented traits

AnyType, ImplicitlyDestructible, Movable, RegisterPassable

Methods

__init__

__init__(num_iters: Int) -> Self

Constructs a Bencher object to run and time a function.

Args:

  • num_iters (Int): Number of times to run the target function.

iter

iter[iter_fn: def() capturing -> None](mut self)

Returns the total elapsed time by running a target function a particular number of times.

Parameters:

  • iter_fn (def() capturing -> None): The target function to benchmark.

iter[IterFn: def() -> None](mut self, f: IterFn)

Returns the total elapsed time by running a target closure a particular number of times.

Parameters:

  • IterFn (def() -> None): Type of the closure to benchmark.

Args:

  • f (IterFn): The closure to benchmark.

iter[iter_fn: def() raises capturing -> None](mut self)

Returns the total elapsed time by running a target function a particular number of times.

Parameters:

  • iter_fn (def() raises capturing -> None): The target function to benchmark.

Raises:

If the operation fails.

iter_preproc

iter_preproc[iter_fn: def() capturing -> None, preproc_fn: def() capturing -> None](mut self)

Returns the total elapsed time by running a target function a particular number of times.

Parameters:

  • iter_fn (def() capturing -> None): The target function to benchmark.
  • preproc_fn (def() capturing -> None): The function to preprocess the target function.

iter_preproc[IterFn: def() -> None, PreprocFn: def() -> None](mut self, iter_fn: IterFn, preproc_fn: PreprocFn)

Returns the total elapsed time by running a target function a particular number of times.

Parameters:

  • IterFn (def() -> None): The target function type.
  • PreprocFn (def() -> None): The preprocess function type.

Args:

  • iter_fn (IterFn): The closure carrying the captured state of the target function.
  • preproc_fn (PreprocFn): The closure carrying the captured state of the preprocess function.

iter_custom

iter_custom[iter_fn: def(Int) raises capturing -> Int](mut self)

Times a target function with custom number of iterations.

Parameters:

  • iter_fn (def(Int) raises capturing -> Int): The target function to benchmark.

iter_custom[FuncType: def(Int) -> Int](mut self, func: FuncType)

Times a target function with custom number of iterations.

Parameters:

  • FuncType (def(Int) -> Int): The target function type.

Args:

  • func (FuncType): The closure carrying the captured state of the target function.

iter_custom[kernel_launch_fn: def(DeviceContext) raises capturing -> None](mut self, ctx: DeviceContext)

Times a target GPU function with custom number of iterations via DeviceContext ctx.

Parameters:

  • kernel_launch_fn (def(DeviceContext) raises capturing -> None): The target GPU kernel launch function to benchmark.

Args:

  • ctx (DeviceContext): The GPU DeviceContext for launching kernel.

iter_custom[FuncType: def(DeviceContext) raises -> None](mut self, ref func: FuncType, ctx: DeviceContext)

Times a target GPU closure with custom number of iterations via DeviceContext ctx.

Notes:

This overload is intentionally separate from the parametric iter_custom[kernel_launch_fn](ctx) form. Nested launch closures that capture benchmark-local state are closure values, and the current closure typing rules do not let those values compose with a def(DeviceContext) raises capturing[_] compile-time parameter while preserving their capture object. This value-taking overload forwards the closure to DeviceContext.execution_time() so FuncType carries the captured state.

Parameters:

  • FuncType (def(DeviceContext) raises -> None): The target GPU kernel launch closure type.

Args:

  • func (FuncType): The closure carrying the captured state of the kernel launch.
  • ctx (DeviceContext): The GPU DeviceContext for launching kernel.

iter_custom[kernel_launch_fn: def(DeviceContext, Int) raises capturing -> None](mut self, ctx: DeviceContext)

Times a target GPU function with custom number of iterations via DeviceContext ctx.

Parameters:

  • kernel_launch_fn (def(DeviceContext, Int) raises capturing -> None): The target GPU kernel launch function to benchmark.

Args:

  • ctx (DeviceContext): The GPU DeviceContext for launching kernel.

iter_custom[FuncType: def(DeviceContext, Int) raises -> None](mut self, ref func: FuncType, ctx: DeviceContext)

Times a target GPU closure with custom number of iterations via DeviceContext ctx.

Notes:

This overload is intentionally separate from the parametric iter_custom[kernel_launch_fn](ctx) form. Nested launch closures that capture benchmark-local state are closure values, and the current closure typing rules do not let those values compose with a def(DeviceContext, Int) raises capturing[_] compile-time parameter while preserving their capture object. This value-taking overload forwards the closure to DeviceContext.execution_time_iter() so FuncType carries the captured state.

Parameters:

  • FuncType (def(DeviceContext, Int) raises -> None): The target GPU kernel launch closure type.

Args:

  • func (FuncType): The closure carrying the captured state of the kernel launch.
  • ctx (DeviceContext): The GPU DeviceContext for launching kernel.

iter_custom_multicontext

iter_custom_multicontext[kernel_launch_fn: def() raises capturing -> None](mut self, ctxs: List[DeviceContext])

Times a target GPU function with custom number of iterations via DeviceContext ctx.

Parameters:

  • kernel_launch_fn (def() raises capturing -> None): The target GPU kernel launch function to benchmark.

Args: