DPC++ Runtime
Runtime libraries for oneAPI DPC++
sycl::_V1::detail::ProgramManager Class Reference

#include <detail/program_manager/program_manager.hpp>

Public Member Functions

RTDeviceBinaryImagegetDeviceImage (const std::string &KernelName, const context &Context, const device &Device, bool JITCompilationIsRequired=false)
 
RTDeviceBinaryImagegetDeviceImage (const std::unordered_set< RTDeviceBinaryImage * > &ImagesToVerify, const context &Context, const device &Device, bool JITCompilationIsRequired=false)
 
sycl::detail::pi::PiProgram createPIProgram (const RTDeviceBinaryImage &Img, const context &Context, const device &Device)
 
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 from the supplied device image otherwise. More...
 
sycl::detail::pi::PiProgram getBuiltPIProgram (const ContextImplPtr &ContextImpl, const DeviceImplPtr &DeviceImpl, const std::string &KernelName, const NDRDescT &NDRDesc={}, bool JITCompilationIsRequired=false)
 Builds or retrieves from cache a program defining the kernel with given name. More...
 
sycl::detail::pi::PiProgram getBuiltPIProgram (const context &Context, const device &Device, const std::string &KernelName, const property_list &PropList, bool JITCompilationIsRequired=false)
 
std::tuple< sycl::detail::pi::PiKernel, std::mutex *, const KernelArgMask *, sycl::detail::pi::PiProgramgetOrCreateKernel (const ContextImplPtr &ContextImpl, const DeviceImplPtr &DeviceImpl, const std::string &KernelName, const NDRDescT &NDRDesc={})
 
sycl::detail::pi::PiProgram getPiProgramFromPiKernel (sycl::detail::pi::PiKernel Kernel, const ContextImplPtr Context)
 
void addImages (pi_device_binaries DeviceImages)
 
void debugPrintBinaryImages () const
 
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 depends on. More...
 
uint32_t getDeviceLibReqMask (const RTDeviceBinaryImage &Img)
 
const KernelArgMaskgetEliminatedKernelArgMask (pi::PiProgram NativePrg, const std::string &KernelName)
 Returns the mask for eliminated kernel arguments for the requested kernel within the native program. More...
 
kernel_id getSYCLKernelID (const std::string &KernelName)
 
std::vector< kernel_idgetAllSYCLKernelIDs ()
 
kernel_id getBuiltInKernelID (const std::string &KernelName)
 
void addOrInitDeviceGlobalEntry (const void *DeviceGlobalPtr, const char *UniqueId)
 
bool hasCompatibleImage (const device &Dev)
 
DeviceGlobalMapEntrygetDeviceGlobalEntry (const void *DeviceGlobalPtr)
 
std::vector< DeviceGlobalMapEntry * > getDeviceGlobalEntries (const std::vector< std::string > &UniqueIds, bool ExcludeDeviceImageScopeDecorated=false)
 
void addOrInitHostPipeEntry (const void *HostPipePtr, const char *UniqueId)
 
HostPipeMapEntrygetHostPipeEntry (const std::string &UniqueId)
 
HostPipeMapEntrygetHostPipeEntry (const void *HostPipePtr)
 
device_image_plain getDeviceImageFromBinaryImage (RTDeviceBinaryImage *BinImage, const context &Ctx, const device &Dev)
 
std::vector< device_image_plaingetSYCLDeviceImagesWithCompatibleState (const context &Ctx, const std::vector< device > &Devs, bundle_state TargetState, const std::vector< kernel_id > &KernelIDs={})
 
void bringSYCLDeviceImagesToState (std::vector< device_image_plain > &DeviceImages, bundle_state TargetState)
 
std::vector< device_image_plaingetSYCLDeviceImages (const context &Ctx, const std::vector< device > &Devs, bundle_state State)
 
std::vector< device_image_plaingetSYCLDeviceImages (const context &Ctx, const std::vector< device > &Devs, const DevImgSelectorImpl &Selector, bundle_state TargetState)
 
std::vector< device_image_plaingetSYCLDeviceImages (const context &Ctx, const std::vector< device > &Devs, const std::vector< kernel_id > &KernelIDs, bundle_state TargetState)
 
device_image_plain compile (const device_image_plain &DeviceImage, const std::vector< device > &Devs, const property_list &PropList)
 
std::vector< device_image_plainlink (const device_image_plain &DeviceImages, const std::vector< device > &Devs, const property_list &PropList)
 
