#include <detail/program_manager/program_manager.hpp>
Public Types | |
using | KernelArgMask = std::vector< bool > |
Public Member Functions | |
RTDeviceBinaryImage & | getDeviceImage (OSModuleHandle M, const std::string &KernelName, 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_id > | getAllSYCLKernelIDs () |
kernel_id | getBuiltInKernelID (const std::string &KernelName) |
void | addOrInitDeviceGlobalEntry (const void *DeviceGlobalPtr, const char *UniqueId) |
std::vector< device_image_plain > | getSYCLDeviceImagesWithCompatibleState (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_plain > | getSYCLDeviceImages (const context &Ctx, const std::vector< device > &Devs, bundle_state State) |
std::vector< device_image_plain > | getSYCLDeviceImages (const context &Ctx, const std::vector< device > &Devs, const DevImgSelectorImpl &Selector, bundle_state TargetState) |
std::vector< device_image_plain > | getSYCLDeviceImages (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_plain > | link (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 |
Static Public Member Functions | |
static ProgramManager & | getInstance () |
static std::string | getProgramBuildLog (const RT::PiProgram &Program, const ContextImplPtr Context) |
Definition at line 71 of file program_manager.hpp.
using cl::sycl::detail::ProgramManager::KernelArgMask = std::vector<bool> |
Definition at line 74 of file program_manager.hpp.
cl::sycl::detail::ProgramManager::ProgramManager | ( | ) |
Definition at line 823 of file program_manager.cpp.
References cl::sycl::detail::DbgProgMgr, cl::sycl::detail::getFormatStr(), PI_INVALID_VALUE, cl::sycl::detail::SpvFileKSId, and cl::sycl::detail::UseSpvEnv().
|
default |
void cl::sycl::detail::ProgramManager::addImages | ( | pi_device_binaries | DeviceImages | ) |
Definition at line 1086 of file program_manager.cpp.
References cl::sycl::detail::pi::DeviceBinaryProperty::asByteArray(), cl::sycl::detail::createKernelArgMask(), pi_device_binaries_struct::DeviceBinaries, pi_device_binary_struct::EntriesBegin, pi_device_binary_struct::EntriesEnd, cl::sycl::detail::pi::DeviceBinaryImage::get(), cl::sycl::detail::pi::DeviceBinaryImage::getDeviceGlobals(), cl::sycl::detail::pi::DeviceBinaryImage::getExportedSymbols(), cl::sycl::detail::pi::DeviceBinaryImage::getKernelParamOptInfo(), cl::sycl::detail::pi::DeviceBinaryImage::PropertyRange::isAvailable(), _pi_offload_entry_struct::name, pi_device_binaries_struct::NumDeviceBinaries, and cl::sycl::detail::pi::ByteArray::size().
Referenced by __sycl_register_lib().
void cl::sycl::detail::ProgramManager::addOrInitDeviceGlobalEntry | ( | const void * | DeviceGlobalPtr, |
const char * | UniqueId | ||
) |
Definition at line 1477 of file program_manager.cpp.
void cl::sycl::detail::ProgramManager::bringSYCLDeviceImagesToState | ( | std::vector< device_image_plain > & | DeviceImages, |
bundle_state | TargetState | ||
) |
Definition at line 1563 of file program_manager.cpp.
References cl::sycl::build(), cl::sycl::compile(), cl::sycl::detail::getSyclObjImpl(), and cl::sycl::link().
device_image_plain cl::sycl::detail::ProgramManager::build | ( | const device_image_plain & | DeviceImage, |
const std::vector< device > & | Devs, | ||
const property_list & | PropList | ||
) |
Definition at line 1804 of file program_manager.cpp.
References cl::sycl::detail::KernelProgramCache::acquireCachedPrograms(), cl::sycl::detail::applyOptionsFromEnvironment(), cl::sycl::detail::applyOptionsFromImage(), cl::sycl::detail::device_image_impl::SpecConstDescT::BlobOffset, cl::sycl::build(), cl::sycl::detail::plugin::call(), cl::sycl::detail::emitBuiltProgramInfo(), cl::sycl::detail::enableITTAnnotationsIfNeeded(), cl::sycl::detail::plugin::getPiPlugin(), cl::sycl::detail::getRawSyclObjImpl(), cl::sycl::detail::getSyclObjImpl(), cl::sycl::detail::device_image_impl::SpecConstDescT::ID, cl::sycl::detail::device_image_impl::SpecConstDescT::IsSet, PI_DEVICE_BINARY_TYPE_SPIRV, PI_INVALID_OPERATION, piextProgramSetSpecializationConstant(), _pi_plugin::PiFunctionTable, piProgramRetain(), and cl::sycl::detail::device_image_impl::SpecConstDescT::Size.
device_image_plain cl::sycl::detail::ProgramManager::compile | ( | const device_image_plain & | DeviceImage, |
const std::vector< device > & | Devs, | ||
const property_list & | PropList | ||
) |
Definition at line 1670 of file program_manager.cpp.
References cl::sycl::detail::appendCompileOptionsFromImage(), cl::sycl::detail::applyCompileOptionsFromEnvironment(), cl::sycl::build(), cl::sycl::detail::plugin::call_nocheck(), cl::sycl::detail::enableITTAnnotationsIfNeeded(), cl::sycl::detail::getSyclObjImpl(), cl::sycl::make_error_code(), PI_DEVICE_BINARY_TYPE_SPIRV, PI_INVALID_OPERATION, PI_SUCCESS, and piProgramCompile().
RT::PiProgram cl::sycl::detail::ProgramManager::createPIProgram | ( | const RTDeviceBinaryImage & | Img, |
const context & | Context, | ||
const device & | Device | ||
) |
Definition at line 306 of file program_manager.cpp.
References cl::sycl::detail::pi::DeviceBinaryImage::PropertyRange::begin(), pi_device_binary_struct::BinaryEnd, pi_device_binary_struct::BinaryStart, cl::sycl::detail::createBinaryProgram(), cl::sycl::detail::createSpirvProgram(), cl::sycl::detail::DbgProgMgr, cl::sycl::feature_not_supported, cl::sycl::detail::pi::getBinaryImageFormat(), cl::sycl::detail::pi::DeviceBinaryImage::getFormat(), cl::sycl::detail::getFormatStr(), cl::sycl::detail::pi::DeviceBinaryImage::getProgramMetadata(), cl::sycl::detail::RTDeviceBinaryImage::getRawData(), cl::sycl::detail::getRawSyclObjImpl(), cl::sycl::detail::pi::DeviceBinaryImage::getSize(), cl::sycl::detail::getSyclObjImpl(), cl::sycl::detail::isDeviceBinaryTypeSupported(), PI_DEVICE_BINARY_TYPE_NONE, PI_DEVICE_BINARY_TYPE_SPIRV, PI_INVALID_OPERATION, and PI_INVALID_VALUE.
void cl::sycl::detail::ProgramManager::debugPrintBinaryImages | ( | ) | const |
Definition at line 1251 of file program_manager.cpp.
References cl::sycl::detail::pi::DeviceBinaryImage::get().
void cl::sycl::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.
Prg | the 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. |
NativePrg | the native program, target for spec constant setting; if not null then overrides the native program in Prg |
Img | A 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 1317 of file program_manager.cpp.
References cl::sycl::detail::DbgProgMgr, cl::sycl::detail::program_impl::flush_spec_constants(), cl::sycl::detail::program_impl::get(), cl::sycl::detail::program_impl::getHandleRef(), cl::sycl::detail::RTDeviceBinaryImage::getRawData(), cl::sycl::detail::program_impl::hasSetSpecConstants(), PI_INVALID_OPERATION, and cl::sycl::detail::RTDeviceBinaryImage::supportsSpecConstants().
std::vector< kernel_id > cl::sycl::detail::ProgramManager::getAllSYCLKernelIDs | ( | ) |
Definition at line 1453 of file program_manager.cpp.
kernel_id cl::sycl::detail::ProgramManager::getBuiltInKernelID | ( | const std::string & | KernelName | ) |
Definition at line 1464 of file program_manager.cpp.
RT::PiProgram cl::sycl::detail::ProgramManager::getBuiltPIProgram | ( | OSModuleHandle | M, |
const context & | Context, | ||
const device & | Device, | ||
const std::string & | KernelName, | ||
const property_list & | PropList, | ||
bool | JITCompilationIsRequired = false |
||
) |
RT::PiProgram cl::sycl::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.
M | identifies the OS module the kernel comes from (multiple OS modules may have kernels with the same name) |
Context | the context to build the program with |
Device | the device for which the program is built |
KernelName | the kernel's name |
Prg | provides 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. |
JITCompilationIsRequired | If JITCompilationIsRequired is true add a check that kernel is compiled, otherwise don't add the check. |
Definition at line 481 of file program_manager.cpp.
References cl::sycl::detail::KernelProgramCache::acquireCachedPrograms(), cl::sycl::detail::applyOptionsFromEnvironment(), cl::sycl::detail::applyOptionsFromImage(), cl::sycl::build(), cl::sycl::detail::emitBuiltProgramInfo(), cl::sycl::detail::enableITTAnnotationsIfNeeded(), cl::sycl::detail::pi::DeviceBinaryImage::get(), cl::sycl::detail::program_impl::get_build_options(), cl::sycl::detail::pi::DeviceBinaryImage::getFormat(), cl::sycl::detail::plugin::getPiPlugin(), cl::sycl::detail::getRawSyclObjImpl(), cl::sycl::detail::getSyclObjImpl(), PI_DEVICE_BINARY_TYPE_SPIRV, PI_DEVICE_INFO_BUILD_ON_SUBDEVICE, PI_TRUE, piDeviceGetInfo(), _pi_plugin::PiFunctionTable, cl::sycl::detail::program_impl::stableSerializeSpecConstRegistry(), and cl::sycl::detail::RTDeviceBinaryImage::supportsSpecConstants().
Referenced by cl::sycl::detail::program_impl::build_with_kernel_name().
RTDeviceBinaryImage & cl::sycl::detail::ProgramManager::getDeviceImage | ( | OSModuleHandle | M, |
const std::string & | KernelName, | ||
const context & | Context, | ||
const device & | Device, | ||
bool | JITCompilationIsRequired = false |
||
) |
Definition at line 107 of file program_manager.cpp.
References cl::sycl::detail::DbgProgMgr, and cl::sycl::detail::getRawSyclObjImpl().
uint32_t cl::sycl::detail::ProgramManager::getDeviceLibReqMask | ( | const RTDeviceBinaryImage & | Img | ) |
Definition at line 1359 of file program_manager.cpp.
References cl::sycl::detail::pi::DeviceBinaryProperty::asUint32(), cl::sycl::detail::pi::DeviceBinaryImage::PropertyRange::begin(), cl::sycl::detail::pi::DeviceBinaryImage::getDeviceLibReqMask(), and cl::sycl::detail::pi::DeviceBinaryImage::PropertyRange::isAvailable().
ProgramManager::KernelArgMask cl::sycl::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.
M | identifies the OS module the kernel comes from (multiple OS modules may have kernels with the same name). |
NativePrg | the PI program associated with the kernel. |
KernelName | the name of the kernel. |
Definition at line 1370 of file program_manager.cpp.
Referenced by cl::sycl::detail::ExecCGCommand::emitInstrumentationData(), and cl::sycl::detail::enqueueImpKernel().
|
static |
Definition at line 63 of file program_manager.cpp.
Referenced by __sycl_register_lib(), cl::sycl::detail::program_impl::build_with_kernel_name(), cl::sycl::detail::ExecCGCommand::emitInstrumentationData(), and cl::sycl::detail::enqueueImpKernel().
std::pair< RT::PiKernel, std::mutex * > cl::sycl::detail::ProgramManager::getOrCreateKernel | ( | const context & | Context, |
const std::string & | KernelName, | ||
const property_list & | PropList, | ||
RT::PiProgram | Program | ||
) |
Definition at line 1961 of file program_manager.cpp.
References cl::sycl::detail::KernelProgramCache::acquireKernelsPerProgramCache(), cl::sycl::detail::plugin::call(), cl::sycl::detail::getSyclObjImpl(), PI_TRUE, PI_USM_INDIRECT_ACCESS, piKernelCreate(), and piKernelSetExecInfo().
std::tuple< RT::PiKernel, std::mutex *, RT::PiProgram > cl::sycl::detail::ProgramManager::getOrCreateKernel | ( | OSModuleHandle | M, |
const ContextImplPtr & | ContextImpl, | ||
const DeviceImplPtr & | DeviceImpl, | ||
const std::string & | KernelName, | ||
const program_impl * | Prg | ||
) |
Definition at line 599 of file program_manager.cpp.
References cl::sycl::detail::KernelProgramCache::acquireKernelsPerProgramCache(), cl::sycl::detail::applyOptionsFromEnvironment(), cl::sycl::detail::plugin::call(), cl::sycl::detail::DbgProgMgr, cl::sycl::detail::program_impl::get_build_options(), cl::sycl::detail::make_tuple(), PI_TRUE, PI_USM_INDIRECT_ACCESS, piKernelCreate(), piKernelSetExecInfo(), cl::sycl::detail::KernelProgramCache::saveKernel(), cl::sycl::detail::program_impl::stableSerializeSpecConstRegistry(), and cl::sycl::detail::KernelProgramCache::tryToGetKernelFast().
Referenced by cl::sycl::detail::ExecCGCommand::emitInstrumentationData(), and cl::sycl::detail::enqueueImpKernel().
std::pair< RT::PiProgram, bool > cl::sycl::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.
Img | The device image to find a cached device code binary for or create the PI program with. |
Context | The context to find or create the PI program with. |
Device | The device to find or create the PI program for. |
CompileAndLinkOptions | The 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. |
SpecConsts | Specialization 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. |
Definition at line 446 of file program_manager.cpp.
References cl::sycl::detail::pi::DeviceBinaryImage::PropertyRange::begin(), cl::sycl::detail::createBinaryProgram(), cl::sycl::detail::pi::DeviceBinaryImage::getProgramMetadata(), and cl::sycl::detail::getSyclObjImpl().
RT::PiProgram cl::sycl::detail::ProgramManager::getPiProgramFromPiKernel | ( | RT::PiKernel | Kernel, |
const ContextImplPtr | Context | ||
) |
Definition at line 667 of file program_manager.cpp.
References cl::sycl::detail::plugin::call(), PI_KERNEL_INFO_PROGRAM, and piKernelGetInfo().
|
static |
Definition at line 676 of file program_manager.cpp.
References cl::sycl::detail::plugin::call(), PI_DEVICE_INFO_NAME, PI_PROGRAM_INFO_DEVICES, piDeviceGetInfo(), piProgramGetBuildInfo(), and piProgramGetInfo().
std::vector< device_image_plain > cl::sycl::detail::ProgramManager::getSYCLDeviceImages | ( | const context & | Ctx, |
const std::vector< device > & | Devs, | ||
bundle_state | State | ||
) |
Definition at line 1611 of file program_manager.cpp.
std::vector< device_image_plain > cl::sycl::detail::ProgramManager::getSYCLDeviceImages | ( | const context & | Ctx, |
const std::vector< device > & | Devs, | ||
const DevImgSelectorImpl & | Selector, | ||
bundle_state | TargetState | ||
) |
Definition at line 1622 of file program_manager.cpp.
std::vector< device_image_plain > cl::sycl::detail::ProgramManager::getSYCLDeviceImages | ( | const context & | Ctx, |
const std::vector< device > & | Devs, | ||
const std::vector< kernel_id > & | KernelIDs, | ||
bundle_state | TargetState | ||
) |
Definition at line 1641 of file program_manager.cpp.
References cl::sycl::make_error_code().
std::vector< device_image_plain > cl::sycl::detail::ProgramManager::getSYCLDeviceImagesWithCompatibleState | ( | const context & | Ctx, |
const std::vector< device > & | Devs, | ||
bundle_state | TargetState, | ||
const std::vector< kernel_id > & | KernelIDs = {} |
||
) |
Definition at line 1497 of file program_manager.cpp.
References cl::sycl::detail::compatibleWithDevice(), and cl::sycl::detail::getBinImageState().
kernel_id cl::sycl::detail::ProgramManager::getSYCLKernelID | ( | const std::string & | KernelName | ) |
Definition at line 1442 of file program_manager.cpp.
References PI_INVALID_KERNEL_NAME.
Referenced by cl::sycl::detail::ExecCGCommand::emitInstrumentationData(), and cl::sycl::detail::enqueueImpKernel().
bool cl::sycl::detail::ProgramManager::kernelUsesAssert | ( | OSModuleHandle | M, |
const std::string & | KernelName | ||
) | const |
Definition at line 1080 of file program_manager.cpp.
References cl::sycl::detail::pi::DeviceBinaryImage::PropertyRange::end().
std::vector< device_image_plain > cl::sycl::detail::ProgramManager::link | ( | const std::vector< device_image_plain > & | DeviceImages, |
const std::vector< device > & | Devs, | ||
const property_list & | PropList | ||
) |
Definition at line 1735 of file program_manager.cpp.
References cl::sycl::detail::appendLinkOptionsFromImage(), cl::sycl::detail::applyLinkOptionsFromEnvironment(), cl::sycl::build(), cl::sycl::detail::plugin::call_nocheck(), cl::sycl::detail::getSyclObjImpl(), cl::sycl::make_error_code(), PI_SUCCESS, piProgramLink(), and cl::sycl::detail::plugin::reportPiError().