Skip to content

[Bench] Add liboffload memcpy, allocation and fill benchmarks to CI - #23699

Merged
kswiecicki merged 5 commits into
intel:syclfrom
311Volt:bench-add-q4-ol
Nov 4, 2026
Merged

kswiecicki merged 5 commits into
intel:syclfrom
311Volt:bench-add-q4-ol

Conversation

@311Volt

@311Volt 311Volt commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Liboffload implementations of QueueMemcpy, QueueInOrderMemcpy, UsmFillImmediate, UsmMemoryAllocation and UsmBatchMemoryAllocation have been merged to Compute Benchmarks. Run the newly-merged liboffload implementations of the memcpy, USM allocation and USM fill Compute Benchmarks in the "SYCL Run Benchmarks" nightly job, next to their existing baselines if applicable.

For the fill and memcpy benchmarks, add Offload instances against existing SYCL/UR baselines where possible. Additionally, add L0 instances for UsmMemoryAllocation and QueueInOrderMemcpy, leveraging previously existing Compute Benchmarks implementations, to better gauge API overhead of the other higher-level APIs. Rewrite the memcpy classes to no longer hardcode SYCL and be parametrized on the API instead.

Add benchmark instances for UsmFillImmediate - L0 and OL with a 4-byte pattern, and OL with a 3-byte pattern, on a 4 KiB and a 512 MiB device buffer. The intent is to exercise liboffload's non-pow2 pattern support, which may use a slow path underneath (on L0 plugin it appends O(log n) memcpy commands). Small fills report time in µs, large fills report bandwidth in GB/s.

Bump Compute Benchmarks to de729a5340ac (Oct 30, 2026) to pick up the new liboffload benchmarks. The new version requires --strategy for UsmMemoryAllocation. Pass --strategy=sync, to preserve pre-bump behavior.

Full testing matrix for affected benchmarks after the patch is provided as a PR comment.

@311Volt

311Volt commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Full testing params matrix

  • "T+C" = TIMER + CPU_COUNTER profilers (label suffix CPU count).
  • Results are µs (CPU count: instr), lower is better, except the large fills: GB/s, higher is better.

A. Memcpy: memory_benchmark_{sycl,l0,ol}

QueueMemcpy: --iterations=10000 --sourcePlacement --destinationPlacement --size --profilerType. No L0 implementation.

Runtime src -> dst size profilers status
SYCL Device -> Device 1024 T+C existing
OL Device -> Device 1024 T+C new

QueueInOrderMemcpy. --iterations=10000 --IsCopyOnly=0 --count=100 --withCopyOffload=0 --profilerType, plus --doNotPrintBandwidth on L0.

Runtime src -> dst size profilers status
SYCL Device -> Device 1024 T+C existing
SYCL Host -> Device 1024 T+C existing
L0 Device -> Device 1024 TIMER new
L0 Host -> Device 1024 TIMER new
OL Device -> Device 1024 T+C new
OL Host -> Device 1024 T+C new

Total: 14 instances, 8 new.

B. Alloc: api_overhead_benchmark_{ur,l0,ol}

UsmMemoryAllocation: --iterations=10000 --measureMode=Both --strategy=sync.

Runtime type size status
UR Device 256, 262144 existing
L0 Device 256, 262144 new
OL Device 256, 262144 new

UsmBatchMemoryAllocation: --iterations=1000 --measureMode=Both. No L0 implementation.

Runtime type allocationCount size status
UR Device 128 256, 16384, 131072 existing
OL Device 128 256, 16384, 131072 new

Total: 12 instances, 7 new. Groups: UsmMemoryAllocation, UsmBatchMemoryAllocation.

C. Fill: memory_benchmark_{l0,ol} UsmFillImmediate

All rows: --memory=Device --contents=Zeros --patternContents=Random --forceBlitter=0 --useEvents=0. Small rows also pass --doNotPrintBandwidth.

Variant Runtime patternSize small (nominal 4096) large (nominal 536870912) liboffload path
L0 L0 4 4096 536870912 n/a (native L0)
OL OL 4 4096 536870912 native fill
OL non-pow2 OL 3 4095 (truncate 1) 536870913 (pad 1) replicate
size class --iterations metric unit better group
small 10000 time per fill (host-timed, incl. sync) µs lower UsmFillImmediate Device, small fill
large 100 fill bandwidth (size / host time) GB/s higher UsmFillImmediate Device, large fill

Total: 6 instances, all new.

@311Volt
311Volt marked this pull request as ready for review November 2, 2026 16:21
@311Volt
311Volt requested a review from a team as a code owner November 2, 2026 16:21

@lukaszstolarczuk lukaszstolarczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@lukaszstolarczuk lukaszstolarczuk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@kswiecicki
kswiecicki merged commit 9faa1f6 into intel:sycl Nov 4, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants