Skip to content

Commit f35500c

Browse files
committed
[SYCL] Don't hold lock for entire build method
1 parent 3276ac8 commit f35500c

File tree

2 files changed

+18
-27
lines changed

2 files changed

+18
-27
lines changed

sycl/source/detail/program_manager/program_manager.cpp

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -567,8 +567,7 @@ RT::PiProgram ProgramManager::getBuiltPIProgram(
567567

568568
ProgramPtr BuiltProgram =
569569
build(std::move(ProgramManaged), ContextImpl, CompileOpts, LinkOpts,
570-
getRawSyclObjImpl(Device)->getHandleRef(),
571-
ContextImpl->acquireCachedLibPrograms().get(), DeviceLibReqMask);
570+
getRawSyclObjImpl(Device)->getHandleRef(), DeviceLibReqMask);
572571

573572
emitBuiltProgramInfo(BuiltProgram.get(), ContextImpl);
574573

@@ -779,13 +778,14 @@ static const char *getDeviceLibExtensionStr(DeviceLibExt Extension) {
779778
PI_INVALID_OPERATION);
780779
}
781780

782-
static RT::PiProgram loadDeviceLibFallback(
783-
const ContextImplPtr Context, DeviceLibExt Extension,
784-
const RT::PiDevice &Device,
785-
std::map<std::pair<DeviceLibExt, RT::PiDevice>, RT::PiProgram>
786-
&CachedLibPrograms) {
781+
static RT::PiProgram loadDeviceLibFallback(const ContextImplPtr Context,
782+
DeviceLibExt Extension,
783+
const RT::PiDevice &Device) {
787784

788785
const char *LibFileName = getDeviceLibFilename(Extension);
786+
787+
auto LockedCache = Context->acquireCachedLibPrograms();
788+
auto CachedLibPrograms = LockedCache.get();
789789
auto CacheResult = CachedLibPrograms.emplace(
790790
std::make_pair(std::make_pair(Extension, Device), nullptr));
791791
bool Cached = !CacheResult.second;
@@ -923,11 +923,9 @@ static bool isDeviceLibRequired(DeviceLibExt Ext, uint32_t DeviceLibReqMask) {
923923
return ((DeviceLibReqMask & Mask) == Mask);
924924
}
925925

926-
static std::vector<RT::PiProgram> getDeviceLibPrograms(
927-
const ContextImplPtr Context, const RT::PiDevice &Device,
928-
std::map<std::pair<DeviceLibExt, RT::PiDevice>, RT::PiProgram>
929-
&CachedLibPrograms,
930-
uint32_t DeviceLibReqMask) {
926+
static std::vector<RT::PiProgram>
927+
getDeviceLibPrograms(const ContextImplPtr Context, const RT::PiDevice &Device,
928+
uint32_t DeviceLibReqMask) {
931929
std::vector<RT::PiProgram> Programs;
932930

933931
std::pair<DeviceLibExt, bool> RequiredDeviceLibExt[] = {
@@ -975,21 +973,18 @@ static std::vector<RT::PiProgram> getDeviceLibPrograms(
975973
bool DeviceSupports = DevExtList.npos != DevExtList.find(ExtStr);
976974

977975
if (!DeviceSupports || InhibitNativeImpl) {
978-
Programs.push_back(
979-
loadDeviceLibFallback(Context, Ext, Device, CachedLibPrograms));
976+
Programs.push_back(loadDeviceLibFallback(Context, Ext, Device));
980977
FallbackIsLoaded = true;
981978
}
982979
}
983980
return Programs;
984981
}
985982

986-
ProgramManager::ProgramPtr ProgramManager::build(
987-
ProgramPtr Program, const ContextImplPtr Context,
988-
const std::string &CompileOptions, const std::string &LinkOptions,
989-
const RT::PiDevice &Device,
990-
std::map<std::pair<DeviceLibExt, RT::PiDevice>, RT::PiProgram>
991-
&CachedLibPrograms,
992-
uint32_t DeviceLibReqMask) {
983+
ProgramManager::ProgramPtr
984+
ProgramManager::build(ProgramPtr Program, const ContextImplPtr Context,
985+
const std::string &CompileOptions,
986+
const std::string &LinkOptions,
987+
const RT::PiDevice &Device, uint32_t DeviceLibReqMask) {
993988

994989
if (DbgProgMgr > 0) {
995990
std::cerr << ">>> ProgramManager::build(" << Program.get() << ", "
@@ -1008,8 +1003,7 @@ ProgramManager::ProgramPtr ProgramManager::build(
10081003

10091004
std::vector<RT::PiProgram> LinkPrograms;
10101005
if (LinkDeviceLibs) {
1011-
LinkPrograms = getDeviceLibPrograms(Context, Device, CachedLibPrograms,
1012-
DeviceLibReqMask);
1006+
LinkPrograms = getDeviceLibPrograms(Context, Device, DeviceLibReqMask);
10131007
}
10141008

10151009
static const char *ForceLinkEnv = std::getenv("SYCL_FORCE_LINK");
@@ -1899,8 +1893,7 @@ device_image_plain ProgramManager::build(const device_image_plain &DeviceImage,
18991893

19001894
ProgramPtr BuiltProgram =
19011895
build(std::move(ProgramManaged), ContextImpl, CompileOpts, LinkOpts,
1902-
getRawSyclObjImpl(Devs[0])->getHandleRef(),
1903-
ContextImpl->acquireCachedLibPrograms().get(), DeviceLibReqMask);
1896+
getRawSyclObjImpl(Devs[0])->getHandleRef(), DeviceLibReqMask);
19041897

19051898
emitBuiltProgramInfo(BuiltProgram.get(), ContextImpl);
19061899

sycl/source/detail/program_manager/program_manager.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,6 @@ class ProgramManager {
261261
ProgramPtr build(ProgramPtr Program, const ContextImplPtr Context,
262262
const std::string &CompileOptions,
263263
const std::string &LinkOptions, const RT::PiDevice &Device,
264-
std::map<std::pair<DeviceLibExt, RT::PiDevice>,
265-
RT::PiProgram> &CachedLibPrograms,
266264
uint32_t DeviceLibReqMask);
267265
/// Provides a new kernel set id for grouping kernel names together
268266
KernelSetId getNextKernelSetId() const;

0 commit comments

Comments
 (0)