Algorithm Benchmark is a set of benchmarks aimed at measuring the performance of realistic worloads.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| Heat3D | A 3D heat-equation solving benchmark that overlaps IPC data transfers (nearest-neighbor halo exchange) and GPU compute kernels.Measures multi-process concurrent kernel execution and IPC memory transfer performance on a single device. Linux-only. |
|
✔️ | ❌ |
Api Overhead Benchmark is a set of tests aimed at measuring CPU-side execution duration of compute API calls.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| AppendImageCopyFromMemoryExt | measures time spent in zeCommandListAppendImageCopyFromMemoryExt on CPU. The destination is an RGBA float image and the source row and slice pitches are 0, so the driver computes them. |
|
✔️ | ❌ |
| AppendImageCopyToMemoryExt | measures time spent in zeCommandListAppendImageCopyToMemoryExt on CPU. The source is an RGBA float image and the destination row and slice pitches are 0, so the driver computes them. |
|
✔️ | ❌ |
| AppendKernelWithMappedTimestampEvent | Measures CPU time of zeCommandListAppendLaunchKernel with timestamp event. |
|
✔️ | ❌ |
| AppendLaunchCooperativeKernel | measures time spent in zeCommandListAppendLaunchCooperativeKernel on CPU. |
|
✔️ | ❌ |
| AppendLaunchKernel | measures time spent in zeCommandListAppendLaunchKernel on CPU. |
|
✔️ | ❌ |
| AppendLaunchKernelWithParameters | measures time spent in zeCommandListAppendLaunchKernelWithParameters on CPU. |
|
✔️ | ❌ |
| AppendMarkerExp | measures time spent in zetCommandListAppendMarkerExp on CPU. The first metric group of the device that can generate markers is activated. Requires ZET_ENABLE_METRICS=1. |
|
✔️ | ❌ |
| AppendMemCopy | measures time spent in zeCommandListAppendMemoryCopy on CPU. |
|
✔️ | ❌ |
| AppendMetricMemoryBarrier | measures time spent in zetCommandListAppendMetricMemoryBarrier on CPU. The barriers are appended between the begin and the end of a metric query from the first event based metric group of the device. Requires ZET_ENABLE_METRICS=1 and access to the device performance counters. |
|
✔️ | ❌ |
| AppendMetricQueryBegin | measures time spent in zetCommandListAppendMetricQueryBegin on CPU. The metric query pool uses the first event based metric group of the device. Requires ZET_ENABLE_METRICS=1 and access to the device performance counters. |
|
✔️ | ❌ |
| AppendMetricQueryEnd | measures time spent in zetCommandListAppendMetricQueryEnd on CPU. The metric query pool uses the first event based metric group of the device. Requires ZET_ENABLE_METRICS=1 and access to the device performance counters. |
|
✔️ | ❌ |
| AppendMetricStreamerMarker | measures time spent in zetCommandListAppendMetricStreamerMarker on CPU. The metric streamer is opened on the first time based metric group of the device that accepts a streamer marker. Requires ZET_ENABLE_METRICS=1 and access to the device performance counters. |
|
✔️ | ❌ |
| AppendSignalEvent | measures time spent in zeCommandListAppendSignalEvent on CPU. |
|
✔️ | ❌ |
| AppendWaitOnEventsImmediate | Measures time spent to zeCommandListAppendWaitOnEvents using immediate command list. |
|
✔️ | ❌ |
| CommandListGetContextHandle | measures time spent in zeCommandListGetContextHandle call on CPU. |
|
✔️ | ❌ |
| CommandListGetDeviceHandle | measures time spent in zeCommandListGetDeviceHandle call on CPU. |
|
✔️ | ❌ |
| CommandListGetNextCommandId | measures time spent in zeCommandListGetNextCommandIdExp call on CPU. Supported mutableCommandFlag values: All, KernelArguments, GroupCount, GroupSize, GlobalOffset, SignalEvent, WaitEvents, GraphArguments. |
|
✔️ | ❌ |
| CommandListGetNextCommandIdWithKernels | measures time spent in zeCommandListGetNextCommandIdWithKernelsExp call on CPU. Supported mutableCommandFlag values: All, KernelArguments, GroupCount, GroupSize, GlobalOffset, SignalEvent, WaitEvents, KernelInstruction, GraphArguments. |
|
✔️ | ❌ |
| CommandListGetOrdinal | measures time spent in zeCommandListGetOrdinal call on CPU. |
|
✔️ | ❌ |
| CommandListHostSynchronize | measures CPU time spent in zeCommandListHostSynchronize. Optionally, adds an event-signalling barrierand waits for the event, before calling zeCommandListHostSynchronize |
|
✔️ | ❌ |
| CommandListImmediateGetIndex | measures time spent in zeCommandListImmediateGetIndex call on CPU. | ✔️ | ❌ | |
| CommandListIsImmediate | measures time spent in zeCommandListIsImmediate call on CPU. |
|
✔️ | ❌ |
| CommandListUpdateMutableCommandKernels | measures time spent in zeCommandListUpdateMutableCommandKernelsExp call on CPU. A single mutable kernel command is appended with one initial kernel selected from a list of N candidates. Each iteration swaps the active kernel to the next one in the list. |
|
✔️ | ❌ |
| CommandListUpdateMutableCommandSignalEvent | measures time spent in zeCommandListUpdateMutableCommandSignalEventExp call on CPU. A single mutable kernel command is appended with an initial signal event. Each iteration swaps the command's signal event to an alternate handle. | ✔️ | ❌ | |
| CommandListUpdateMutableCommandWaitEvents | measures time spent in zeCommandListUpdateMutableCommandWaitEventsExp call on CPU. A single mutable kernel command is appended with N wait events. Each iteration replaces the wait event list with an alternate set of N events. |
|
✔️ | ❌ |
| CommandListUpdateMutableCommands | measures time spent in zeCommandListUpdateMutableCommandsExp call on CPU. Mutates a single previously-appended kernel command via mutation descriptors chained on pNext. Supported mutableCommandFlag values: KernelArguments, GroupCount, GroupSize, GlobalOffset, All. |
|
✔️ | ❌ |
| CreateBuffer | measures time spent in clCreateBuffer on CPU. |
|
❌ | ✔️ |
| CreateCommandList | measures time spent in zeCommandListCreate on CPU. |
|
✔️ | ❌ |
| CreateCommandListImmediate | measures time spent in zeCommandListCreateImmediate on CPU. |
|
✔️ | ❌ |
| DestroyCommandList | measures time spent in zeCommandListDestroy on CPU. |
|
✔️ | ❌ |
| DestroyCommandListImmediate | measures time spent in zeCommandListDestroy on CPU, for immediate cmdlist. |
|
✔️ | ❌ |
| DriverGet | measures time spent in driver get call on CPU. |
|
✔️ | ❌ |
| DriverGetApiVersion | measures time spent in zeDriverGetApiVersion call on CPU. | ✔️ | ❌ | |
| DriverGetProperties | measures time spent in zeDriverGetProperties call on CPU. | ✔️ | ❌ | |
| EnqueueNdrNullLws | measures time spent in clEnqueueNDRangeKernel on CPU. Null LWS is provided, which causes driver to calculate it |
|
❌ | ✔️ |
| EnqueueNdrTime | measures time spent in clEnqueueNDRangeKernel on CPU. |
|
❌ | ✔️ |
| EventCreation | measures time spent to create event |
|
✔️ | ❌ |
| EventDestroy | measures time spent to destroy completed event |
|
✔️ | ❌ |
| EventQueryKernelTimestamp | Measures time spent in zeEventQueryKernelTimestamp for a completed counter based event with device timestamps. First is the cost of the first query, Repeated is the per call cost of the queries that follow it. |
|
✔️ | ❌ |
| EventQueryProfilingData | measures time spent querying profiling data from events |
|
❌ | ✔️ |
| EventQueryStatus | Measures time spent to query event status |
|
✔️ | ❌ |
| EventReuseImmCmdlistInProgress | measures CPU-side time of zeCommandListAppendLaunchKernel when reusing a signal event on an immediate command list that is currently in progress. |
|
✔️ | ❌ |
| ExecImmCopy | measures time spent in appending memory copy for immediate command list on CPU with Copy Queue. |
|
✔️ | ❌ |
| ExecImmediate | measures time spent in appending launch kernel for immediate command list on CPU. |
|
✔️ | ❌ |
| ExecImmediateMultiKernel | measures time spent in executing multiple instances of two different kernels with immediate command list on CPU |
|
✔️ | ❌ |
| ExecuteCommandList | measures time spent in zeCommandQueueExecuteCommandLists on CPU. |
|
✔️ | ❌ |
| ExecuteCommandListForCopyEngine | measures CPU time spent in zeCommandQueueExecuteCommandLists for copy-only path |
|
✔️ | ❌ |
| ExecuteCommandListWithFenceCreate | measures time spent in zeFenceCreate on CPU when fences are used. | ✔️ | ❌ | |
| ExecuteCommandListWithFenceDestroy | measures time spent in zeFenceDestroy on CPU when fences are used. | ✔️ | ❌ | |
| ExecuteCommandListWithFenceUsage | measures time spent in zeCommandQueueExecuteCommandLists and zeFenceSynchronize on CPU when fences are used. | ✔️ | ❌ | |
| ExecuteCommandListWithIndirectAccess | measures time spent in zeCommandQueueExecuteCommandLists on CPU when indirect allocations are accessed. |
|
✔️ | ❌ |
| ExecuteCommandListWithIndirectArguments | measures time spent in zeCommandQueueExecuteCommandLists on CPU when indirect allocations are used. |
|
✔️ | ❌ |
| ExecuteRegularCommandListWithImmediate | measures time spent in zeCommandListImmediateAppendCommandListsExp on CPU. |
|
✔️ | ❌ |
| FlushTime | measures time spent in clEnqueueNDRangeKernel on CPU. |
|
❌ | ✔️ |
| GetMemoryProperties | measures time spent in zeMemGetAllocProperties on CPU when driver is queried for memory properties. |
|
✔️ | ❌ |
| GetMemoryPropertiesWithModifiedAllocations | measures time spent in zeMemGetAllocProperties on CPU, when allocations are modified between each iteration. |
|
✔️ | ❌ |
| GetMemoryPropertiesWithOffsetedPointer | measures time spent in zeMemGetAllocProperties on CPU when the pointer passed is an offset from the base address. |
|
✔️ | ❌ |
| ImageRecreation | measures time used to create a temporary image, write to it on the GPU, wait for the write and release the image, as in a frame loop that allocates a new image for every frame. |
|
✔️ | ✔️ |
| InOrderWaitAppend | Measures time spent to append wait on event command to in-order command list. |
|
✔️ | ❌ |
| InOrderWaitlistAppend | Measures time spent to append a kernel to an in-order command list, when an event signaled by the very same command list is passed on the wait list of that append. |
|
✔️ | ❌ |
| KernelSetArgumentValueImmediate | measures time spent in zeKernelSetArgumentValue for immediate arguments on CPU. |
|
✔️ | ❌ |
| LifecycleCommandList | measures time spent on CPU to create, close, execute, synchronize and destroy CmdListCount command lists, one at a time. |
|
✔️ | ❌ |
| MemGetIpcHandle | measures time spent in zeMemGetIpcHandle on CPU. |
|
✔️ | ❌ |
| MemOpenIpcHandle | measures time spent in zeMemOpenIpcHandle on CPU. |
|
✔️ | ❌ |
| MemPutIpcHandle | measures time spent in zeMemPutIpcHandle on CPU. |
|
✔️ | ❌ |
| ModuleCreateSpv | measures time spent in zeModuleCreate for .spv kernel on CPU. |
|
✔️ | ❌ |
| MultiArgumentKernelTime | measures time spent in clEnqueueNDRangeKernel on CPU for kernels with multiple arguments. |
|
✔️ | ✔️ |
| PhysicalMemCreate | measures time spent in zePhysicalMemCreate on CPU. |
|
✔️ | ❌ |
| PhysicalMemDestroy | measures time spent in zePhysicalMemDestroy on CPU. | ✔️ | ❌ | |
| ResetCommandList | measures time spent in zeCommandListReset on CPU. |
|
✔️ | ❌ |
| SetKernelArgSvmPointer | measures time spent in clSetKernelArgSVMPointer on CPU. |
|
✔️ | ✔️ |
| SetKernelGroupSize | measures time spent in zeKernelSetGroupSize on CPU. |
|
✔️ | ❌ |
| SubmitKernel | measures time spent in submitting a kernel to a SYCL (or SYCL-like) queue on CPU. |
|
✔️ | ✔️ |
| UsmCopyReservedMemory | measures time spent in zeCommandListAppendMemoryCopy on CPU on an immediate command list, when the source and destination are inside a virtual memory reservation that is mapped with the given number of zeVirtualMemMap calls. |
|
✔️ | ❌ |
| UsmMemoryAllocation | measures time spent in USM memory allocation APIs using the specified strategy. |
|
✔️ | ❌ |
| VirtualMemFree | measures time spent in zeVirtualMemFree on CPU. |
|
✔️ | ❌ |
| VirtualMemGetAccessAttrib | measures time spent in zeVirtualMemGetAccessAttribute on CPU. |
|
✔️ | ❌ |
| VirtualMemMap | measures time spent in zeVirtualMemMap on CPU. |
|
✔️ | ❌ |
| VirtualMemQueryPageSize | measures time spent in zeVirtualMemQueryPageSize on CPU. | ✔️ | ❌ | |
| VirtualMemReserve | measures time spent in zeVirtualMemReserve on CPU. |
|
✔️ | ❌ |
| VirtualMemSetAccessAttrib | measures time spent in zeVirtualMemSetAccessAttribute on CPU. |
|
✔️ | ❌ |
| VirtualMemUnMap | measures time spent in zeVirtualMemUnMap on CPU. |
|
✔️ | ❌ |
Atomic Benchmark is a set of tests aimed at measuring performance of atomic operations inside kernels.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| OneAtomic | enqueues kernel performing an atomic operation on a single address |
|
✔️ | ✔️ |
| OneAtomicExplicit | enqueues kernel performing an atomic operation on a single address using OpenCL 2.0 Atomics with explicit memory order and scope |
|
✔️ | ✔️ |
| OneLocalAtomic | enqueues kernel performing an atomic operation on a single location placed in SLM |
|
✔️ | ✔️ |
| OneLocalAtomicExplicit | enqueues kernel performing an atomic operation on a single location placed in SLM using OpenCL 2.0 Atomics with explicit memory order and scope |
|
✔️ | ✔️ |
| SeparateAtomics | enqueues kernel performing an atomic operation on different addresses |
|
✔️ | ✔️ |
| SeparateAtomicsExplicit | enqueues kernel performing an atomic operation on different addresses |
|
✔️ | ✔️ |
Compute Benchmark is a set of tests aimed at measuring floating point compute throughput of GPU kernels.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| SinglePrecisionPerformance | measures single precision floating point throughput in GFLOPS by executing FMA operations in a kernel, dispatch size is determined automatically from device capabilities |
|
✔️ | ✔️ |
CPU Efficiency Benchmark measures CPU cost, utilization, and latency tradeoffs of host-side wait and synchronization paths.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| EventHostSynchronize | Measures zeEventHostSynchronize latency, thread and process CPU time, and CPU utilization for work submitted to an immediate command list |
|
✔️ | ❌ |
Emulation Benchmark is a set of tests aimed at measuring performance of emulated math operations performed in kernels.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| Int64Div | enqueues kernel performing an int64 division emulation |
|
✔️ | ✔️ |
EU Benchmark is a set of tests aimed at measuring performance of calculations performed in kernels.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| DoMathOperation | enqueues kernel performing a math operation. Min, Max, Modulo, And, Or and Xor are each followed by an addition, a subtraction for Max, that makes the next operand depend on the result, so their results include that operation. Integer Inc and Dec are not implemented |
|
✔️ | ✔️ |
| ReadAfterAtomicWrite | enqueues kernel, which writes to global memory using atomic and then reads non atomically |
|
✔️ | ✔️ |
Gpu Commands Benchmark is a set of tests aimed at measuring GPU-side execution duration of various commands.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| AggregatedEventSignaling | measures time required to signal an aggregated event, where each operation generates an atomic write |
|
✔️ | ❌ |
| AggregatedEventWait | measures time required to service an aggregated event wait using a single wait on a GPU |
|
✔️ | ❌ |
| BarrierBetweenKernels | measures time required to run a barrier command between 2 kernels, including potential cache flush commands |
|
✔️ | ❌ |
| CopyWithEvent | measures time required to run a copy kernel with various event configurations. |
|
✔️ | ❌ |
| EmptyKernel | measures time required to run an empty kernel on GPU. |
|
✔️ | ❌ |
| EventCtxtSwitchLatency | measures context switching latency time required to switch between various engine types |
|
✔️ | ❌ |
| KernelWithEvent | measures time required to run an empty kernel with various event configurations. |
|
✔️ | ❌ |
| KernelWithWork | measures time required to run a GPU kernel which assigns values to elements of a buffer. |
|
✔️ | ❌ |
| LastEventLatency | Measures different ways to retrieve event from last submission. |
|
✔️ | ❌ |
| WaitOnEventCold | measures time required to service a signalled semaphore, that has never been waited for. |
|
✔️ | ❌ |
| WaitOnEventFromWalker | measures time required to service a signalled semaphore coming from Walker command |
|
✔️ | ❌ |
| WaitOnEventHot | measures time required to service a signalled semaphore, that was previously used |
|
✔️ | ❌ |
| WriteTimestamp | measures time required to write a timestamp on GPU. |
|
✔️ | ❌ |
Graph Api Overhead Benchmark is a set of tests aimed at measuring CPU-side execution duration of SYCL Graphs API calls.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| Decoder2Graph | LLM decode proxy benchmark to simulate graph execution with host CPU coordination. |
|
✔️ | ❌ |
| GraphReplayLatency | records a graph and appends it replayCount times to an in-order immediate command list, each time with a profiling event. Measures time from the end of one graph execution till the start of the next one. |
|
✔️ | ❌ |
| GraphWithTransfers | measures execution time of a graph captured on an immediate command list, consisting of a host-to-device copy, a kernel processing the device buffer and a device-to-host copy. Optionally, a second graph of 3 compute-bound kernels is executed in parallel on a separate immediate command list, competing for the same compute resources, and the measured time lasts until both graphs complete. Results are verified after benchmarking. |
|
✔️ | ❌ |
| MutateGraph | The benchmark quantifies the benefits of using Mutable Command List for graphs compared to recreating the graphs for scratch every time |
|
✔️ | ❌ |
| SinKernelGraph | Benchmark running memory copy and kernel runs, with graphs and without graphs |
|
✔️ | ❌ |
| SubmitGraph | measures time spent in submitting a graph to a SYCL (or SYCL-like) queue on CPU. |
|
✔️ | ✔️ |
Host Function Benchmark is a set of tests aimed at measuring performance of host function execution.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| HostFunctionCmdListImmediate | Measures the overhead of the host function. |
|
✔️ | ❌ |
| HostFunctionCmdListRegular | Measures the overhead of the host function. |
|
✔️ | ❌ |
Memory Benchmark is a set of tests aimed at measuring bandwidth of memory transfers.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| CopyBuffer | allocates two OpenCL buffers and measures copy bandwidth between them. Buffers will be placed in device memory, if it's available. |
|
❌ | ✔️ |
| CopyBufferRect | allocates two OpenCL buffers and measures rectangle copy bandwidth between them. Buffers will be placed in device memory, if it's available. |
|
❌ | ✔️ |
| CopyBufferToImage | allocates buffer and image and measures copy bandwidth between them using immediate command list for Level Zero and command queue for OpenCL. |
|
✔️ | ✔️ |
| CopyEntireImage | allocates two image objects and measures copy bandwidth between them. Images will be placed in device memory, if it's available. |
|
✔️ | ✔️ |
| CopyImageRegion | allocates two image objects and measures region copy bandwidth between them using immediate command list for Level Zero and command queue for OpenCL. |
|
✔️ | ✔️ |
| CopyImageToBuffer | allocates image and buffer and measures copy bandwidth between them using immediate command list for Level Zero and command queue for OpenCL. |
|
✔️ | ✔️ |
| FillBuffer | allocates an OpenCL buffer and measures fill bandwidth. Buffer will be placed in device memory, if it's available. |
|
❌ | ✔️ |
| FullRemoteAccessMemory | Uses stream memory in a fashion described by 'type' to measure bandwidth of full remote memory access. |
|
❌ | ✔️ |
| FullRemoteAccessMemoryXeCoresDistributed | Uses stream memory in a fashion described by 'type' to measure bandwidth of full remote memory accesswhen hwthreads are distributed between XeCores. |
|
❌ | ✔️ |
| HostMappedMemory | maps a device allocation into the host address space with zeIntelMemMapDeviceMemToHost and measures the bandwidth of a CPU memcpy through that mapping. On a device with local memory the mapping is reached over the PCIe BAR and is write-combining, so writes stream while reads become uncached per-cacheline round trips, which makes the two directions differ by orders of magnitude. On an integrated device the driver returns the existing host pointer and the result is an ordinary system memory measurement. Requires a driver exposing the mapping extension and an allocation the host can alias directly. |
|
✔️ | ❌ |
| MapBuffer | allocates an OpenCL buffer and measures map bandwidth. Mapping operation means memory transfer from GPU to CPU or a no-op, depending on map flags. |
|
❌ | ✔️ |
| QueueInOrderMemcpy | measures time on CPU spent for multiple in order memcpy. |
|
✔️ | ❌ |
| RandomAccessMemory | Measures device-memory random access bandwidth for different allocation sizes, alignments and access modes.The benchmark uses 10 million accesses to memory. |
|
✔️ | ❌ |
| RandomAccessMultiResource | Measures random access bandwidth for different allocation sizes and placements.The benchmark uses 10 million accesses to memory for each resource. |
|
✔️ | ❌ |
| ReadBuffer | allocates an OpenCL buffer and measures read bandwidth. Read operation means transfer from GPU to CPU. |
|
❌ | ✔️ |
| ReadBufferMisaligned | allocates an OpenCL buffer and measures read bandwidth. Read operation means transfer from GPU to CPU. Destination pointer passed by the application will be misaligned by the specified amount of bytes. |
|
❌ | ✔️ |
| ReadBufferRect | allocates an OpenCL buffer and measures rectangle read bandwidth. Rectangle read operation means transfer from GPU to CPU. |
|
❌ | ✔️ |
| ReadDeviceMemBuffer | allocates two OpenCL buffers and measures source buffer read bandwidth. Source buffer resides in device memory. |
|
❌ | ✔️ |
| ReadImage | Measures time spent during Read Image calls |
|
❌ | ✔️ |
| RemoteAccessMemory | Uses stream memory in a fashion described by 'type' to measure bandwidth with differentpercentages of remote memory access. Triad means two buffers are read and one is written to.In read and write memory is only read or written to. |
|
❌ | ✔️ |
| RemoteAccessMemoryMaxSaturation | Uses stream memory write to measure max data bus saturation with different percentages of remote memory access |
|
❌ | ✔️ |
| SLM_DataAccessLatency | generates SLM local memory transactions inside thread group to measure latency between reads (uses Intel only private intel_get_cycle_counter() ) |
|
❌ | ✔️ |
| SlmSwitchLatency | Enqueues 2 kernels with different SLM size. Measures switch time between these kernels. |
|
✔️ | ❌ |
| StreamAfterTransfer | Goal of this test is to measure how stream kernels perform right after host to device transfer populating the data. Test does clean caches, then emits transfers and then follows with stream kernel and measures GPU execution time of it. |
|
❌ | ✔️ |
| StreamMemory | Streams memory inside of kernel in a fashion described by 'type'. Copy means one memory location is read from and the second one is written to. Triad means two buffers are read and one is written to. In read and write memory is only read or written to. With --verify, Read also stores one element per 256 work groups (--verificationMode=light) or every element (--verificationMode=complete) so the output can be checked. ReadConstant is Read in which every work group reads the elements of the first work group, so all work groups read the same 'lws' elements. |
|
✔️ | ✔️ |
| StreamMemoryImmediate | Streams memory inside of kernel in a fashion described by 'type' using immediate command list. Copy means one memory location is read from and the second one is written to. Triad means two buffers are read and one is written to. In read and write memory is only read or written to. With --verify, Read also stores one element per 256 work groups (--verificationMode=light) or every element (--verificationMode=complete) so the output can be checked. |
|
✔️ | ❌ |
| UnmapBuffer | allocates an OpenCL buffer and measures unmap bandwidth. Unmapping operation meansmemory transfer from CPU to GPU or a no-op, depending on map flags. |
|
❌ | ✔️ |
| UsmConcurrentCopy | allocates four unified shared memory buffers, 2 in device memory and 2 in host memory. Measures concurrent copy bandwidth between them. |
|
✔️ | ❌ |
| UsmCopy | allocates two unified shared memory buffers and measures copy bandwidth between them. |
|
✔️ | ✔️ |
| UsmCopyConcurrentMultipleBlits | Measures Copy bandwidth while performing concurrent copies between host and device using different copy engines. Engines for Host to Device copies could be selected using h2dBlitters. Engines for Device to Host copies could be selected using d2hBlitters. |
|
✔️ | ❌ |
| UsmCopyImmediate | allocates two unified shared memory buffers and measures copy bandwidth between them using immediate command list. |
|
✔️ | ❌ |
| UsmCopyImmediateAfterKernels | Measures CPU time of appending memory copies to an in-order immediate command list that already holds time-consuming kernels. 'Append' covers the copy appends only, including any wait for the preceding kernels to complete. 'Total' covers the time from the first kernel append until synchronization returns. |
|
✔️ | ❌ |
| UsmCopyMultipleBlits | allocates two unified shared memory buffers, divides them into chunks, copies each chunk using a different copy engine and measures bandwidth. Results for each individual blitter engine is measured using GPU-based timings and reported separately. Total bandwidths are calculated by dividing the total buffer size by the worst result from all engines. Division of work among blitters is not always even - if main copy engine is specified (rightmost bit in --bliters argument), it gets a half of the buffer and the rest is divided between remaining copy engines. Otherwise the division is even. |
|
✔️ | ✔️ |
| UsmCopyRegion | allocates two unified shared memory buffers and measures region copy bandwidth between them using immediate command list. |
|
✔️ | ❌ |
| UsmCopyStagingBuffers | Measures copy time from device/host to host/device. Host memory is non-USM allocation.Copy is done through staging USM buffers. Non-USM host ptr is never passed to L0 API, only through staging buffers. |
|
✔️ | ❌ |
| UsmFill | allocates a unified memory buffer and measures fill bandwidth |
|
✔️ | ✔️ |
| UsmFillImmediate | allocates a unified memory buffer and measures fill bandwidth using immediate command list |
|
✔️ | ❌ |
| UsmFillMultipleBlits | allocates a unified shared memory buffer, divides it into chunks, copies each chunk using a different copy engine and measures bandwidth. Refer to UsmCopyMultipleBlits for more details. |
|
✔️ | ✔️ |
| UsmFillSpecificPattern | allocates a unified memory buffer and measures fill bandwidth. Allow specifying arbitrary pattern. |
|
✔️ | ✔️ |
| UsmImmediateCopyMultipleBlits | allocates two unified shared memory buffers, divides them into chunks, copies each chunk using a different copy engine with an immediate command list and measures bandwidth. Results for each individual blitter engine is measured using GPU-based timings and reported separately. Total bandwidths are calculated by dividing the total buffer size by the worst result from all engines. Division of work among blitters is not always even - if main copy engine is specified (rightmost bit in --bliters argument), it gets a half of the buffer and the rest is divided between remaining copy engines. Otherwise the division is even. |
|
✔️ | ❌ |
| UsmMemset | allocates a unified memory buffer and measures memset bandwidth |
|
❌ | ✔️ |
| WriteBuffer | allocates an OpenCL buffer and measures write bandwidth. Write operation means transfer from CPU to GPU. |
|
❌ | ✔️ |
| WriteBufferRect | allocates an OpenCL buffer and measures rectangle write bandwidth. Rectangle write operation means transfer from CPU to GPU. |
|
❌ | ✔️ |
| WriteImage | Measures time spent during Write Image calls |
|
❌ | ✔️ |
Miscellaneous Benchmark is a set of tests measuring different simple compute scenarios.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| IoqKernelSwitchLatency | measures time from end of one kernel till start of next kernel for in order queue |
|
❌ | ✔️ |
| KernelWithWork | measures time required to run a GPU kernel which assigns constant values to elements of a buffer. Each thread assigns one value. Benchmark checks the impact of kernel split. |
|
❌ | ✔️ |
| Reduction | Performs a reduction operation on a buffer. Each thread performs atomic_add on one shared memory location. |
|
❌ | ✔️ |
| Reduction2 | Performs a reduction operation on a buffer. Each thread performs atomic_add on one shared memory location. |
|
❌ | ✔️ |
| Reduction3 | Performs a reduction operation on a buffer. Each thread performs atomic_add on one shared memory location. |
|
❌ | ✔️ |
| Reduction4 | Performs a reduction operation on a buffer. Each thread performs atomic_add on one shared memory location. |
|
❌ | ✔️ |
| Reduction5 | Performs a reduction operation on a buffer. Each thread performs atomic_add on one shared memory location. |
|
❌ | ✔️ |
| VectorSum | Performs vector addition |
|
❌ | ✔️ |
Multiprocess Benchmark is a set of tests aimed at measuring how different commands benefit for simultaneous execution.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| KernelAndCopy | enqueues kernel and copy operation with the ability to perform both tasks on different command queues. |
|
❌ | ✔️ |
| MultiProcessCompute | Creates a number of separate processes for each tile specified performing a compute workload and measures average time to complete all of them. Processes will use affinity mask to select specific sub-devices for the execution |
|
✔️ | ❌ |
| MultiProcessComputeSharedBuffer | Creates a number of separate processes for each tile specified performing a compute workload and measures average time to complete all of them. Processes will use affinity mask to select specific sub-devices for the execution. A single buffer for each tile is created by parent process. All processes executing on a given tile will share it via IPC calls. |
|
✔️ | ❌ |
| MultiProcessImmediateCmdlistCompletion | measures completion latency of AppendMemoryCopy issued from multiple processes to Immediate Command Lists.Engines to be used for submissions are selected based on the enabled bits of engineMask.Bits of the 'engineMask' are indexed from right to left. So rightmost bit represents first engine and leftmost, the last engine.If 'numberOfProcesses' is greater than selected engine count, then the excess processes are assigned to selected engines one each, in a round-robin method.if selected engineCount == 1, then all processes are assigned to that engine. |
|
✔️ | ❌ |
| MultiProcessImmediateCmdlistSubmission | measures submission latency of walker command issued from multiple processes to Immediate Command Lists.If 'numberOfProcesses' is greater than engine count, then the excess processes are assigned to engines one each, in a round-robin method.if engineCount == 1, then all processes are assigned to the engine. |
|
✔️ | ❌ |
| MultiProcessInit | Measures the initialization overhead in a multi-process application.For Level Zero we only measure the first invocation of zeInit() per process execution. |
|
✔️ | ❌ |
Multithread Benchmark is a set of tests aimed at measuring how different commands benefit from multithreaded execution.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| ImmediateCommandListCompletion | measures completion latency of AppendMemoryCopy issued from multiple threads to Immediate Command Lists.Engines to be used for submissions are selected based on the enabled bits of engineMask.'threadsPerEngine' number of threads submits commands to each selected engine.If 'numberOfThreads' is greater than 'threadsPerEngine' x selected engine count, then the excess threads are assigned to selected engines one each, in a round-robin method.if selected engineCount == 1, then all threads are assigned to that engine. |
|
✔️ | ❌ |
| ImmediateCommandListSubmission | measures submission latency of AppendLaunchKernel issued from multiple threads to Immediate Command Lists.'threadsPerEngine' count of threads submit commands to each engine.If 'numberOfThreads' is greater than 'threadsPerEngine' x engine count, then the excess threads are assigned to engines one each, in a round-robin method.if engineCount == 1, then all threads are assigned to the engine. |
|
✔️ | ❌ |
| SvmCopy | enqueues multiple svm copies on multiple threads concurrently. |
|
✔️ | ✔️ |
Multi-tile Memory Benchmark is a set of tests aimed at measuring bandwidth of memory transfers performed on a multi-tile device.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| CopyBuffer | allocates two OpenCL buffers and measures copy bandwidth between them. Buffers will be placed in device memory, if it's available. |
|
❌ | ✔️ |
| FillBuffer | allocates an OpenCL buffer and measures fill bandwidth. Buffer will be placed in device memory, if it's available. |
|
❌ | ✔️ |
| ReadBuffer | allocates an OpenCL buffer and measures read bandwidth. Read operation means transfer from GPU to CPU. |
|
❌ | ✔️ |
| UsmBidirectionalCopy | allocates two unified device memory buffers, each on a different tile, and measures copy bandwidth between. Test measures copies on two directions, which can be controlled with the -write parameter: with -write=1, each tile performs a write operation. For instance: queue is placed in tile 0, source is buffer in tile 0, and destination is in tile 1. Similarly for tile 1, queue is placed in tile 1, source in tile 1, and destination in tile 0. With -write=0, the destination and source are flipped: queue is placed in tile 0, source is buffer in tile 1, and destination is in tile 0, while for tile 1, queue is placed in tile 1, source in tile 0, and destination in tile 1. |
|
✔️ | ❌ |
| UsmCopy | allocates two unified shared memory buffers and measures copy bandwidth between them using a builtin function. |
|
✔️ | ✔️ |
| UsmCopyImmediate | allocates two unified shared memory buffers and measures copy bandwidth between them using a builtin function appended to an immediate list. |
|
✔️ | ❌ |
| UsmCopyKernel | allocates two unified shared memory buffers and measures copy bandwidth between them using a custom kernel. |
|
✔️ | ✔️ |
| UsmFill | allocates a unified shared memory buffer and measures fill bandwidth. |
|
✔️ | ✔️ |
| UsmSharedMigrateCpu | allocates a unified shared memory buffer and measures time to migrate it from GPU to CPU. |
|
✔️ | ✔️ |
| UsmSharedMigrateGpu | allocates a unified shared memory buffer and measures time to migrate it from CPU to GPU. |
|
✔️ | ✔️ |
| WriteBuffer | allocates an OpenCL buffer and measures write bandwidth. Write operation means transfer from CPU to GPU. |
|
❌ | ✔️ |
P2P Benchmark is a set of tests aimed at measuring bandwidth and latency of memory transfers between peer devices.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| UsmCopyBidirectionalRead | allocates unified device memory buffers on two root devices and measures the bandwidth of two copies at the same time, each device reading from the other on an immediate command list. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmCopyBidirectionalWrite | allocates unified device memory buffers on two root devices and measures the bandwidth of two copies at the same time, each device writing to the other on an immediate command list. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmCopyMultipleBlits | allocates two unified device memory buffers on separate devices and performs a copy between sections (or chunks) of these using a different copy engine and measures bandwidth. Test first checks for P2P capabilities in the target platform before submitting the copy. Results for each individual blitter engine is measured using GPU-based timings and reported separately. Total bandwidths are calculated by dividing the total buffer size by the worst result from all engines. Division of work among blitters is not always even - if main copy engine is specified (rightmost bit in --bliters argument), it gets a half of the buffer and the rest is divided between remaining copy engines. Otherwise the division is even. |
|
✔️ | ❌ |
| UsmCopyPushPull | allocates unified device memory buffers on two root devices and measures the bandwidth of two copies at the same time on immediate command lists: the local device writes to the peer while the peer reads from the local device, so both copies move data in the same direction. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmCopyRead | allocates unified device memory buffers on two root devices and measures the bandwidth of a copy from the peer device to the local device, submitted by the local device on an immediate command list, so the local device reads from the peer. |
|
✔️ | ❌ |
| UsmCopyWrite | allocates unified device memory buffers on two root devices and measures the bandwidth of a copy from the local device to the peer device, submitted by the local device on an immediate command list, so the local device writes to the peer. |
|
✔️ | ❌ |
| UsmCopyWriteRead | allocates unified device memory buffers on two root devices and measures the bandwidth of two copies at the same time, both submitted by the local device on two engines with immediate command lists: one writes to the peer and one reads from the peer, so the link carries data in both directions. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmEUCopy | allocates two unified device memory buffers on separate devices, performs a copy between them using a compute engine, and reports bandwidth. Test first checks for P2P capabilities in the target platform before submitting the copy. |
|
✔️ | ❌ |
| UsmEUReduceCopyRing | connects numDevices root devices in a ring and runs on every device the kernels of a large message allreduce ring with EU writes to the peer. The message is split in numDevices parts and each part is moved in chunks. For every chunk a copy kernel writes a part to a temporary buffer on the next device, a barrier kernel waits for the previous device, and a reduce-copy kernel computes out1 = in1 + in2 in local device memory and writes out1 to the next device. With more than 2 devices the barrier and the reduce-copy repeat for every ring step and copy kernels for the allgather follow. The kernels are compiled at run time from p2p_benchmark_reduce_copy.cl, which can be modified next to the binary without rebuilding. All devices start together, so both directions of every link carry writes at the same time. Reports the bandwidth of the peer writes of one device, which is the allreduce bus bandwidth. With throttledWorkItems one reduce-copy kernel over the whole message runs with rate limited peer writes, which avoids the collapse of two-way EU peer writes and shows the peak bandwidth of the link. The best count is just below the collapse and depends on the system. |
|
✔️ | ❌ |
| UsmEuCopyBidirectionalWriteChunked | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes in both directions at the same time, each device writing to the other. The copy kernel from p2p_benchmark_reduce_copy.cl copies the source buffer to the peer. It is launched once per chunk of chunkSize on an in-order immediate command list of a compute engine, so the peer writes in flight are limited to about one chunk. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. With useEvents the time of a copy is measured from the start of its first chunk to the end of its last chunk. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmEuCopyBidirectionalWriteThrottled | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes in both directions at the same time, each device writing to the other. The copy kernel from p2p_benchmark_copy_throttled.cl copies the source buffer to the peer with throttledWorkItems work-items on a compute engine. The work-items loop over the buffer and after every iteration one thread per work-group pauses while the work-group waits on a barrier, so the work-item count sets the rate of the peer writes. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. The best count depends on the system. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmEuCopyWriteChunked | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes from the local device to the peer device. The copy kernel from p2p_benchmark_reduce_copy.cl copies the source buffer to the peer. It is launched once per chunk of chunkSize on an in-order immediate command list of a compute engine, so the peer writes in flight are limited to about one chunk. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. With useEvents the time of a copy is measured from the start of its first chunk to the end of its last chunk. |
|
✔️ | ❌ |
| UsmEuCopyWriteThrottled | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes from the local device to the peer device. The copy kernel from p2p_benchmark_copy_throttled.cl copies the source buffer to the peer with throttledWorkItems work-items on a compute engine. The work-items loop over the buffer and after every iteration one thread per work-group pauses while the work-group waits on a barrier, so the work-item count sets the rate of the peer writes. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. The best count depends on the system. |
|
✔️ | ❌ |
| UsmEuReduceCopyBidirectionalWriteChunked | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes in both directions at the same time, each device writing to the other. The reduce-copy kernel from p2p_benchmark_reduce_copy.cl computes out1 = in1 + in2 in local device memory and writes out1 to the peer. It is launched once per chunk of chunkSize on an in-order immediate command list of a compute engine, so the peer writes in flight are limited to about one chunk. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. With useEvents the time of a copy is measured from the start of its first chunk to the end of its last chunk. The copies are released together by one host-signalled event. Reports each copy and 'AllCopies', the bytes of both copies divided by the time until the last copy completes, which is always measured with the CPU timer. |
|
✔️ | ❌ |
| UsmEuReduceCopyWriteChunked | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes from the local device to the peer device. The reduce-copy kernel from p2p_benchmark_reduce_copy.cl computes out1 = in1 + in2 in local device memory and writes out1 to the peer. It is launched once per chunk of chunkSize on an in-order immediate command list of a compute engine, so the peer writes in flight are limited to about one chunk. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. With useEvents the time of a copy is measured from the start of its first chunk to the end of its last chunk. |
|
✔️ | ❌ |
| UsmEuReduceCopyWriteThrottled | allocates unified device memory buffers on two root devices and measures the bandwidth of EU writes from the local device to the peer device. The reduce-copy kernel from p2p_benchmark_reduce_copy_throttled.cl computes out1 = in1 + in2 in local device memory and writes out1 to the peer with throttledWorkItems work-items on a compute engine. The work-items loop over the buffer and after every iteration one thread per work-group pauses while the work-group waits on a barrier, so the work-item count sets the rate of the peer writes. Limiting the data in flight avoids the bandwidth collapse of concurrent peer writes on some systems. The best count depends on the system. |
|
✔️ | ❌ |
| UsmImmediateCopyMultipleBlits | allocates two unified device memory buffers on separate devices and performs a copy between sections (or chunks) of these using a different copy engine with an immediate command list and measures bandwidth. Test first checks for P2P capabilities in the target platform before submitting the copy. Results for each individual blitter engine is measured using GPU-based timings and reported separately. Total bandwidths are calculated by dividing the total buffer size by the worst result from all engines. Division of work among blitters is not always even - if main copy engine is specified (rightmost bit in --bliters argument), it gets a half of the buffer and the rest is divided between remaining copy engines. Otherwise the division is even. |
|
✔️ | ❌ |
Page Fault Benchmark is a set of tests aimed at measuring bandwidth of memory migration.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| NonUsmCopy | Measures time for non usm transfers and further potential host updates, updates/reallocates memory on the host between copies, uses immediate command lists and copy offload |
|
✔️ | ❌ |
| NonUsmStreamMemory | Streams memory inside of kernel in a fashion described by 'type'. Copy means one memory location is read from and the second one is written to. Triad means two buffers are read and one is written to. In read and write memory is only read or written to. With --verify, Read also stores one element per 256 work groups (--verificationMode=light) or every element (--verificationMode=complete) so the output can be checked. |
|
✔️ | ❌ |
| UsmSharedMigrateCpu | allocates a unified shared memory buffer and measures bandwidth for kernel that must migrate resource from GPU to CPU |
|
✔️ | ✔️ |
| UsmSharedMigrateGpu | allocates a unified shared memory buffer and measures bandwidth for kernel that must migrate resource from CPU to GPU |
|
✔️ | ✔️ |
| UsmSharedMigrateGpuForFill | allocates a unified shared memory buffer and measures bandwidth for memory fill operation that must migrate resource from CPU to GPU |
|
✔️ | ✔️ |
Record and Replay Benchmark is a set of tests aimed at measuring performance of recording and execution of commandlist graphs.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| RecordGraph | measures overhead of recording a graph. |
|
✔️ | ❌ |
Torch Benchmark is a set of tests aimed at measuring performance of workloads generated by PyTorch.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| KernelSubmitEventRecordQuery | Measures the time to query status of completed event, multiple times. |
|
✔️ | ❌ |
| KernelSubmitEventRecordWait | Measures the time taken to record an event for a submitted kernel, and waiting for this kernel to complete. |
|
✔️ | ❌ |
| KernelSubmitGraphMultiQueue | Measures the performance of submission + synchronization of kernels using a captured command graph on multiple queues. |
|
✔️ | ❌ |
| KernelSubmitGraphSingleQueue | Measures the performance of batches of submission + synchronization of kernels using a captured command graph on a single in-order queue. |
|
✔️ | ❌ |
| KernelSubmitGraphVllmMock | Measures the overhead of SYCL graph submission using mock kernels that represent the computation of Llama-3.2-1B model with the exception that gemm kernel is not included. The kernels do not perform any real computation but have similar launch parameters and resource usage as the actual kernels used in the model. |
|
✔️ | ❌ |
| KernelSubmitLinearKernelSize | Measures submit with linear kernel size. |
|
✔️ | ❌ |
| KernelSubmitMemoryReuse | Measures submit kernel with memory reuse. |
|
✔️ | ❌ |
| KernelSubmitMultiQueue | Measures submit kernel from 2 queues. |
|
✔️ | ❌ |
| KernelSubmitSingleQueue | Measures time spent on executing simple math kernels. |
|
✔️ | ❌ |
| KernelSubmitSlmSize | Measures submit with SLM size specified. |
|
✔️ | ❌ |
Ulls Benchmark is a set of tests aimed at measuring Ultra Low Latency Submission (ULLS) performance impact.
| Test name | Description | Params | L0 | OCL |
|---|---|---|---|---|
| BestSubmission | enqueues a system memory write via PIPE_CONTROL and measures when update becomes visible on the CPU. | ✔️ | ❌ | |
| BestWalkerNthCommandListSubmission | enqueues single kernel on n command lists, which updates system memory location and then busy-loops on CPU until the update of the kernel of nth command list becomes visible. This is L0 only test. |
|
✔️ | ❌ |
| BestWalkerNthSubmission | enqueues n kernels, which updates system memory location and then busy-loops on CPU until the update of nth kernel becomes visible. |
|
✔️ | ❌ |
| BestWalkerNthSubmissionImmediate | enqueues n kernels, which updates system memory location and then busy-loops on CPU until the update of nth kernel becomes visible. Kernel is enqueued using low-latency immediate command list, so the test is LevelZero-specific. |
|
✔️ | ❌ |
| BestWalkerSubmission | enqueues kernel, which updates system memory location and then busy-loops on CPU until the update becomes visible. | ✔️ | ✔️ | |
| BestWalkerSubmissionImmediate | enqueues kernel, which updates system memory location and then busy-loops on CPU until the update becomes visible. Kernel is enqueued using low-latency immediate command list, so the test is LevelZero-specific. | ✔️ | ❌ | |
| BestWalkerSubmissionImmediateMultiCmdlists | Append N kernels on N cmdlists, which updates system memory locations and then waits using busy-loop on CPU until the update becomes visible. Kernels are appended using immediate command lists.Amount of command lists is specified by cmdlistCount. |
|
✔️ | ❌ |
| CompletionLatency | enqueues system memory write and measures time between the moment, when update is visible on CPU and the moment, when synchronizing call returns. | ✔️ | ❌ | |
| CopyPriorityPreemption | submits a long memory copy on normal-priority queue, then a short copy on high-priority queue, and measures GPU time from normal-priority copy start to high-priority copy end. |
|
✔️ | ❌ |
| CopySubmissionEvents | enqueues 4 byte copy to copy engine and return submission delta which is time between host API call and copy engine start |
|
✔️ | ✔️ |
| EmptyKernel | enqueues empty kernel and measures time to launch it and wait for it on CPU, thus measuring walker spawn time. |
|
✔️ | ✔️ |
| EmptyKernelImmediate | enqueues empty kernel and measures time to launch it using immediate command list and wait for it on CPU, thus measuring walker spawn time. |
|
✔️ | ❌ |
| EmptyKernelsWithGlobalTimer | submits multiple kernels with signal events and barriers in single command lists, uses global timestamps to get total time of their execution |
|
✔️ | ❌ |
| EnqueueBarrierWithEmptyWaitlist | enqueues kernel with barriers with empty waitlists inbetween, waiting on the last barriers event |
|
❌ | ✔️ |
| KernelSwitch | measures time from end of one kernel till start of next kernel |
|
✔️ | ✔️ |
| KernelSwitchFill | measures time from end of one kernel till start of next fill kernel |
|
✔️ | ✔️ |
| KernelSwitchImm | measures time from end of one kernel till start of next kernel using immediate command lists |
|
✔️ | ❌ |
| KernelSwitchPriority | submits kernels on queues with different priorities and measures kernel switch latency on single queue. |
|
✔️ | ❌ |
| KernelSwitchPriorityImm | submits kernels on queues with different priorities and measures kernel switch latency on single queue on immediate cmd lists. |
|
✔️ | ❌ |
| KernelWithWork | measures time required to run a GPU kernel which assigns constant values to elements of a buffer. Each thread assigns one value. |
|
✔️ | ✔️ |
| KernelWithWorkImmediate | measures time required to run a GPU kernel which assigns constant values to elements of a buffer using immediate command list. Each thread assigns one value. |
|
✔️ | ❌ |
| KernelWithWorkPeriodic | measures average time required to run a GPU kernel which assigns constant values to elements of a buffer. Each thread assigns one value. Kernel is run multiple times with a set delay between submissions. |
|
✔️ | ❌ |
| MultiArgumentKernelSwitchLatency | measures time from end of one kernel till start of next kernel with different argument patterns |
|
✔️ | ❌ |
| MultiKernelExecution | submits multiple kernel in single command lists, measures total time of their execution |
|
✔️ | ❌ |
| MultiQueueExecution | submits empty kernels on queues with different priorities and measures total execution time of both queues. |
|
✔️ | ❌ |
| MultiQueueSubmission | enqueues kernel on multiple command queues |
|
✔️ | ✔️ |
| MultipleImmediateWithDependencies | Creates N immediate command lists. Submits kernels in order to each of thoseEach kernel has a dependency on previous oneSubmissions are small to allows concurrent executionMeassures time from scheduling start, till all command lists are completed |
|
✔️ | ❌ |
| NewResourcesSubmissionDevice | enqueues kernel that uses a buffer placed in device memory to measure resource preparation time. The resource is destroyed and recreated for each iteration to ensure it is a different memory allocation. |
|
✔️ | ✔️ |
| NewResourcesSubmissionHost | enqueues kernel that uses a buffer placed in host memory to measure resource preparation time. The resource is destroyed and recreated for each iteration to ensure it is a different memory allocation. |
|
✔️ | ✔️ |
| NewResourcesWithGpuAccess | enqueues kernel that accesses an entire buffer placed in device memory to measure resource preparation time. The resource is destroyed and recreated for each iteration to ensure it is a different memory allocation. |
|
✔️ | ✔️ |
| QueueConcurrency | Submits multiple kernels to out of order queue returning events. There is a sequence of long kernel, short kernel, wait for short kernel Then calls synchronization and meassures performance |
|
❌ | ✔️ |
| QueuePriorities | Uses queues with different priorities to meassure submission and context switch latencies |
|
❌ | ✔️ |
| QueueSwitch | creates multiple queues, creates dependencies with events between those and measures switch time |
|
✔️ | ❌ |
| RoundTripSubmission | enqueues kernel which updates system memory location and waits for it with a synchronizing API. | ✔️ | ✔️ | |
| UniqueKernelSwitchLatency | measures time to switch between unique kernels in a command list |
|
✔️ | ❌ |
| UsmSharedFirstCpuAccess | allocates a unified shared memory buffer and measures time to access it on CPU after creation. |
|
✔️ | ✔️ |
| UsmSharedFirstGpuAccess | allocates a unified shared memory buffer and measures time to access it on GPU after creation. |
|
✔️ | ✔️ |
| WalkerCompletionLatency | enqueues a kernel writing to system memory and measures time between the moment when update is visible on CPU and the moment when synchronizing call returns |
|
✔️ | ✔️ |
| WalkerSubmissionEvents | enqueues an empty kernel with GPU-side profiling and checks delta between queue time and start time. | ✔️ | ✔️ | |
| WriteLatency | unblocks event on GPU, then waits for timestamp being written. | ✔️ | ❌ | |
| ZMultiEngineSubmissionEvents | creates one immediate command list for each engine from ccsMask and bcsMask, submits one command to all lists, and measures the submit delta. The delta is the time from the host API call to engine start. The test reports the delta for each engine and the worst value. If useHpCopyEngine is set, the test adds one high-priority copy engine list. |
|
✔️ | ❌ |
| ZMultiQueueGraphSubmission | replays a graph that forks from CCS0 to the engines from ccsMask and bcsMask, and measures the start latency of each branch and the CPU time of the replay call. |
|
✔️ | ❌ |