[Offload] Add ol_dimensions_t and convert ranges from size_t -> uint32_t (#143901)

This is a three element x, y, z size_t vector that can be used any place
where a 3D vector is required. This ensures that all vectors across
liboffload are the same and don't require any resizing/reordering
dances.
This commit is contained in:
Ross Brunton
2025-06-12 15:59:59 +01:00
committed by GitHub
parent 5c1a021f7f
commit 4f60321ca1
4 changed files with 22 additions and 21 deletions

View File

@@ -148,6 +148,16 @@ def : Struct {
];
}
def : Struct {
let name = "ol_dimensions_t";
let desc = "A three element vector";
let members = [
StructMember<"uint32_t", "x", "X">,
StructMember<"uint32_t", "y", "Y">,
StructMember<"uint32_t", "z", "Z">,
];
}
def : Function {
let name = "olInit";
let desc = "Perform initialization of the Offload library and plugins";

View File

@@ -29,12 +29,8 @@ def : Struct {
let desc = "Size-related arguments for a kernel launch.";
let members = [
StructMember<"size_t", "Dimensions", "Number of work dimensions">,
StructMember<"size_t", "NumGroupsX", "Number of work groups on the X dimension">,
StructMember<"size_t", "NumGroupsY", "Number of work groups on the Y dimension">,
StructMember<"size_t", "NumGroupsZ", "Number of work groups on the Z dimension">,
StructMember<"size_t", "GroupSizeX", "Size of a work group on the X dimension.">,
StructMember<"size_t", "GroupSizeY", "Size of a work group on the Y dimension.">,
StructMember<"size_t", "GroupSizeZ", "Size of a work group on the Z dimension.">,
StructMember<"struct ol_dimensions_t", "NumGroups", "Number of work groups in each dimension">,
StructMember<"struct ol_dimensions_t", "GroupSize", "Size of a work group in each dimension">,
StructMember<"size_t", "DynSharedMemory", "Size of dynamic shared memory in bytes.">
];
}

View File

@@ -499,12 +499,12 @@ Error olLaunchKernel_impl(ol_queue_handle_t Queue, ol_device_handle_t Device,
auto *QueueImpl = Queue ? Queue->AsyncInfo : nullptr;
AsyncInfoWrapperTy AsyncInfoWrapper(*DeviceImpl, QueueImpl);
KernelArgsTy LaunchArgs{};
LaunchArgs.NumTeams[0] = LaunchSizeArgs->NumGroupsX;
LaunchArgs.NumTeams[1] = LaunchSizeArgs->NumGroupsY;
LaunchArgs.NumTeams[2] = LaunchSizeArgs->NumGroupsZ;
LaunchArgs.ThreadLimit[0] = LaunchSizeArgs->GroupSizeX;
LaunchArgs.ThreadLimit[1] = LaunchSizeArgs->GroupSizeY;
LaunchArgs.ThreadLimit[2] = LaunchSizeArgs->GroupSizeZ;
LaunchArgs.NumTeams[0] = LaunchSizeArgs->NumGroups.x;
LaunchArgs.NumTeams[1] = LaunchSizeArgs->NumGroups.y;
LaunchArgs.NumTeams[2] = LaunchSizeArgs->NumGroups.z;
LaunchArgs.ThreadLimit[0] = LaunchSizeArgs->GroupSize.x;
LaunchArgs.ThreadLimit[1] = LaunchSizeArgs->GroupSize.y;
LaunchArgs.ThreadLimit[2] = LaunchSizeArgs->GroupSize.z;
LaunchArgs.DynCGroupMem = LaunchSizeArgs->DynSharedMemory;
KernelLaunchParamsTy Params;

View File

@@ -19,13 +19,8 @@ struct LaunchKernelTestBase : OffloadQueueTest {
DeviceBin->getBufferSize(), &Program));
ASSERT_SUCCESS(olGetKernel(Program, kernel, &Kernel));
LaunchArgs.Dimensions = 1;
LaunchArgs.GroupSizeX = 64;
LaunchArgs.GroupSizeY = 1;
LaunchArgs.GroupSizeZ = 1;
LaunchArgs.NumGroupsX = 1;
LaunchArgs.NumGroupsY = 1;
LaunchArgs.NumGroupsZ = 1;
LaunchArgs.GroupSize = {64, 1, 1};
LaunchArgs.NumGroups = {1, 1, 1};
LaunchArgs.DynSharedMemory = 0;
}
@@ -60,7 +55,7 @@ OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE(olLaunchKernelNoArgsTest);
TEST_P(olLaunchKernelTest, Success) {
void *Mem;
ASSERT_SUCCESS(olMemAlloc(Device, OL_ALLOC_TYPE_MANAGED,
LaunchArgs.GroupSizeX * sizeof(uint32_t), &Mem));
LaunchArgs.GroupSize.x * sizeof(uint32_t), &Mem));
struct {
void *Mem;
} Args{Mem};
@@ -88,7 +83,7 @@ TEST_P(olLaunchKernelNoArgsTest, Success) {
TEST_P(olLaunchKernelTest, SuccessSynchronous) {
void *Mem;
ASSERT_SUCCESS(olMemAlloc(Device, OL_ALLOC_TYPE_MANAGED,
LaunchArgs.GroupSizeX * sizeof(uint32_t), &Mem));
LaunchArgs.GroupSize.x * sizeof(uint32_t), &Mem));
struct {
void *Mem;