brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 2f5692a Raw
60 lines · plain
1//===-- Kernel.td - Kernel definitions for Offload ---------*- tablegen -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file contains Offload API definitions related to kernels10//11//===----------------------------------------------------------------------===//12 13def ol_kernel_launch_size_args_t : Struct {14    let desc = "Size-related arguments for a kernel launch.";15    let members = [16        StructMember<"size_t", "Dimensions", "Number of work dimensions">,17        StructMember<"struct ol_dimensions_t", "NumGroups", "Number of work groups in each dimension">,18        StructMember<"struct ol_dimensions_t", "GroupSize", "Size of a work group in each dimension">,19        StructMember<"size_t", "DynSharedMemory", "Size of dynamic shared memory in bytes.">20    ];21}22 23def olLaunchKernel : Function {24    let desc = "Enqueue a kernel launch with the specified size and parameters.";25    let details = [26        "If a queue is not specified, kernel execution happens synchronously",27        "ArgumentsData may be set to NULL (to indicate no parameters)"28    ];29    let params = [30        Param<"ol_queue_handle_t", "Queue", "handle of the queue", PARAM_IN_OPTIONAL>,31        Param<"ol_device_handle_t", "Device", "handle of the device to execute on", PARAM_IN>,32        Param<"ol_symbol_handle_t", "Kernel", "handle of the kernel", PARAM_IN>,33        Param<"const void*", "ArgumentsData", "pointer to the kernel argument struct", PARAM_IN_OPTIONAL>,34        Param<"size_t", "ArgumentsSize", "size of the kernel argument struct", PARAM_IN>,35        Param<"const ol_kernel_launch_size_args_t*", "LaunchSizeArgs", "pointer to the struct containing launch size parameters", PARAM_IN>,36    ];37    let returns = [38        Return<"OL_ERRC_INVALID_ARGUMENT", ["`ArgumentsSize > 0 && ArgumentsData == NULL`"]>,39        Return<"OL_ERRC_INVALID_DEVICE", ["If Queue is non-null but does not belong to Device"]>,40        Return<"OL_ERRC_SYMBOL_KIND", ["The provided symbol is not a kernel"]>,41    ];42}43 44def olCalculateOptimalOccupancy : Function {45    let desc = "Given dynamic memory size, query the device for a workgroup size that will result in optimal occupancy.";46    let details = [47        "For most devices, this will be the largest workgroup size that will result in all work items fitting on the device at once.",48    ];49    let params = [50        Param<"ol_device_handle_t", "Device", "device intended to run the kernel", PARAM_IN>,51        Param<"ol_symbol_handle_t", "Kernel", "handle of the kernel", PARAM_IN>,52        Param<"size_t", "SharedMemory", "dynamic shared memory required per work item in bytes", PARAM_IN>,53        Param<"size_t*", "GroupSize", "optimal block size", PARAM_OUT>54    ];55    let returns = [56        Return<"OL_ERRC_SYMBOL_KIND", ["The provided symbol is not a kernel"]>,57        Return<"OL_ERRC_UNSUPPORTED", ["The backend cannot provide this information"]>,58    ];59}60