@@ -871,14 +871,12 @@ ur_program_handle_t ProgramManager::getBuiltURProgram(
871
871
if (!DeviceImpl.isRootDevice ()) {
872
872
RootDevImpl = &DeviceImpl;
873
873
while (!RootDevImpl->isRootDevice ()) {
874
- device_impl *ParentDev =
875
- detail::getSyclObjImpl (
876
- RootDevImpl->get_info <info::device::parent_device>())
877
- .get ();
874
+ device_impl &ParentDev = *detail::getSyclObjImpl (
875
+ RootDevImpl->get_info <info::device::parent_device>());
878
876
// Sharing is allowed within a single context only
879
- if (!ContextImpl.hasDevice (* ParentDev))
877
+ if (!ContextImpl.hasDevice (ParentDev))
880
878
break ;
881
- RootDevImpl = ParentDev;
879
+ RootDevImpl = & ParentDev;
882
880
}
883
881
884
882
ContextImpl.getAdapter ()->call <UrApiKind::urDeviceGetInfo>(
@@ -2714,7 +2712,7 @@ device_image_plain ProgramManager::createDependencyImage(
2714
2712
void ProgramManager::bringSYCLDeviceImageToState (
2715
2713
DevImgPlainWithDeps &DeviceImage, bundle_state TargetState) {
2716
2714
device_image_plain &MainImg = DeviceImage.getMain ();
2717
- const DeviceImageImplPtr &MainImgImpl = getSyclObjImpl (MainImg);
2715
+ device_image_impl &MainImgImpl = * getSyclObjImpl (MainImg);
2718
2716
const bundle_state DevImageState = getSyclObjImpl (MainImg)->get_state ();
2719
2717
// At this time, there is no circumstance where a device image should ever
2720
2718
// be in the source state. That not good.
@@ -2731,7 +2729,7 @@ void ProgramManager::bringSYCLDeviceImageToState(
2731
2729
break ;
2732
2730
case bundle_state::object:
2733
2731
if (DevImageState == bundle_state::input) {
2734
- DeviceImage = compile (DeviceImage, MainImgImpl-> get_devices (),
2732
+ DeviceImage = compile (DeviceImage, MainImgImpl. get_devices (),
2735
2733
/* PropList=*/ {});
2736
2734
break ;
2737
2735
}
@@ -2746,12 +2744,12 @@ void ProgramManager::bringSYCLDeviceImageToState(
2746
2744
assert (DevImageState != bundle_state::ext_oneapi_source);
2747
2745
break ;
2748
2746
case bundle_state::input:
2749
- DeviceImage = build (DeviceImage, MainImgImpl-> get_devices (),
2747
+ DeviceImage = build (DeviceImage, MainImgImpl. get_devices (),
2750
2748
/* PropList=*/ {});
2751
2749
break ;
2752
2750
case bundle_state::object: {
2753
2751
std::vector<device_image_plain> LinkedDevImages =
2754
- link (DeviceImage.getAll (), MainImgImpl-> get_devices (),
2752
+ link (DeviceImage.getAll (), MainImgImpl. get_devices (),
2755
2753
/* PropList=*/ {});
2756
2754
// Since only one device image is passed here one output device image is
2757
2755
// expected
@@ -2760,7 +2758,7 @@ void ProgramManager::bringSYCLDeviceImageToState(
2760
2758
break ;
2761
2759
}
2762
2760
case bundle_state::executable:
2763
- DeviceImage = build (DeviceImage, MainImgImpl-> get_devices (),
2761
+ DeviceImage = build (DeviceImage, MainImgImpl. get_devices (),
2764
2762
/* PropList=*/ {});
2765
2763
break ;
2766
2764
}
@@ -2920,21 +2918,20 @@ mergeImageData(const std::vector<device_image_plain> &Imgs,
2920
2918
device_image_impl::SpecConstMapT &NewSpecConstMap,
2921
2919
std::unique_ptr<DynRTDeviceBinaryImage> &MergedImageStorage) {
2922
2920
for (const device_image_plain &Img : Imgs) {
2923
- const std::shared_ptr<device_image_impl> &DeviceImageImpl =
2924
- getSyclObjImpl (Img);
2921
+ device_image_impl &DeviceImageImpl = *getSyclObjImpl (Img);
2925
2922
// Duplicates are not expected here, otherwise urProgramLink should fail
2926
- if (DeviceImageImpl-> get_kernel_ids_ptr ())
2923
+ if (DeviceImageImpl. get_kernel_ids_ptr ())
2927
2924
KernelIDs.insert (KernelIDs.end (),
2928
- DeviceImageImpl-> get_kernel_ids_ptr ()->begin (),
2929
- DeviceImageImpl-> get_kernel_ids_ptr ()->end ());
2925
+ DeviceImageImpl. get_kernel_ids_ptr ()->begin (),
2926
+ DeviceImageImpl. get_kernel_ids_ptr ()->end ());
2930
2927
// To be able to answer queries about specialziation constants, the new
2931
2928
// device image should have the specialization constants from all the linked
2932
2929
// images.
2933
2930
const std::lock_guard<std::mutex> SpecConstLock (
2934
- DeviceImageImpl-> get_spec_const_data_lock ());
2931
+ DeviceImageImpl. get_spec_const_data_lock ());
2935
2932
// Copy all map entries to the new map. Since the blob will be copied to
2936
2933
// the end of the new blob we need to move the blob offset of each entry.
2937
- for (const auto &SpecConstIt : DeviceImageImpl-> get_spec_const_data_ref ()) {
2934
+ for (const auto &SpecConstIt : DeviceImageImpl. get_spec_const_data_ref ()) {
2938
2935
std::vector<device_image_impl::SpecConstDescT> &NewDescEntries =
2939
2936
NewSpecConstMap[SpecConstIt.first ];
2940
2937
@@ -2952,8 +2949,8 @@ mergeImageData(const std::vector<device_image_plain> &Imgs,
2952
2949
// Copy the blob from the device image into the new blob. This moves the
2953
2950
// offsets of the following blobs.
2954
2951
NewSpecConstBlob.insert (NewSpecConstBlob.end (),
2955
- DeviceImageImpl-> get_spec_const_blob_ref ().begin (),
2956
- DeviceImageImpl-> get_spec_const_blob_ref ().end ());
2952
+ DeviceImageImpl. get_spec_const_blob_ref ().begin (),
2953
+ DeviceImageImpl. get_spec_const_blob_ref ().end ());
2957
2954
}
2958
2955
// device_image_impl expects kernel ids to be sorted for fast search
2959
2956
std::sort (KernelIDs.begin (), KernelIDs.end (), LessByHash<kernel_id>{});
@@ -2999,14 +2996,13 @@ ProgramManager::link(const std::vector<device_image_plain> &Imgs,
2999
2996
// FIXME: Linker options are picked from the first object, but is that safe?
3000
2997
std::string LinkOptionsStr;
3001
2998
applyLinkOptionsFromEnvironment (LinkOptionsStr);
3002
- const std::shared_ptr<device_image_impl> &FirstImgImpl =
3003
- getSyclObjImpl (Imgs[0 ]);
3004
- if (LinkOptionsStr.empty () && FirstImgImpl->get_bin_image_ref ())
2999
+ device_image_impl &FirstImgImpl = *getSyclObjImpl (Imgs[0 ]);
3000
+ if (LinkOptionsStr.empty () && FirstImgImpl.get_bin_image_ref ())
3005
3001
appendLinkOptionsFromImage (LinkOptionsStr,
3006
- *(FirstImgImpl-> get_bin_image_ref ()));
3002
+ *(FirstImgImpl. get_bin_image_ref ()));
3007
3003
// Should always come last!
3008
3004
appendLinkEnvironmentVariablesThatAppend (LinkOptionsStr);
3009
- const context &Context = FirstImgImpl-> get_context ();
3005
+ const context &Context = FirstImgImpl. get_context ();
3010
3006
context_impl &ContextImpl = *getSyclObjImpl (Context);
3011
3007
const AdapterPtr &Adapter = ContextImpl.getAdapter ();
3012
3008
@@ -3059,11 +3055,9 @@ ProgramManager::link(const std::vector<device_image_plain> &Imgs,
3059
3055
// removal of map entries with same handle (obviously invalid entries).
3060
3056
std::ignore = NativePrograms.erase (LinkedProg);
3061
3057
for (const device_image_plain &Img : Imgs) {
3062
- const std::shared_ptr<device_image_impl> &ImgImpl = getSyclObjImpl (Img);
3063
- if (ImgImpl->get_bin_image_ref ())
3058
+ if (auto BinImageRef = getSyclObjImpl (Img)->get_bin_image_ref ())
3064
3059
NativePrograms.insert (
3065
- {LinkedProg,
3066
- {ContextImpl.shared_from_this (), ImgImpl->get_bin_image_ref ()}});
3060
+ {LinkedProg, {ContextImpl.shared_from_this (), BinImageRef}});
3067
3061
}
3068
3062
}
3069
3063
@@ -3077,14 +3071,14 @@ ProgramManager::link(const std::vector<device_image_plain> &Imgs,
3077
3071
KernelNameSetT MergedKernelNames;
3078
3072
std::unordered_map<std::string, KernelArgMask> MergedEliminatedKernelArgMasks;
3079
3073
for (const device_image_plain &DevImg : Imgs) {
3080
- const DeviceImageImplPtr &DevImgImpl = getSyclObjImpl (DevImg);
3081
- CombinedOrigins |= DevImgImpl-> getOriginMask ();
3082
- RTCInfoPtrs.emplace_back (&(DevImgImpl-> getRTCInfo ()));
3083
- MergedKernelNames.insert (DevImgImpl-> getKernelNames ().begin (),
3084
- DevImgImpl-> getKernelNames ().end ());
3074
+ device_image_impl &DevImgImpl = * getSyclObjImpl (DevImg);
3075
+ CombinedOrigins |= DevImgImpl. getOriginMask ();
3076
+ RTCInfoPtrs.emplace_back (&(DevImgImpl. getRTCInfo ()));
3077
+ MergedKernelNames.insert (DevImgImpl. getKernelNames ().begin (),
3078
+ DevImgImpl. getKernelNames ().end ());
3085
3079
MergedEliminatedKernelArgMasks.insert (
3086
- DevImgImpl-> getEliminatedKernelArgMasks ().begin (),
3087
- DevImgImpl-> getEliminatedKernelArgMasks ().end ());
3080
+ DevImgImpl. getEliminatedKernelArgMasks ().begin (),
3081
+ DevImgImpl. getEliminatedKernelArgMasks ().end ());
3088
3082
}
3089
3083
auto MergedRTCInfo = detail::KernelCompilerBinaryInfo::Merge (RTCInfoPtrs);
3090
3084
@@ -3114,10 +3108,9 @@ ProgramManager::build(const DevImgPlainWithDeps &DevImgWithDeps,
3114
3108
PropList, NoAllowedPropertiesCheck, NoAllowedPropertiesCheck);
3115
3109
}
3116
3110
3117
- const std::shared_ptr<device_image_impl> &MainInputImpl =
3118
- getSyclObjImpl (DevImgWithDeps.getMain ());
3111
+ device_image_impl &MainInputImpl = *getSyclObjImpl (DevImgWithDeps.getMain ());
3119
3112
3120
- const context &Context = MainInputImpl-> get_context ();
3113
+ const context &Context = MainInputImpl. get_context ();
3121
3114
context_impl &ContextImpl = *detail::getSyclObjImpl (Context);
3122
3115
3123
3116
std::vector<const RTDeviceBinaryImage *> BinImgs;
@@ -3130,7 +3123,7 @@ ProgramManager::build(const DevImgPlainWithDeps &DevImgWithDeps,
3130
3123
device_image_impl::SpecConstMapT SpecConstMap;
3131
3124
3132
3125
std::unique_ptr<DynRTDeviceBinaryImage> MergedImageStorage;
3133
- const RTDeviceBinaryImage *ResultBinImg = MainInputImpl-> get_bin_image_ref ();
3126
+ const RTDeviceBinaryImage *ResultBinImg = MainInputImpl. get_bin_image_ref ();
3134
3127
if (DevImgWithDeps.hasDeps ()) {
3135
3128
KernelIDs = std::make_shared<std::vector<kernel_id>>();
3136
3129
// Sort the images to make the order of spec constant values used for
@@ -3144,9 +3137,9 @@ ProgramManager::build(const DevImgPlainWithDeps &DevImgWithDeps,
3144
3137
ResultBinImg = mergeImageData (SortedImgs, *KernelIDs, SpecConstBlob,
3145
3138
SpecConstMap, MergedImageStorage);
3146
3139
} else {
3147
- KernelIDs = MainInputImpl-> get_kernel_ids_ptr ();
3148
- SpecConstBlob = MainInputImpl-> get_spec_const_blob_ref ();
3149
- SpecConstMap = MainInputImpl-> get_spec_const_data_ref ();
3140
+ KernelIDs = MainInputImpl. get_kernel_ids_ptr ();
3141
+ SpecConstBlob = MainInputImpl. get_spec_const_blob_ref ();
3142
+ SpecConstMap = MainInputImpl. get_spec_const_data_ref ();
3150
3143
}
3151
3144
3152
3145
ur_program_handle_t ResProgram = getBuiltURProgram (
@@ -3163,13 +3156,13 @@ ProgramManager::build(const DevImgPlainWithDeps &DevImgWithDeps,
3163
3156
KernelNameSetT MergedKernelNames;
3164
3157
std::unordered_map<std::string, KernelArgMask> MergedEliminatedKernelArgMasks;
3165
3158
for (const device_image_plain &DevImg : DevImgWithDeps) {
3166
- const auto &DevImgImpl = getSyclObjImpl (DevImg);
3167
- RTCInfoPtrs.emplace_back (&(DevImgImpl-> getRTCInfo ()));
3168
- MergedKernelNames.insert (DevImgImpl-> getKernelNames ().begin (),
3169
- DevImgImpl-> getKernelNames ().end ());
3159
+ device_image_impl &DevImgImpl = * getSyclObjImpl (DevImg);
3160
+ RTCInfoPtrs.emplace_back (&(DevImgImpl. getRTCInfo ()));
3161
+ MergedKernelNames.insert (DevImgImpl. getKernelNames ().begin (),
3162
+ DevImgImpl. getKernelNames ().end ());
3170
3163
MergedEliminatedKernelArgMasks.insert (
3171
- DevImgImpl-> getEliminatedKernelArgMasks ().begin (),
3172
- DevImgImpl-> getEliminatedKernelArgMasks ().end ());
3164
+ DevImgImpl. getEliminatedKernelArgMasks ().begin (),
3165
+ DevImgImpl. getEliminatedKernelArgMasks ().end ());
3173
3166
}
3174
3167
auto MergedRTCInfo = detail::KernelCompilerBinaryInfo::Merge (RTCInfoPtrs);
3175
3168
0 commit comments