27 #include <unordered_map>
28 #include <unordered_set>
50 const RTDeviceBinaryImage &BinImages);
90 const std::string &KernelName,
93 bool JITCompilationIsRequired =
false);
97 bool JITCompilationIsRequired =
false);
118 std::pair<RT::PiProgram, bool>
121 const std::string &CompileAndLinkOptions,
139 const std::string &KernelName,
141 bool JITCompilationIsRequired =
false);
145 const std::string &KernelName,
147 bool JITCompilationIsRequired =
false);
149 std::tuple<RT::PiKernel, std::mutex *, RT::PiProgram>
152 const std::string &KernelName,
const program_impl *Prg);
158 void debugPrintBinaryImages()
const;
159 static std::string getProgramBuildLog(
const RT::PiProgram &Program,
186 const std::string &KernelName);
190 kernel_id getSYCLKernelID(
const std::string &KernelName);
194 std::vector<kernel_id> getAllSYCLKernelIDs();
198 kernel_id getBuiltInKernelID(
const std::string &KernelName);
202 void addOrInitDeviceGlobalEntry(
const void *DeviceGlobalPtr,
203 const char *UniqueId);
206 bool hasCompatibleImage(
const device &Dev);
214 std::vector<DeviceGlobalMapEntry *>
215 getDeviceGlobalEntries(
const std::vector<std::string> &UniqueIds,
216 bool ExcludeDeviceImageScopeDecorated =
false);
224 std::vector<device_image_plain> getSYCLDeviceImagesWithCompatibleState(
225 const context &Ctx,
const std::vector<device> &Devs,
226 bundle_state TargetState,
const std::vector<kernel_id> &KernelIDs = {});
230 bringSYCLDeviceImagesToState(std::vector<device_image_plain> &DeviceImages,
235 std::vector<device_image_plain>
236 getSYCLDeviceImages(
const context &Ctx,
const std::vector<device> &Devs,
242 std::vector<device_image_plain>
243 getSYCLDeviceImages(
const context &Ctx,
const std::vector<device> &Devs,
250 std::vector<device_image_plain>
251 getSYCLDeviceImages(
const context &Ctx,
const std::vector<device> &Devs,
252 const std::vector<kernel_id> &KernelIDs,
258 const std::vector<device> &Devs,
263 std::vector<device_image_plain>
264 link(
const std::vector<device_image_plain> &DeviceImages,
265 const std::vector<device> &Devs,
const property_list &PropList);
270 const std::vector<device> &Devs,
273 std::pair<RT::PiKernel, std::mutex *>
274 getOrCreateKernel(
const context &Context,
const std::string &KernelName,
280 bool kernelUsesAssert(
OSModuleHandle M,
const std::string &KernelName)
const;
282 std::set<RTDeviceBinaryImage *>
283 getRawDeviceImages(
const std::vector<kernel_id> &KernelIDs);
289 using ProgramPtr = std::unique_ptr<remove_pointer_t<RT::PiProgram>,
292 const std::string &CompileOptions,
293 const std::string &LinkOptions,
const RT::PiDevice &Device,
294 uint32_t DeviceLibReqMask);
300 const std::string &KernelName)
const;
303 uint32_t SequenceID = 0)
const;
322 using RTDeviceBinaryImageUPtr = std::unique_ptr<RTDeviceBinaryImage>;
329 std::unique_ptr<std::vector<RTDeviceBinaryImageUPtr>>>
332 using StrToKSIdMap = std::unordered_map<std::string, KernelSetId>;
336 std::unordered_map<OSModuleHandle, StrToKSIdMap> m_KernelSets;
341 std::unordered_map<OSModuleHandle, KernelSetId> m_OSModuleKernelSets;
348 std::unordered_map<std::string, kernel_id> m_KernelName2KernelIDs;
353 std::unordered_multimap<kernel_id, RTDeviceBinaryImage *>
354 m_KernelIDs2BinImage;
362 std::shared_ptr<std::vector<kernel_id>>>
369 std::mutex m_KernelIDsMutex;
377 std::unordered_set<std::string> m_ServiceKernels;
382 std::unordered_set<std::string> m_ExportedSymbols;
386 std::unordered_map<std::string, kernel_id> m_BuiltInKernelIDs;
389 std::mutex m_BuiltInKernelIDsMutex;
404 std::unordered_map<pi::PiProgram, const RTDeviceBinaryImage *> NativePrograms;
407 std::mutex MNativeProgramsMutex;
409 using KernelNameToArgMaskMap = std::unordered_map<std::string, KernelArgMask>;
412 std::unordered_map<const RTDeviceBinaryImage *, KernelNameToArgMaskMap>
413 m_EliminatedKernelArgMasks;
416 bool m_UseSpvFile =
false;
418 using KernelNameWithOSModule = std::pair<std::string, OSModuleHandle>;
419 std::set<KernelNameWithOSModule> m_KernelUsesAssert;
422 std::unordered_map<std::string, std::unique_ptr<DeviceGlobalMapEntry>>
424 std::unordered_map<const void *, DeviceGlobalMapEntry *> m_Ptr2DeviceGlobal;
427 std::mutex m_DeviceGlobalsMutex;