device_image_plain build (const device_image_plain &DeviceImage, const std::vector< device > &Devs, const property_list &PropList)
 
std::tuple< sycl::detail::pi::PiKernel, std::mutex *, const KernelArgMask * > getOrCreateKernel (const context &Context, const std::string &KernelName, const property_list &PropList, sycl::detail::pi::PiProgram Program)
 
 ProgramManager ()
 
 ~ProgramManager ()=default
 
bool kernelUsesAssert (const std::string &KernelName) const
 
bool kernelUsesAsan () const
 
std::set< RTDeviceBinaryImage * > getRawDeviceImages (const std::vector< kernel_id > &KernelIDs)
 

Static Public Member Functions

static ProgramManagergetInstance ()
 
static std::string getProgramBuildLog (const sycl::detail::pi::PiProgram &Program, const ContextImplPtr Context)
 

Detailed Description

Definition at line 88 of file program_manager.hpp.

Constructor & Destructor Documentation

◆ ProgramManager()

sycl::_V1::detail::ProgramManager::ProgramManager ( )

◆ ~ProgramManager()

sycl::_V1::detail::ProgramManager::~ProgramManager ( )
default

Member Function Documentation

◆ addImages()

◆ addOrInitDeviceGlobalEntry()

void sycl::_V1::detail::ProgramManager::addOrInitDeviceGlobalEntry ( const void *  DeviceGlobalPtr,
const char *  UniqueId 
)

Definition at line 1621 of file program_manager.cpp.

Referenced by sycl::_V1::detail::device_global_map::add().

◆ addOrInitHostPipeEntry()

void sycl::_V1::detail::ProgramManager::addOrInitHostPipeEntry ( const void *  HostPipePtr,
const char *  UniqueId 
)

Definition at line 1678 of file program_manager.cpp.

Referenced by sycl::_V1::detail::host_pipe_map::add().

◆ bringSYCLDeviceImagesToState()

void sycl::_V1::detail::ProgramManager::bringSYCLDeviceImagesToState ( std::vector< device_image_plain > &  DeviceImages,
bundle_state  TargetState 
)

◆ build()

◆ compile()

◆ createPIProgram()

◆ debugPrintBinaryImages()

void sycl::_V1::detail::ProgramManager::debugPrintBinaryImages ( ) const

Definition at line 1420 of file program_manager.cpp.

Referenced by getDeviceImage().

◆ flushSpecConstants()

void sycl::_V1::detail::ProgramManager::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 depends on.

Parameters
Prgthe program object to get spec constant settings from. Passing program_impl by raw reference is OK, since it is not captured anywhere once the function returns.
NativePrgthe native program, target for spec constant setting; if not null then overrides the native program in Prg
ImgA source of the information about which constants need setting and symboling->integer spec constant ID mapping. If not null, overrides native program->binary image binding maintained by the program manager.

Definition at line 1454 of file program_manager.cpp.

References std::cerr, sycl::_V1::detail::DbgProgMgr, sycl::_V1::detail::program_impl::flush_spec_constants(), sycl::_V1::detail::program_impl::get(), sycl::_V1::detail::program_impl::getHandleRef(), sycl::_V1::detail::RTDeviceBinaryImage::getRawData(), sycl::_V1::detail::program_impl::hasSetSpecConstants(), and sycl::_V1::detail::RTDeviceBinaryImage::supportsSpecConstants().

◆ getAllSYCLKernelIDs()

std::vector< kernel_id > sycl::_V1::detail::ProgramManager::getAllSYCLKernelIDs ( )

Definition at line 1597 of file program_manager.cpp.

◆ getBuiltInKernelID()

kernel_id sycl::_V1::detail::ProgramManager::getBuiltInKernelID ( const std::string &  KernelName)

Definition at line 1608 of file program_manager.cpp.

◆ getBuiltPIProgram() [1/2]

sycl::detail::pi::PiProgram sycl::_V1::detail::ProgramManager::getBuiltPIProgram ( const context Context,
const device Device,
const std::string &  KernelName,
const property_list PropList,
bool  JITCompilationIsRequired = false 
)

◆ getBuiltPIProgram() [2/2]

sycl::detail::pi::PiProgram sycl::_V1::detail::ProgramManager::getBuiltPIProgram ( const ContextImplPtr ContextImpl,
const DeviceImplPtr DeviceImpl,
const std::string &  KernelName,
const NDRDescT NDRDesc = {},
bool  JITCompilationIsRequired = false 
)

