DPC++ Runtime
Runtime libraries for oneAPI DPC++
|
|
Go to the documentation of this file.
30 #include <unordered_map>
31 #include <unordered_set>
48 inline namespace _V1 {
53 const RTDeviceBinaryImage &BinImages);
54 std::optional<sycl::exception>
56 const RTDeviceBinaryImage &BinImages);
96 bool JITCompilationIsRequired =
false);
99 const std::unordered_set<RTDeviceBinaryImage *> &ImagesToVerify,
101 bool JITCompilationIsRequired =
false);
124 std::pair<sycl::detail::pi::PiProgram, bool>
127 const std::string &CompileAndLinkOptions,
144 const std::string &KernelName,
const program_impl *Prg =
nullptr,
145 bool JITCompilationIsRequired =
false);
149 const std::string &KernelName,
151 bool JITCompilationIsRequired =
false);
157 const std::string &KernelName,
const program_impl *Prg);
191 const std::string &KernelName);
208 const char *UniqueId);
219 std::vector<DeviceGlobalMapEntry *>
221 bool ExcludeDeviceImageScopeDecorated =
false);
241 const context &Ctx,
const std::vector<device> &Devs,
242 bundle_state TargetState,
const std::vector<kernel_id> &KernelIDs = {});
251 std::vector<device_image_plain>
258 std::vector<device_image_plain>
266 std::vector<device_image_plain>
268 const std::vector<kernel_id> &KernelIDs,
274 const std::vector<device> &Devs,
280 const std::vector<device> &Devs,
286 const std::vector<device> &Devs,
289 std::tuple<sycl::detail::pi::PiKernel, std::mutex *, const KernelArgMask *>
299 std::set<RTDeviceBinaryImage *>
307 std::unique_ptr<remove_pointer_t<sycl::detail::pi::PiProgram>,
310 const std::string &CompileOptions,
311 const std::string &LinkOptions,
313 uint32_t DeviceLibReqMask);
322 using RTDeviceBinaryImageUPtr = std::unique_ptr<RTDeviceBinaryImage>;
329 std::unordered_map<std::string, kernel_id> m_KernelName2KernelIDs;
335 std::unordered_multimap<kernel_id, RTDeviceBinaryImage *>
336 m_KernelIDs2BinImage;
344 std::shared_ptr<std::vector<kernel_id>>>
351 std::mutex m_KernelIDsMutex;
359 std::unordered_multimap<std::string, RTDeviceBinaryImage *> m_ServiceKernels;
364 std::unordered_set<std::string> m_ExportedSymbols;
368 std::unordered_set<RTDeviceBinaryImageUPtr> m_DeviceImages;
372 std::unordered_map<std::string, kernel_id> m_BuiltInKernelIDs;
375 std::mutex m_BuiltInKernelIDsMutex;
390 std::unordered_map<pi::PiProgram, const RTDeviceBinaryImage *> NativePrograms;
393 std::mutex MNativeProgramsMutex;
395 using KernelNameToArgMaskMap = std::unordered_map<std::string, KernelArgMask>;
398 std::unordered_map<const RTDeviceBinaryImage *, KernelNameToArgMaskMap>
399 m_EliminatedKernelArgMasks;
402 bool m_UseSpvFile =
false;
403 RTDeviceBinaryImageUPtr m_SpvFileImage;
405 std::set<std::string> m_KernelUsesAssert;
408 std::unordered_map<std::string, std::unique_ptr<DeviceGlobalMapEntry>>
410 std::unordered_map<const void *, DeviceGlobalMapEntry *> m_Ptr2DeviceGlobal;
413 std::mutex m_DeviceGlobalsMutex;
416 std::unordered_map<std::string, std::unique_ptr<HostPipeMapEntry>>
418 std::unordered_map<const void *, HostPipeMapEntry *> m_Ptr2HostPipe;
421 std::mutex m_HostPipesMutex;
void flushSpecConstants(const program_impl &Prg, pi::PiProgram NativePrg=nullptr, const RTDeviceBinaryImage *Img=nullptr)
Resolves given program to a device binary image and requests the program to flush constants the image...
HostPipeMapEntry * getHostPipeEntry(const std::string &UniqueId)
Objects of the property_list class are containers for the SYCL properties.
device_image_plain compile(const device_image_plain &DeviceImage, const std::vector< device > &Devs, const property_list &PropList)
std::shared_ptr< sycl::detail::context_impl > ContextImplPtr
@ cl_intel_devicelib_complex
bool doesDevSupportDeviceRequirements(const device &Dev, const RTDeviceBinaryImage &Img)
device_image_plain build(const device_image_plain &DeviceImage, const std::vector< device > &Devs, const property_list &PropList)
kernel_id getBuiltInKernelID(const std::string &KernelName)
std::tuple< sycl::detail::pi::PiKernel, std::mutex *, const KernelArgMask *, sycl::detail::pi::PiProgram > getOrCreateKernel(const ContextImplPtr &ContextImpl, const DeviceImplPtr &DeviceImpl, const std::string &KernelName, const program_impl *Prg)
void __sycl_unregister_lib(pi_device_binaries desc)
Executed as a part of current module's (.exe, .dll) static de-initialization.
sycl::detail::pi::PiProgram getBuiltPIProgram(const ContextImplPtr &ContextImpl, const DeviceImplPtr &DeviceImpl, const std::string &KernelName, const program_impl *Prg=nullptr, bool JITCompilationIsRequired=false)
Builds or retrieves from cache a program defining the kernel with given name.
const KernelArgMask * getEliminatedKernelArgMask(pi::PiProgram NativePrg, const std::string &KernelName)
Returns the mask for eliminated kernel arguments for the requested kernel within the native program.
std::vector< device_image_plain > getSYCLDeviceImages(const context &Ctx, const std::vector< device > &Devs, bundle_state State)
std::optional< sycl::exception > checkDevSupportDeviceRequirements(const device &Dev, const RTDeviceBinaryImage &Img)
std::shared_ptr< device_impl > DeviceImplPtr
---— Error handling, matching OpenCL plugin semantics.
This struct is a record of all the device code that may be offloaded.
@ cl_intel_devicelib_imf_bf16
void addImages(pi_device_binaries DeviceImages)
std::vector< device_image_plain > link(const device_image_plain &DeviceImages, const std::vector< device > &Devs, const property_list &PropList)
RTDeviceBinaryImage & getDeviceImage(const std::string &KernelName, const context &Context, const device &Device, bool JITCompilationIsRequired=false)
static ProgramManager & getInstance()
kernel_id getSYCLKernelID(const std::string &KernelName)
pi_result piProgramRelease(pi_program program)
@ cl_intel_devicelib_math
@ cl_intel_devicelib_bfloat16
std::vector< DeviceGlobalMapEntry * > getDeviceGlobalEntries(const std::vector< std::string > &UniqueIds, bool ExcludeDeviceImageScopeDecorated=false)
std::pair< sycl::detail::pi::PiProgram, bool > getOrCreatePIProgram(const RTDeviceBinaryImage &Img, const context &Context, const device &Device, const std::string &CompileAndLinkOptions, SerializedObj SpecConsts)
Creates a PI program using either a cached device code binary if present in the persistent cache or f...
@ cl_intel_devicelib_assert
std::vector< bool > KernelArgMask
uint32_t getDeviceLibReqMask(const RTDeviceBinaryImage &Img)
void __sycl_register_lib(pi_device_binaries desc)
Executed as a part of current module's (.exe, .dll) static initialization.
Objects of the class identify kernel is some kernel_bundle related APIs.
device_image_plain getDeviceImageFromBinaryImage(RTDeviceBinaryImage *BinImage, const context &Ctx, const device &Dev)
bool hasCompatibleImage(const device &Dev)
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
@ cl_intel_devicelib_imf_fp64
void addOrInitHostPipeEntry(const void *HostPipePtr, const char *UniqueId)
bool kernelUsesAssert(const std::string &KernelName) const
@ cl_intel_devicelib_complex_fp64
sycl::detail::pi::PiProgram getPiProgramFromPiKernel(sycl::detail::pi::PiKernel Kernel, const ContextImplPtr Context)
std::vector< device_image_plain > getSYCLDeviceImagesWithCompatibleState(const context &Ctx, const std::vector< device > &Devs, bundle_state TargetState, const std::vector< kernel_id > &KernelIDs={})
sycl::detail::pi::PiProgram createPIProgram(const RTDeviceBinaryImage &Img, const context &Context, const device &Device)
static std::string getProgramBuildLog(const sycl::detail::pi::PiProgram &Program, const ContextImplPtr Context)
DeviceGlobalMapEntry * getDeviceGlobalEntry(const void *DeviceGlobalPtr)
void addOrInitDeviceGlobalEntry(const void *DeviceGlobalPtr, const char *UniqueId)
~ProgramManager()=default
void bringSYCLDeviceImagesToState(std::vector< device_image_plain > &DeviceImages, bundle_state TargetState)
std::vector< unsigned char > SerializedObj
@ cl_intel_devicelib_math_fp64
void debugPrintBinaryImages() const
std::vector< kernel_id > getAllSYCLKernelIDs()
static constexpr uint32_t ITTSpecConstId
@ cl_intel_devicelib_cstring
std::set< RTDeviceBinaryImage * > getRawDeviceImages(const std::vector< kernel_id > &KernelIDs)
The context class represents a SYCL context on which kernel functions may be executed.
std::function< bool(const detail::DeviceImageImplPtr &DevImgImpl)> DevImgSelectorImpl