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

#include <detail/program_manager/program_manager.hpp>

Public Types

using KernelArgMask = std::vector< bool >
 

Public Member Functions

RTDeviceBinaryImagegetDeviceImage (OSModuleHandle M, const std::string &KernelName, const context &Context, const device &Device, bool JITCompilationIsRequired=false)
 
RTDeviceBinaryImagegetDeviceImage (OSModuleHandle M, KernelSetId KSId, const context &Context, const device &Device, bool JITCompilationIsRequired=false)
 
RT::PiProgram createPIProgram (const RTDeviceBinaryImage &Img, const context &Context, const device &Device)
 
std::pair< RT::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...
 
RT::PiProgram getBuiltPIProgram (OSModuleHandle M, 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. More...
 
RT::PiProgram getBuiltPIProgram (OSModuleHandle M, const context &Context, const device &Device, const std::string &KernelName, const property_list &PropList, bool JITCompilationIsRequired=false)
 
std::tuple< RT::PiKernel, std::mutex *, RT::PiProgram > getOrCreateKernel (OSModuleHandle M, const ContextImplPtr &ContextImpl, const DeviceImplPtr &DeviceImpl, const std::string &KernelName, const program_impl *Prg)
 
RT::PiProgram getPiProgramFromPiKernel (RT::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)
 
KernelArgMask getEliminatedKernelArgMask (OSModuleHandle M, 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)
 
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 std::vector< 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::pair< RT::PiKernel, std::mutex * > getOrCreateKernel (const context &Context, const std::string &KernelName, const property_list &PropList, RT::PiProgram Program)
 
 ProgramManager ()
 
 ~ProgramManager ()=default
 
bool kernelUsesAssert (OSModuleHandle M, const std::string &KernelName) const
 
std::set< RTDeviceBinaryImage * > getRawDeviceImages (const std::vector< kernel_id > &KernelIDs)
 

Static Public Member Functions

static ProgramManagergetInstance ()
 
static std::string getProgramBuildLog (const RT::PiProgram &Program, const ContextImplPtr Context)
 

Detailed Description

Definition at line 81 of file program_manager.hpp.

Member Typedef Documentation

◆ KernelArgMask

Definition at line 84 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 1589 of file program_manager.cpp.

◆ 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 1350 of file program_manager.cpp.

References std::cerr.

◆ 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 1418 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 1565 of file program_manager.cpp.

◆ getBuiltInKernelID()

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

Definition at line 1576 of file program_manager.cpp.

◆ getBuiltPIProgram() [1/2]

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

◆ getBuiltPIProgram() [2/2]

RT::PiProgram sycl::_V1::detail::ProgramManager::getBuiltPIProgram ( OSModuleHandle  M,
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.

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
Prgprovides build context information, such as current specialization constants settings; can be nullptr. Passing as a raw pointer is OK, since it is not captured anywhere once the function returns.
JITCompilationIsRequiredIf JITCompilationIsRequired is true add a check that kernel is compiled, otherwise don't add the check.

Definition at line 486 of file program_manager.cpp.

References sycl::_V1::detail::applyOptionsFromEnvironment(), sycl::_V1::detail::applyOptionsFromImage(), sycl::_V1::detail::DeviceBinaryProperty::asByteArray(), sycl::_V1::build(), sycl::_V1::detail::emitBuiltProgramInfo(), sycl::_V1::detail::enableITTAnnotationsIfNeeded(), sycl::_V1::detail::RTDeviceBinaryImage::get(), sycl::_V1::detail::program_impl::get_build_options(), sycl::_V1::detail::RTDeviceBinaryImage::getDeviceRequirements(), sycl::_V1::detail::RTDeviceBinaryImage::getFormat(), sycl::_V1::detail::RTDeviceBinaryImage::getImageID(), sycl::_V1::detail::KernelProgramCache::getOrInsertProgram(), sycl::_V1::detail::plugin::getPiPlugin(), sycl::_V1::detail::getRawSyclObjImpl(), sycl::_V1::detail::getSyclObjImpl(), PI_DEVICE_BINARY_TYPE_SPIRV, PI_DEVICE_INFO_BUILD_ON_SUBDEVICE, PI_TRUE, piDeviceGetInfo(), sycl::_V1::detail::ByteArray::size(), sycl::_V1::detail::program_impl::stableSerializeSpecConstRegistry(), and sycl::_V1::detail::RTDeviceBinaryImage::supportsSpecConstants().

Referenced by sycl::_V1::detail::program_impl::build_with_kernel_name().

◆ 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]

RTDeviceBinaryImage & sycl::_V1::detail::ProgramManager::getDeviceImage ( OSModuleHandle  M,
const std::string &  KernelName,
const context Context,
const device Device,
bool  JITCompilationIsRequired = false 
)

◆ getDeviceImage() [2/2]

◆ getDeviceImageFromBinaryImage()

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

◆ getDeviceLibReqMask()

◆ getEliminatedKernelArgMask()

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

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

Parameters
Midentifies the OS module the kernel comes from (multiple OS modules may have kernels with the same name).
NativePrgthe PI program associated with the kernel.
KernelNamethe name of the kernel.

Definition at line 1471 of file program_manager.cpp.

Referenced by sycl::_V1::detail::ExecCGCommand::emitInstrumentationData(), and sycl::_V1::detail::enqueueImpKernel().

◆ getInstance()

◆ getOrCreateKernel() [1/2]

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

◆ getOrCreateKernel() [2/2]

◆ getOrCreatePIProgram()

std::pair< RT::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 451 of file program_manager.cpp.

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

◆ getPiProgramFromPiKernel()

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

◆ getProgramBuildLog()

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

◆ getRawDeviceImages()

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

Definition at line 1609 of file program_manager.cpp.

◆ getSYCLDeviceImages() [1/3]

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

Definition at line 1861 of file program_manager.cpp.

◆ 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 1872 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 
)

Definition at line 1891 of file program_manager.cpp.

References sycl::_V1::make_error_code().

◆ 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 = {} 
)

Definition at line 1667 of file program_manager.cpp.

References any_of(), and sycl::_V1::make_error_code().

◆ 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 1555 of file program_manager.cpp.

References any_of().

◆ kernelUsesAssert()

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

Definition at line 1171 of file program_manager.cpp.

References sycl::_V1::detail::ByteArray::end().

◆ link()


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