Builds or retrieves from cache a program defining the kernel with given name.

Parameters
Midentifies the OS module the kernel comes from (multiple OS modules may have kernels with the same name)
Contextthe context to build the program with
Devicethe device for which the program is built
KernelNamethe kernel's name
JITCompilationIsRequiredIf JITCompilationIsRequired is true add a check that kernel is compiled, otherwise don't add the check.

Definition at line 523 of file program_manager.cpp.

References sycl::_V1::detail::appendCompileEnvironmentVariablesThatAppend(), sycl::_V1::detail::appendLinkEnvironmentVariablesThatAppend(), sycl::_V1::detail::applyOptionsFromEnvironment(), sycl::_V1::detail::applyOptionsFromImage(), build(), sycl::_V1::detail::checkDevSupportDeviceRequirements(), sycl::_V1::detail::emitBuiltProgramInfo(), sycl::_V1::detail::enableITTAnnotationsIfNeeded(), sycl::_V1::detail::RTDeviceBinaryImage::get(), getDeviceImage(), getDeviceLibReqMask(), sycl::_V1::detail::RTDeviceBinaryImage::getFormat(), sycl::_V1::detail::RTDeviceBinaryImage::getImageID(), sycl::_V1::detail::KernelProgramCache::getOrBuild(), getOrCreatePIProgram(), sycl::_V1::detail::KernelProgramCache::getOrInsertProgram(), sycl::_V1::detail::getRawSyclObjImpl(), sycl::_V1::detail::getSyclObjImpl(), PI_DEVICE_BINARY_TYPE_SPIRV, PI_DEVICE_INFO_BUILD_ON_SUBDEVICE, PI_TRUE, piDeviceGetInfo(), piProgramRetain(), sycl::_V1::detail::PersistentDeviceCodeCache::putItemToDisc(), and sycl::_V1::detail::RTDeviceBinaryImage::supportsSpecConstants().

Referenced by getOrCreateKernel().

◆ getDeviceGlobalEntries()

std::vector< DeviceGlobalMapEntry * > sycl::_V1::detail::ProgramManager::getDeviceGlobalEntries ( const std::vector< std::string > &  UniqueIds,
bool  ExcludeDeviceImageScopeDecorated = false 
)

◆ getDeviceGlobalEntry()

DeviceGlobalMapEntry * sycl::_V1::detail::ProgramManager::getDeviceGlobalEntry ( const void *  DeviceGlobalPtr)

◆ getDeviceImage() [1/2]

◆ getDeviceImage() [2/2]

RTDeviceBinaryImage & sycl::_V1::detail::ProgramManager::getDeviceImage ( const std::unordered_set< RTDeviceBinaryImage * > &  ImagesToVerify,
const context Context,
const device Device,
bool  JITCompilationIsRequired = false 
)

◆ getDeviceImageFromBinaryImage()

device_image_plain sycl::_V1::detail::ProgramManager::getDeviceImageFromBinaryImage ( RTDeviceBinaryImage BinImage,
const context Ctx,
const device Dev 
)

◆ getDeviceLibReqMask()

◆ getEliminatedKernelArgMask()

const KernelArgMask * sycl::_V1::detail::ProgramManager::getEliminatedKernelArgMask ( pi::PiProgram  NativePrg,
const std::string &  KernelName 
)

Returns the mask for eliminated kernel arguments for the requested kernel within the native program.

Parameters
NativePrgthe PI program associated with the kernel.
KernelNamethe name of the kernel.

Definition at line 1503 of file program_manager.cpp.

Referenced by getOrCreateKernel().

◆ getHostPipeEntry() [1/2]

HostPipeMapEntry * sycl::_V1::detail::ProgramManager::getHostPipeEntry ( const std::string &  UniqueId)

◆ getHostPipeEntry() [2/2]

HostPipeMapEntry * sycl::_V1::detail::ProgramManager::getHostPipeEntry ( const void *  HostPipePtr)

Definition at line 1702 of file program_manager.cpp.

◆ getInstance()

◆ getOrCreateKernel() [1/2]

std::tuple< sycl::detail::pi::PiKernel, std::mutex *, const KernelArgMask * > sycl::_V1::detail::ProgramManager::getOrCreateKernel ( const context Context,
const std::string &  KernelName,
const property_list PropList,
sycl::detail::pi::PiProgram  Program 
)

◆ getOrCreateKernel() [2/2]

