DPC++ Runtime
Runtime libraries for oneAPI DPC++
pi_unified_runtime.cpp
Go to the documentation of this file.
1 //===--- pi_unified_runtime.cpp - Unified Runtime PI Plugin -----------==//
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-exception
6 //
7 //===------------------------------------------------------------------===//
8 
9 #include <cstring>
10 
11 #include <pi2ur.hpp>
12 #include <pi_unified_runtime.hpp>
13 
14 // Stub function to where all not yet supported PI API are bound
15 static void DieUnsupported() {
16  die("Unified Runtime: functionality is not supported");
17 }
18 
19 // All PI API interfaces are C interfaces
20 extern "C" {
21 __SYCL_EXPORT pi_result piPlatformsGet(pi_uint32 num_entries,
22  pi_platform *platforms,
23  pi_uint32 *num_platforms) {
24  return pi2ur::piPlatformsGet(num_entries, platforms, num_platforms);
25 }
26 
27 __SYCL_EXPORT pi_result piPlatformGetInfo(pi_platform Platform,
28  pi_platform_info ParamName,
29  size_t ParamValueSize,
30  void *ParamValue,
31  size_t *ParamValueSizeRet) {
32  return pi2ur::piPlatformGetInfo(Platform, ParamName, ParamValueSize,
33  ParamValue, ParamValueSizeRet);
34 }
35 
36 __SYCL_EXPORT pi_result piDevicesGet(pi_platform Platform,
37  pi_device_type DeviceType,
38  pi_uint32 NumEntries, pi_device *Devices,
39  pi_uint32 *NumDevices) {
40  return pi2ur::piDevicesGet(Platform, DeviceType, NumEntries, Devices,
41  NumDevices);
42 }
43 
44 __SYCL_EXPORT pi_result piDeviceRetain(pi_device Device) {
45  return pi2ur::piDeviceRetain(Device);
46 }
47 
48 __SYCL_EXPORT pi_result piDeviceRelease(pi_device Device) {
49  return pi2ur::piDeviceRelease(Device);
50 }
51 
52 __SYCL_EXPORT pi_result piDeviceGetInfo(pi_device Device,
53  pi_device_info ParamName,
54  size_t ParamValueSize, void *ParamValue,
55  size_t *ParamValueSizeRet) {
56  return pi2ur::piDeviceGetInfo(Device, ParamName, ParamValueSize, ParamValue,
57  ParamValueSizeRet);
58 }
59 
61  pi_device Device, const pi_device_partition_property *Properties,
62  pi_uint32 NumDevices, pi_device *OutDevices, pi_uint32 *OutNumDevices) {
63  return pi2ur::piDevicePartition(Device, Properties, NumDevices, OutDevices,
64  OutNumDevices);
65 }
66 
67 // Stub for the not yet supported API
69  pi_uint32, pi_uint32 *) {
70  return PI_ERROR_INVALID_BINARY;
71 }
72 
73 // This interface is not in Unified Runtime currently
74 __SYCL_EXPORT pi_result piTearDown(void *) { return PI_SUCCESS; }
75 
76 // This interface is not in Unified Runtime currently
77 __SYCL_EXPORT pi_result piPluginInit(pi_plugin *PluginInit) {
78  PI_ASSERT(PluginInit, PI_ERROR_INVALID_VALUE);
79 
81 
82  // Check that the major version matches in PiVersion and SupportedVersion
84 
85  // TODO: handle versioning/targets properly.
86  size_t PluginVersionSize = sizeof(PluginInit->PluginVersion);
87 
89  PluginVersionSize,
90  PI_ERROR_INVALID_VALUE);
91 
92  strncpy(PluginInit->PluginVersion, SupportedVersion, PluginVersionSize);
93 
94  // Bind interfaces that are already supported and "die" for unsupported ones
95 #define _PI_API(api) \
96  (PluginInit->PiFunctionTable).api = (decltype(&::api))(&DieUnsupported);
97 #include <sycl/detail/pi.def>
98 
99 #define _PI_API(api) \
100  (PluginInit->PiFunctionTable).api = (decltype(&::api))(&api);
101 
111 
112  return PI_SUCCESS;
113 }
114 
115 } // extern "C
piextDeviceSelectBinary
pi_result piextDeviceSelectBinary(pi_device, pi_device_binary *, pi_uint32, pi_uint32 *)
Selects the most appropriate device binary based on runtime information and the IR characteristics.
Definition: pi_unified_runtime.cpp:68
piPlatformGetInfo
pi_result piPlatformGetInfo(pi_platform Platform, pi_platform_info ParamName, size_t ParamValueSize, void *ParamValue, size_t *ParamValueSizeRet)
Definition: pi_unified_runtime.cpp:27
_pi_plugin
Definition: pi.h:1992
_pi_plugin::PluginVersion
char PluginVersion[20]
Definition: pi.h:2002
_pi_result
_pi_result
Definition: pi.h:140
_pi_device_type
_pi_device_type
Definition: pi.h:187
_PI_UNIFIED_RUNTIME_PLUGIN_VERSION_STRING
#define _PI_UNIFIED_RUNTIME_PLUGIN_VERSION_STRING
Definition: pi_unified_runtime.hpp:14
_pi_platform
A PI platform stores all known PI devices, in the CUDA plugin this is just a vector of available devi...
Definition: pi_cuda.hpp:74
_pi_device_info
_pi_device_info
Definition: pi.h:209
pi2ur::piDevicesGet
pi_result piDevicesGet(pi_platform Platform, pi_device_type DeviceType, pi_uint32 NumEntries, pi_device *Devices, pi_uint32 *NumDevices)
Definition: pi2ur.hpp:314
piPlatformsGet
pi_result piPlatformsGet(pi_uint32 num_entries, pi_platform *platforms, pi_uint32 *num_platforms)
Definition: pi_unified_runtime.cpp:21
_pi_plugin::PiVersion
char PiVersion[20]
Definition: pi.h:2000
_PI_API
#define _PI_API(api)
pi2ur::piDevicePartition
pi_result piDevicePartition(pi_device Device, const pi_device_partition_property *Properties, pi_uint32 NumEntries, pi_device *SubDevices, pi_uint32 *NumSubDevices)
Definition: pi2ur.hpp:538
SupportedVersion
const char SupportedVersion[]
Definition: pi_cuda.cpp:5582
pi2ur::piPlatformsGet
pi_result piPlatformsGet(pi_uint32 num_entries, pi_platform *platforms, pi_uint32 *num_platforms)
Definition: pi2ur.hpp:279
piTearDown
pi_result piTearDown(void *)
API to notify that the plugin should clean up its resources.
Definition: pi_unified_runtime.cpp:74
pi_uint32
uint32_t pi_uint32
Definition: pi.h:129
piDevicePartition
pi_result piDevicePartition(pi_device Device, const pi_device_partition_property *Properties, pi_uint32 NumDevices, pi_device *OutDevices, pi_uint32 *OutNumDevices)
Definition: pi_unified_runtime.cpp:60
pi_device_binary_struct
This struct is a record of the device binary information.
Definition: pi.h:842
pi2ur::piDeviceRelease
pi_result piDeviceRelease(pi_device Device)
Definition: pi2ur.hpp:344
pi2ur.hpp
pi2ur::piDeviceRetain
pi_result piDeviceRetain(pi_device Device)
Definition: pi2ur.hpp:338
piDeviceRetain
pi_result piDeviceRetain(pi_device Device)
Definition: pi_unified_runtime.cpp:44
pi_unified_runtime.hpp
DieUnsupported
static void DieUnsupported()
Definition: pi_unified_runtime.cpp:15
sycl::_V1::detail::pi::die
void die(const char *Message)
Definition: pi.cpp:533
_PI_PLUGIN_VERSION_CHECK
#define _PI_PLUGIN_VERSION_CHECK(PI_API_VERSION, PI_PLUGIN_VERSION)
Definition: pi.h:107
_pi_platform_info
_pi_platform_info
Definition: pi.h:155
PI_ASSERT
#define PI_ASSERT(condition, error)
Definition: ur.hpp:240
piPluginInit
pi_result piPluginInit(pi_plugin *PluginInit)
Definition: pi_unified_runtime.cpp:77
pi2ur::piDeviceGetInfo
pi_result piDeviceGetInfo(pi_device Device, pi_device_info ParamName, size_t ParamValueSize, void *ParamValue, size_t *ParamValueSizeRet)
Returns requested info for provided native device Return PI_DEVICE_INFO_EXTENSION_DEVICELIB_ASSERT fo...
Definition: pi2ur.hpp:352
piDevicesGet
pi_result piDevicesGet(pi_platform Platform, pi_device_type DeviceType, pi_uint32 NumEntries, pi_device *Devices, pi_uint32 *NumDevices)
Definition: pi_unified_runtime.cpp:36
piDeviceRelease
pi_result piDeviceRelease(pi_device Device)
Definition: pi_unified_runtime.cpp:48
pi_device_partition_property
intptr_t pi_device_partition_property
Definition: pi.h:674
piDeviceGetInfo
pi_result piDeviceGetInfo(pi_device Device, pi_device_info ParamName, size_t ParamValueSize, void *ParamValue, size_t *ParamValueSizeRet)
Returns requested info for provided native device Return PI_DEVICE_INFO_EXTENSION_DEVICELIB_ASSERT fo...
Definition: pi_unified_runtime.cpp:52
_pi_device
PI device mapping to a CUdevice.
Definition: pi_cuda.hpp:83
pi2ur::piPlatformGetInfo
pi_result piPlatformGetInfo(pi_platform platform, pi_platform_info ParamName, size_t ParamValueSize, void *ParamValue, size_t *ParamValueSizeRet)
Definition: pi2ur.hpp:288