[all-commits] [llvm/llvm-project] d90634: [offload] support arbitrary memoryFill pattern siz...

311Volt via All-commits all-commits at lists.llvm.org
Mon Jul 20 04:28:54 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: d90634dc185da79a8eb6a993c28614f4788e368e
      https://github.com/llvm/llvm-project/commit/d90634dc185da79a8eb6a993c28614f4788e368e
  Author: 311Volt <41923095+311Volt at users.noreply.github.com>
  Date:   2026-07-20 (Mon, 20 Jul 2026)

  Changed paths:
    M offload/liboffload/API/Memory.td
    M offload/plugins-nextgen/level_zero/include/L0Device.h
    M offload/plugins-nextgen/level_zero/include/L0Queue.h
    M offload/plugins-nextgen/level_zero/src/L0Device.cpp
    M offload/plugins-nextgen/level_zero/src/L0Queue.cpp
    M offload/unittests/OffloadAPI/memory/olMemFill.cpp

  Log Message:
  -----------
  [offload] support arbitrary memoryFill pattern sizes in L0 plugin (#209724)

Even though L0, CUDA and HSA do not directly support filling memory
regions with non-power-of-two-sized patterns, plugins explicitly allow
for such fills by falling back to a slow path whenever a direct API call
is not possible.

The Level Zero plugin is the odd one out, forwarding directly to
`zeCommandListAppendMemoryFill`. This fails for non-power-of-two
patterns, causing unit tests for `olMemFill` to fail when run on L0.

This PR adds fallbacks in L0 plugin's `memoryFill` implementation to
support arbitrary pattern sizes:
- if all pattern bytes are the same, substitute `1` for `patternSize`
and proceed with the native fill
- if memory is host-accessible (host or shared alloc), then simply
`std::copy_n` the pattern
- if memory is device-only, upload a seed to the device, and
`memoryCopy` O(log n) times, doubling the pattern each time, until the
entire region is filled. The seed is the input pattern, but extended on
the host to 1-2KiB to potentially eliminate several small `memoryCopy`
calls that would otherwise be almost pure overhead.

Conceptually, this approach has better worst-case overhead than the one
found in the CUDA plugin (decompose the pattern to then run multiple
strided memsets) and the AMDGPU one (call `pushMemoryCopyH2DAsync` with
the pattern, setting `NumTimes`). Aligning the fallback fill approaches
is outside the scope of this PR, however - the main intent is to fix the
unit test failures.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list