| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- .\" Copyright (c) 2008-2009 Apple Inc. All rights reserved.
- .Dd May 1, 2009
- .Dt dispatch_benchmark 3
- .Os Darwin
- .Sh NAME
- .Nm dispatch_benchmark
- .Nd Measures block execution time
- .Sh SYNOPSIS
- .Fd #include <dispatch/dispatch.h>
- .Ft uint64_t
- .Fo dispatch_benchmark
- .Fa "size_t count" "void (^block)(void)"
- .Fc
- .Ft uint64_t
- .Fo dispatch_benchmark_f
- .Fa "size_t count" "void *context" "void (*function)(void *)"
- .Fc
- .Sh DESCRIPTION
- The
- .Fn dispatch_benchmark
- function executes the given
- .Fa block
- multiple times according to the
- .Fa count
- variable and then returns the average number of nanoseconds per execution.
- This function is for debugging and performance analysis work.
- For the best
- results, pass a high count value to
- .Fn dispatch_benchmark .
- When benchmarking concurrent code, please compare the
- serial version of the code against the concurrent version, and compare the
- concurrent version on different classes of hardware.
- Please look for inflection
- points with various data sets and keep the following facts in mind:
- .Pp
- .Bl -bullet -offset indent -compact
- .It
- Code bound by computational bandwidth may be inferred by proportional
- changes in performance as concurrency is increased.
- .It
- Code bound by memory bandwidth may be inferred by negligible changes in
- performance as concurrency is increased.
- .It
- Code bound by critical sections may be inferred by retrograde changes in
- performance as concurrency is increased.
- .Bl -bullet -offset indent -compact
- .It
- Intentional: locks, mutexes, and condition variables.
- .It
- Accidental: unrelated and frequently modified data on the same cache-line.
- .El
- .El
- .Sh RETURN VALUE
- The
- .Fn dispatch_benchmark
- function returns the average number of nanoseconds the given block takes to
- execute.
- .Sh SEE ALSO
- .Xr dispatch 3
|