◆ getOrCreatePIProgram()

std::pair< sycl::detail::pi::PiProgram, bool > sycl::_V1::detail::ProgramManager::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 from the supplied device image otherwise.

Parameters
ImgThe device image to find a cached device code binary for or create the PI program with.
ContextThe context to find or create the PI program with.
DeviceThe device to find or create the PI program for.
CompileAndLinkOptionsThe compile and linking options to be used for building the PI program. These options must appear in the mentioned order. This parameter is used as a partial key in the cache and has no effect if no cached device code binary is found in the persistent cache.
SpecConstsSpecialization constants associated with the device image. This parameter is used as a partial key in the cache and has no effect if no cached device code binary is found in the persistent cache.
Returns
A pair consisting of the PI program created with the corresponding device code binary and a boolean that is true if the device code binary was found in the persistent cache and false otherwise.

Definition at line 485 of file program_manager.cpp.

References sycl::_V1::detail::RTDeviceBinaryImage::PropertyRange::begin(), sycl::_V1::detail::createBinaryProgram(), createPIProgram(), sycl::_V1::detail::PersistentDeviceCodeCache::getItemFromDisc(), sycl::_V1::detail::RTDeviceBinaryImage::getProgramMetadata(), and sycl::_V1::detail::getSyclObjImpl().

Referenced by getBuiltPIProgram().

◆ getPiProgramFromPiKernel()

sycl::detail::pi::PiProgram sycl::_V1::detail::ProgramManager::getPiProgramFromPiKernel ( sycl::detail::pi::PiKernel  Kernel,
const ContextImplPtr  Context 
)

Definition at line 736 of file program_manager.cpp.

References PI_KERNEL_INFO_PROGRAM, and piKernelGetInfo().

◆ getProgramBuildLog()

std::string sycl::_V1::detail::ProgramManager::getProgramBuildLog ( const sycl::detail::pi::PiProgram Program,
const ContextImplPtr  Context 
)
static

◆ getRawDeviceImages()

std::set< RTDeviceBinaryImage * > sycl::_V1::detail::ProgramManager::getRawDeviceImages ( const std::vector< kernel_id > &  KernelIDs)

Definition at line 1641 of file program_manager.cpp.

Referenced by getSYCLDeviceImagesWithCompatibleState().

◆ getSYCLDeviceImages() [1/3]

std::vector< device_image_plain > sycl::_V1::detail::ProgramManager::getSYCLDeviceImages ( const context Ctx,
const std::vector< device > &  Devs,
bundle_state  State 
)

◆ getSYCLDeviceImages() [2/3]

std::vector< device_image_plain > sycl::_V1::detail::ProgramManager::getSYCLDeviceImages ( const context Ctx,
const std::vector< device > &  Devs,
const DevImgSelectorImpl Selector,
bundle_state  TargetState 
)

Definition at line 1945 of file program_manager.cpp.

◆ getSYCLDeviceImages() [3/3]

std::vector< device_image_plain > sycl::_V1::detail::ProgramManager::getSYCLDeviceImages ( const context Ctx,
const std::vector< device > &  Devs,
const std::vector< kernel_id > &  KernelIDs,
bundle_state  TargetState 
)

◆ getSYCLDeviceImagesWithCompatibleState()

std::vector< device_image_plain > sycl::_V1::detail::ProgramManager::getSYCLDeviceImagesWithCompatibleState ( const context Ctx,
const std::vector< device > &  Devs,
bundle_state  TargetState,
const std::vector< kernel_id > &  KernelIDs = {} 
)

◆ getSYCLKernelID()

kernel_id sycl::_V1::detail::ProgramManager::getSYCLKernelID ( const std::string &  KernelName)

◆ hasCompatibleImage()

bool sycl::_V1::detail::ProgramManager::hasCompatibleImage ( const device Dev)

Definition at line 1587 of file program_manager.cpp.

References any_of().

◆ kernelUsesAsan()

bool sycl::_V1::detail::ProgramManager::kernelUsesAsan ( ) const
inline

Definition at line 298 of file program_manager.hpp.

Referenced by sycl::_V1::detail::pi::initializePlugins().

◆ kernelUsesAssert()

bool sycl::_V1::detail::ProgramManager::kernelUsesAssert ( const std::string &  KernelName) const

Definition at line 1254 of file program_manager.cpp.

Referenced by sycl::_V1::detail::queue_impl::submit_impl().

◆ link()


The documentation for this class was generated from the following files: