diff --git a/sycl/source/detail/context_impl.cpp b/sycl/source/detail/context_impl.cpp index 343a53648d95..941f2a2e8456 100644 --- a/sycl/source/detail/context_impl.cpp +++ b/sycl/source/detail/context_impl.cpp @@ -431,7 +431,7 @@ std::vector context_impl::initializeDeviceGlobals( // are cleaned up separately from cleaning up the device global USM memory // this must retain the event. { - if (OwnedUrEvent ZIEvent = DeviceGlobalUSM.getInitEvent(Adapter)) + if (OwnedUrEvent ZIEvent = DeviceGlobalUSM.getInitEvent(*Adapter)) InitEventsRef.push_back(ZIEvent.TransferOwnership()); } // Write the pointer to the device global and store the event in the diff --git a/sycl/source/detail/device_global_map_entry.cpp b/sycl/source/detail/device_global_map_entry.cpp index 30ed8c799aef..907a54d3fb2d 100644 --- a/sycl/source/detail/device_global_map_entry.cpp +++ b/sycl/source/detail/device_global_map_entry.cpp @@ -25,13 +25,13 @@ DeviceGlobalUSMMem::~DeviceGlobalUSMMem() { assert(!MInitEvent.has_value() && "MInitEvent has not been cleaned up."); } -OwnedUrEvent DeviceGlobalUSMMem::getInitEvent(const AdapterPtr &Adapter) { +OwnedUrEvent DeviceGlobalUSMMem::getInitEvent(adapter_impl &Adapter) { std::lock_guard Lock(MInitEventMutex); // If there is a init event we can remove it if it is done. if (MInitEvent.has_value()) { if (get_event_info( - *MInitEvent, *Adapter) == info::event_command_status::complete) { - Adapter->call(*MInitEvent); + *MInitEvent, Adapter) == info::event_command_status::complete) { + Adapter.call(*MInitEvent); MInitEvent = {}; return OwnedUrEvent(Adapter); } else { diff --git a/sycl/source/detail/device_global_map_entry.hpp b/sycl/source/detail/device_global_map_entry.hpp index 3623e315ed9d..b25fdac4ca68 100644 --- a/sycl/source/detail/device_global_map_entry.hpp +++ b/sycl/source/detail/device_global_map_entry.hpp @@ -39,7 +39,7 @@ struct DeviceGlobalUSMMem { // Gets the initialization event if it exists. If not the OwnedUrEvent // will contain no event. - OwnedUrEvent getInitEvent(const AdapterPtr &Adapter); + OwnedUrEvent getInitEvent(adapter_impl &Adapter); private: void *MPtr; diff --git a/sycl/source/detail/graph/graph_impl.cpp b/sycl/source/detail/graph/graph_impl.cpp index 7e9be4a7f889..a24e6c7f7843 100644 --- a/sycl/source/detail/graph/graph_impl.cpp +++ b/sycl/source/detail/graph/graph_impl.cpp @@ -1107,10 +1107,9 @@ EventImplPtr exec_graph_impl::enqueuePartitionDirectly( UrEnqueueWaitListSize == 0 ? nullptr : UrEventHandles.data(); if (!EventNeeded) { - Queue.getAdapter() - ->call( - Queue.getHandleRef(), CommandBuffer, UrEnqueueWaitListSize, - UrEnqueueWaitList, nullptr); + Queue.getAdapter().call( + Queue.getHandleRef(), CommandBuffer, UrEnqueueWaitListSize, + UrEnqueueWaitList, nullptr); return nullptr; } else { auto NewEvent = sycl::detail::event_impl::create_device_event(Queue); @@ -1118,10 +1117,9 @@ EventImplPtr exec_graph_impl::enqueuePartitionDirectly( NewEvent->setStateIncomplete(); NewEvent->setSubmissionTime(); ur_event_handle_t UrEvent = nullptr; - Queue.getAdapter() - ->call( - Queue.getHandleRef(), CommandBuffer, UrEventHandles.size(), - UrEnqueueWaitList, &UrEvent); + Queue.getAdapter().call( + Queue.getHandleRef(), CommandBuffer, UrEventHandles.size(), + UrEnqueueWaitList, &UrEvent); NewEvent->setHandle(UrEvent); NewEvent->setEventFromSubmittedExecCommandBuffer(true); return NewEvent; diff --git a/sycl/source/detail/memory_manager.cpp b/sycl/source/detail/memory_manager.cpp index a97b9694ad37..077cd918decb 100644 --- a/sycl/source/detail/memory_manager.cpp +++ b/sycl/source/detail/memory_manager.cpp @@ -198,7 +198,7 @@ void memReleaseHelper(const AdapterPtr &Adapter, ur_mem_handle_t Mem) { } } -void memBufferMapHelper(const AdapterPtr &Adapter, ur_queue_handle_t Queue, +void memBufferMapHelper(adapter_impl &Adapter, ur_queue_handle_t Queue, ur_mem_handle_t Buffer, bool Blocking, ur_map_flags_t Flags, size_t Offset, size_t Size, uint32_t NumEvents, const ur_event_handle_t *WaitList, @@ -216,12 +216,12 @@ void memBufferMapHelper(const AdapterPtr &Adapter, ur_queue_handle_t Queue, 0 /* guard zone */, CorrID); }}; #endif - Adapter->call( - Queue, Buffer, Blocking, Flags, Offset, Size, NumEvents, WaitList, Event, - RetMap); + Adapter.call(Queue, Buffer, Blocking, Flags, + Offset, Size, NumEvents, + WaitList, Event, RetMap); } -void memUnmapHelper(const AdapterPtr &Adapter, ur_queue_handle_t Queue, +void memUnmapHelper(adapter_impl &Adapter, ur_queue_handle_t Queue, ur_mem_handle_t Mem, void *MappedPtr, uint32_t NumEvents, const ur_event_handle_t *WaitList, ur_event_handle_t *Event) { @@ -241,12 +241,12 @@ void memUnmapHelper(const AdapterPtr &Adapter, ur_queue_handle_t Queue, // Always use call_nocheck here, because call may throw an exception, // and this lambda will be called from destructor, which in combination // rewards us with UB. - Adapter->call_nocheck(1, Event); + Adapter.call_nocheck(1, Event); emitMemReleaseEndTrace(MemObjID, Ptr, CorrID); }}; #endif - Adapter->call(Queue, Mem, MappedPtr, - NumEvents, WaitList, Event); + Adapter.call(Queue, Mem, MappedPtr, NumEvents, + WaitList, Event); } } @@ -506,7 +506,7 @@ void copyH2D(queue_impl &TgtQueue, SYCLMemObjI *SYCLMemObj, char *SrcMem, assert(SYCLMemObj && "The SYCLMemObj is nullptr"); const ur_queue_handle_t Queue = TgtQueue.getHandleRef(); - const AdapterPtr &Adapter = TgtQueue.getAdapter(); + adapter_impl &Adapter = TgtQueue.getAdapter(); detail::SYCLMemObjI::MemObjType MemType = SYCLMemObj->getType(); TermPositions SrcPos, DstPos; @@ -521,7 +521,7 @@ void copyH2D(queue_impl &TgtQueue, SYCLMemObjI *SYCLMemObj, char *SrcMem, if (MemType == detail::SYCLMemObjI::MemObjType::Buffer) { if (1 == DimDst && 1 == DimSrc) { - Adapter->call( + Adapter.call( Queue, DstMem, /*blocking_write=*/false, DstXOffBytes, DstAccessRangeWidthBytes, SrcMem + SrcXOffBytes, DepEvents.size(), DepEvents.data(), &OutEvent); @@ -540,7 +540,7 @@ void copyH2D(queue_impl &TgtQueue, SYCLMemObjI *SYCLMemObj, char *SrcMem, ur_rect_region_t RectRegion{DstAccessRangeWidthBytes, DstAccessRange[DstPos.YTerm], DstAccessRange[DstPos.ZTerm]}; - Adapter->call( + Adapter.call( Queue, DstMem, /*blocking_write=*/false, BufferOffset, HostOffset, RectRegion, BufferRowPitch, BufferSlicePitch, HostRowPitch, HostSlicePitch, @@ -556,7 +556,7 @@ void copyH2D(queue_impl &TgtQueue, SYCLMemObjI *SYCLMemObj, char *SrcMem, ur_rect_region_t Region{DstAccessRange[DstPos.XTerm], DstAccessRange[DstPos.YTerm], DstAccessRange[DstPos.ZTerm]}; - Adapter->call( + Adapter.call( Queue, DstMem, /*blocking_write=*/false, Origin, Region, InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), DepEvents.data(), &OutEvent); @@ -575,7 +575,7 @@ void copyD2H(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, assert(SYCLMemObj && "The SYCLMemObj is nullptr"); const ur_queue_handle_t Queue = SrcQueue.getHandleRef(); - const AdapterPtr &Adapter = SrcQueue.getAdapter(); + adapter_impl &Adapter = SrcQueue.getAdapter(); detail::SYCLMemObjI::MemObjType MemType = SYCLMemObj->getType(); TermPositions SrcPos, DstPos; @@ -596,7 +596,7 @@ void copyD2H(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, if (MemType == detail::SYCLMemObjI::MemObjType::Buffer) { if (1 == DimDst && 1 == DimSrc) { - Adapter->call( + Adapter.call( Queue, SrcMem, /*blocking_read=*/false, SrcXOffBytes, SrcAccessRangeWidthBytes, DstMem + DstXOffBytes, DepEvents.size(), DepEvents.data(), &OutEvent); @@ -615,7 +615,7 @@ void copyD2H(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, ur_rect_region_t RectRegion{SrcAccessRangeWidthBytes, SrcAccessRange[SrcPos.YTerm], SrcAccessRange[SrcPos.ZTerm]}; - Adapter->call( + Adapter.call( Queue, SrcMem, /*blocking_read=*/false, BufferOffset, HostOffset, RectRegion, BufferRowPitch, BufferSlicePitch, HostRowPitch, HostSlicePitch, @@ -631,7 +631,7 @@ void copyD2H(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, ur_rect_region_t Region{SrcAccessRange[SrcPos.XTerm], SrcAccessRange[SrcPos.YTerm], SrcAccessRange[SrcPos.ZTerm]}; - Adapter->call( + Adapter.call( Queue, SrcMem, false, Offset, Region, RowPitch, SlicePitch, DstMem, DepEvents.size(), DepEvents.data(), &OutEvent); } @@ -650,7 +650,7 @@ void copyD2D(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, assert(SYCLMemObj && "The SYCLMemObj is nullptr"); const ur_queue_handle_t Queue = SrcQueue.getHandleRef(); - const AdapterPtr &Adapter = SrcQueue.getAdapter(); + adapter_impl &Adapter = SrcQueue.getAdapter(); detail::SYCLMemObjI::MemObjType MemType = SYCLMemObj->getType(); TermPositions SrcPos, DstPos; @@ -665,7 +665,7 @@ void copyD2D(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, if (MemType == detail::SYCLMemObjI::MemObjType::Buffer) { if (1 == DimDst && 1 == DimSrc) { - Adapter->call( + Adapter.call( Queue, SrcMem, DstMem, SrcXOffBytes, DstXOffBytes, SrcAccessRangeWidthBytes, DepEvents.size(), DepEvents.data(), &OutEvent); @@ -689,7 +689,7 @@ void copyD2D(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, ur_rect_region_t Region{SrcAccessRangeWidthBytes, SrcAccessRange[SrcPos.YTerm], SrcAccessRange[SrcPos.ZTerm]}; - Adapter->call( + Adapter.call( Queue, SrcMem, DstMem, SrcOrigin, DstOrigin, Region, SrcRowPitch, SrcSlicePitch, DstRowPitch, DstSlicePitch, DepEvents.size(), DepEvents.data(), &OutEvent); @@ -702,7 +702,7 @@ void copyD2D(queue_impl &SrcQueue, SYCLMemObjI *SYCLMemObj, ur_rect_region_t Region{SrcAccessRange[SrcPos.XTerm], SrcAccessRange[SrcPos.YTerm], SrcAccessRange[SrcPos.ZTerm]}; - Adapter->call( + Adapter.call( Queue, SrcMem, DstMem, SrcOrigin, DstOrigin, Region, DepEvents.size(), DepEvents.data(), &OutEvent); } @@ -782,7 +782,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, queue_impl &Queue, ur_event_handle_t &OutEvent) { assert(SYCLMemObj && "The SYCLMemObj is nullptr"); - const AdapterPtr &Adapter = Queue.getAdapter(); + adapter_impl &Adapter = Queue.getAdapter(); if (SYCLMemObj->getType() == detail::SYCLMemObjI::MemObjType::Buffer) { @@ -795,7 +795,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, queue_impl &Queue, size_t RangeMultiplier = AccRange[0] * AccRange[1] * AccRange[2]; if (RangesUsable && OffsetUsable) { - Adapter->call( + Adapter.call( Queue.getHandleRef(), ur::cast(Mem), Pattern, PatternSize, Offset[0] * ElementSize, RangeMultiplier * ElementSize, DepEvents.size(), DepEvents.data(), &OutEvent); @@ -847,7 +847,7 @@ void *MemoryManager::map(SYCLMemObjI *, void *Mem, queue_impl &Queue, void *MappedPtr = nullptr; const size_t BytesToMap = AccessRange[0] * AccessRange[1] * AccessRange[2]; - const AdapterPtr &Adapter = Queue.getAdapter(); + adapter_impl &Adapter = Queue.getAdapter(); memBufferMapHelper(Adapter, Queue.getHandleRef(), ur::cast(Mem), false, Flags, AccessOffset[0], BytesToMap, DepEvents.size(), @@ -862,7 +862,7 @@ void MemoryManager::unmap(SYCLMemObjI *, void *Mem, queue_impl &Queue, // All DepEvents are to the same Context. // Using the adapter of the Queue. - const AdapterPtr &Adapter = Queue.getAdapter(); + adapter_impl &Adapter = Queue.getAdapter(); memUnmapHelper(Adapter, Queue.getHandleRef(), ur::cast(Mem), MappedPtr, DepEvents.size(), DepEvents.data(), &OutEvent); } @@ -871,12 +871,12 @@ void MemoryManager::copy_usm(const void *SrcMem, queue_impl &SrcQueue, size_t Len, void *DstMem, std::vector DepEvents, ur_event_handle_t *OutEvent) { - const AdapterPtr &Adapter = SrcQueue.getAdapter(); + adapter_impl &Adapter = SrcQueue.getAdapter(); if (!Len) { // no-op, but ensure DepEvents will still be waited on if (!DepEvents.empty()) { - Adapter->call(SrcQueue.getHandleRef(), - DepEvents.size(), - DepEvents.data(), OutEvent); + Adapter.call(SrcQueue.getHandleRef(), + DepEvents.size(), + DepEvents.data(), OutEvent); } return; } @@ -885,10 +885,10 @@ void MemoryManager::copy_usm(const void *SrcMem, queue_impl &SrcQueue, throw exception(make_error_code(errc::invalid), "NULL pointer argument in memory copy operation."); - Adapter->call(SrcQueue.getHandleRef(), - /* blocking */ false, DstMem, - SrcMem, Len, DepEvents.size(), - DepEvents.data(), OutEvent); + Adapter.call(SrcQueue.getHandleRef(), + /* blocking */ false, DstMem, + SrcMem, Len, DepEvents.size(), + DepEvents.data(), OutEvent); } void MemoryManager::context_copy_usm(const void *SrcMem, context_impl *Context, @@ -907,7 +907,7 @@ void MemoryManager::fill_usm(void *Mem, queue_impl &Queue, size_t Length, ur_event_handle_t *OutEvent) { if (!Length) { // no-op, but ensure DepEvents will still be waited on if (!DepEvents.empty()) { - Queue.getAdapter()->call( + Queue.getAdapter().call( Queue.getHandleRef(), DepEvents.size(), DepEvents.data(), OutEvent); } return; @@ -916,8 +916,8 @@ void MemoryManager::fill_usm(void *Mem, queue_impl &Queue, size_t Length, if (!Mem) throw exception(make_error_code(errc::invalid), "NULL pointer argument in memory fill operation."); - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call( + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call( Queue.getHandleRef(), Mem, Pattern.size(), Pattern.data(), Length, DepEvents.size(), DepEvents.data(), OutEvent); } @@ -925,19 +925,19 @@ void MemoryManager::fill_usm(void *Mem, queue_impl &Queue, size_t Length, void MemoryManager::prefetch_usm(void *Mem, queue_impl &Queue, size_t Length, std::vector DepEvents, ur_event_handle_t *OutEvent) { - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call(Queue.getHandleRef(), Mem, - Length, 0, DepEvents.size(), - DepEvents.data(), OutEvent); + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call(Queue.getHandleRef(), Mem, + Length, 0, DepEvents.size(), + DepEvents.data(), OutEvent); } void MemoryManager::advise_usm(const void *Mem, queue_impl &Queue, size_t Length, ur_usm_advice_flags_t Advice, std::vector /*DepEvents*/, ur_event_handle_t *OutEvent) { - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call(Queue.getHandleRef(), Mem, - Length, Advice, OutEvent); + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call(Queue.getHandleRef(), Mem, Length, + Advice, OutEvent); } void MemoryManager::copy_2d_usm(const void *SrcMem, size_t SrcPitch, @@ -948,7 +948,7 @@ void MemoryManager::copy_2d_usm(const void *SrcMem, size_t SrcPitch, if (Width == 0 || Height == 0) { // no-op, but ensure DepEvents will still be waited on if (!DepEvents.empty()) { - Queue.getAdapter()->call( + Queue.getAdapter().call( Queue.getHandleRef(), DepEvents.size(), DepEvents.data(), OutEvent); } return; @@ -958,17 +958,17 @@ void MemoryManager::copy_2d_usm(const void *SrcMem, size_t SrcPitch, throw sycl::exception(sycl::make_error_code(errc::invalid), "NULL pointer argument in 2D memory copy operation."); - const AdapterPtr &Adapter = Queue.getAdapter(); + adapter_impl &Adapter = Queue.getAdapter(); bool SupportsUSMMemcpy2D = false; - Adapter->call( + Adapter.call( Queue.getContextImpl().getHandleRef(), UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, sizeof(bool), &SupportsUSMMemcpy2D, nullptr); if (SupportsUSMMemcpy2D) { // Direct memcpy2D is supported so we use this function. - Adapter->call( + Adapter.call( Queue.getHandleRef(), /*blocking=*/false, DstMem, DstPitch, SrcMem, SrcPitch, Width, Height, DepEvents.size(), DepEvents.data(), OutEvent); @@ -997,7 +997,7 @@ void MemoryManager::copy_2d_usm(const void *SrcMem, size_t SrcPitch, for (size_t I = 0; I < Height; ++I) { char *DstItBegin = static_cast(DstMem) + I * DstPitch; const char *SrcItBegin = static_cast(SrcMem) + I * SrcPitch; - Adapter->call( + Adapter.call( Queue.getHandleRef(), /* blocking */ false, DstItBegin, SrcItBegin, Width, DepEvents.size(), DepEvents.data(), CopyEvents.data() + I); @@ -1005,7 +1005,7 @@ void MemoryManager::copy_2d_usm(const void *SrcMem, size_t SrcPitch, /*TakeOwnership=*/true); } // Then insert a wait to coalesce the copy events. - Queue.getAdapter()->call( + Queue.getAdapter().call( Queue.getHandleRef(), CopyEvents.size(), CopyEvents.data(), OutEvent); } @@ -1017,7 +1017,7 @@ void MemoryManager::fill_2d_usm(void *DstMem, queue_impl &Queue, size_t Pitch, if (Width == 0 || Height == 0) { // no-op, but ensure DepEvents will still be waited on if (!DepEvents.empty()) { - Queue.getAdapter()->call( + Queue.getAdapter().call( Queue.getHandleRef(), DepEvents.size(), DepEvents.data(), OutEvent); } return; @@ -1026,8 +1026,8 @@ void MemoryManager::fill_2d_usm(void *DstMem, queue_impl &Queue, size_t Pitch, if (!DstMem) throw sycl::exception(sycl::make_error_code(errc::invalid), "NULL pointer argument in 2D memory fill operation."); - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call( + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call( Queue.getHandleRef(), DstMem, Pitch, Pattern.size(), Pattern.data(), Width, Height, DepEvents.size(), DepEvents.data(), OutEvent); } @@ -1039,7 +1039,7 @@ void MemoryManager::memset_2d_usm(void *DstMem, queue_impl &Queue, size_t Pitch, if (Width == 0 || Height == 0) { // no-op, but ensure DepEvents will still be waited on if (!DepEvents.empty()) { - Queue.getAdapter()->call( + Queue.getAdapter().call( Queue.getHandleRef(), DepEvents.size(), DepEvents.data(), OutEvent); } return; @@ -1163,8 +1163,8 @@ memcpyToDeviceGlobalDirect(queue_impl &Queue, ur_event_handle_t *OutEvent) { ur_program_handle_t Program = getOrBuildProgramForDeviceGlobal(Queue, DeviceGlobalEntry); - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call( + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call( Queue.getHandleRef(), Program, DeviceGlobalEntry->MUniqueId.c_str(), false, NumBytes, Offset, Src, DepEvents.size(), DepEvents.data(), OutEvent); @@ -1176,8 +1176,8 @@ static void memcpyFromDeviceGlobalDirect( ur_event_handle_t *OutEvent) { ur_program_handle_t Program = getOrBuildProgramForDeviceGlobal(Queue, DeviceGlobalEntry); - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call( + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call( Queue.getHandleRef(), Program, DeviceGlobalEntry->MUniqueId.c_str(), false, NumBytes, Offset, Dest, DepEvents.size(), DepEvents.data(), OutEvent); @@ -1574,7 +1574,7 @@ void MemoryManager::copy_image_bindless( sycl::make_error_code(errc::invalid), "NULL pointer argument in bindless image copy operation."); - const detail::AdapterPtr &Adapter = Queue.getAdapter(); + detail::adapter_impl &Adapter = Queue.getAdapter(); ur_exp_image_copy_region_t CopyRegion{}; CopyRegion.stype = UR_STRUCTURE_TYPE_EXP_IMAGE_COPY_REGION; @@ -1582,7 +1582,7 @@ void MemoryManager::copy_image_bindless( CopyRegion.srcOffset = SrcOffset; CopyRegion.dstOffset = DstOffset; - Adapter->call( + Adapter.call( Queue.getHandleRef(), Src, Dst, &SrcDesc, &DstDesc, &SrcFormat, &DstFormat, &CopyRegion, Flags, DepEvents.size(), DepEvents.data(), OutEvent); diff --git a/sycl/source/detail/queue_impl.cpp b/sycl/source/detail/queue_impl.cpp index 9613a24b78ed..eaa495584853 100644 --- a/sycl/source/detail/queue_impl.cpp +++ b/sycl/source/detail/queue_impl.cpp @@ -63,7 +63,7 @@ getUrEvents(const std::vector &DepEvents) { template <> uint32_t queue_impl::get_info() const { ur_result_t result = UR_RESULT_SUCCESS; - getAdapter()->call( + getAdapter().call( MQueue, UR_QUEUE_INFO_REFERENCE_COUNT, sizeof(result), &result, nullptr); return result; } @@ -657,8 +657,7 @@ void queue_impl::wait(const detail::code_location &CodeLoc) { } } - const AdapterPtr &Adapter = getAdapter(); - Adapter->call(getHandleRef()); + getAdapter().call(getHandleRef()); if (!isInOrder()) { std::vector StreamsServiceEvents; @@ -735,14 +734,13 @@ void queue_impl::destructorNotification() { } ur_native_handle_t queue_impl::getNative(int32_t &NativeHandleDesc) const { - const AdapterPtr &Adapter = getAdapter(); ur_native_handle_t Handle{}; ur_queue_native_desc_t UrNativeDesc{UR_STRUCTURE_TYPE_QUEUE_NATIVE_DESC, nullptr, nullptr}; UrNativeDesc.pNativeData = &NativeHandleDesc; - Adapter->call(MQueue, &UrNativeDesc, - &Handle); + getAdapter().call(MQueue, &UrNativeDesc, + &Handle); if (getContextImpl().getBackend() == backend::opencl) __SYCL_OCL_CALL(clRetainCommandQueue, ur::cast(Handle)); @@ -766,7 +764,7 @@ bool queue_impl::queue_empty() const { // Check the status of the backend queue if this is not a host queue. ur_bool_t IsReady = false; - getAdapter()->call( + getAdapter().call( MQueue, UR_QUEUE_INFO_EMPTY, sizeof(IsReady), &IsReady, nullptr); if (!IsReady) return false; diff --git a/sycl/source/detail/queue_impl.hpp b/sycl/source/detail/queue_impl.hpp index d6892011b991..4f72df634302 100644 --- a/sycl/source/detail/queue_impl.hpp +++ b/sycl/source/detail/queue_impl.hpp @@ -255,7 +255,7 @@ class queue_impl : public std::enable_shared_from_this { #endif throw_asynchronous(); auto status = - getAdapter()->call_nocheck(MQueue); + getAdapter().call_nocheck(MQueue); // If loader is already closed, it'll return a not-initialized status // which the UR should convert to SUCCESS code. But that isn't always // working on Windows. This is a temporary workaround until that is fixed. @@ -263,7 +263,7 @@ class queue_impl : public std::enable_shared_from_this { // ->call<>() instead of ->call_nocheck<>() above. if (status != UR_RESULT_SUCCESS && status != UR_RESULT_ERROR_UNINITIALIZED) { - __SYCL_CHECK_UR_CODE_NO_EXC(status, getAdapter()->getBackend()); + __SYCL_CHECK_UR_CODE_NO_EXC(status, getAdapter().getBackend()); } } catch (std::exception &e) { __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~queue_impl", e); @@ -274,8 +274,8 @@ class queue_impl : public std::enable_shared_from_this { cl_command_queue get() { ur_native_handle_t nativeHandle = 0; - getAdapter()->call(MQueue, nullptr, - &nativeHandle); + getAdapter().call(MQueue, nullptr, + &nativeHandle); __SYCL_OCL_CALL(clRetainCommandQueue, ur::cast(nativeHandle)); return ur::cast(nativeHandle); } @@ -285,7 +285,7 @@ class queue_impl : public std::enable_shared_from_this { return createSyclObjFromImpl(MContext); } - const AdapterPtr &getAdapter() const { return MContext->getAdapter(); } + adapter_impl &getAdapter() const { return *MContext->getAdapter(); } #ifndef __INTEL_PREVIEW_BREAKING_CHANGES const std::shared_ptr &getContextImplPtr() const { @@ -325,7 +325,7 @@ class queue_impl : public std::enable_shared_from_this { "flush cannot be called for a queue which is " "recording to a command graph."); } - getAdapter()->call(MQueue); + getAdapter().call(MQueue); } /// Submits a command group function object to the queue, in order to be @@ -487,7 +487,6 @@ class queue_impl : public std::enable_shared_from_this { ur_queue_handle_t Queue{}; ur_context_handle_t Context = MContext->getHandleRef(); ur_device_handle_t Device = MDevice.getHandleRef(); - const AdapterPtr &Adapter = getAdapter(); /* sycl::detail::pi::PiQueueProperties Properties[] = { PI_QUEUE_FLAGS, createPiQueueProperties(MPropList, Order), 0, 0, 0}; @@ -503,8 +502,8 @@ class queue_impl : public std::enable_shared_from_this { .get_index(); Properties.pNext = &IndexProperties; } - Adapter->call(Context, Device, &Properties, - &Queue); + getAdapter().call(Context, Device, &Properties, + &Queue); return Queue; } @@ -665,8 +664,8 @@ class queue_impl : public std::enable_shared_from_this { EventImplPtr insertMarkerEvent() { auto ResEvent = detail::event_impl::create_device_event(*this); ur_event_handle_t UREvent = nullptr; - getAdapter()->call(getHandleRef(), 0, - nullptr, &UREvent); + getAdapter().call(getHandleRef(), 0, + nullptr, &UREvent); ResEvent->setHandle(UREvent); return ResEvent; } @@ -690,7 +689,7 @@ class queue_impl : public std::enable_shared_from_this { queue_impl &Queue = Handler.impl->get_queue(); auto ResEvent = detail::event_impl::create_device_event(Queue); ur_event_handle_t UREvent = nullptr; - getAdapter()->call( + getAdapter().call( Queue.getHandleRef(), 0, nullptr, &UREvent); ResEvent->setHandle(UREvent); return ResEvent; diff --git a/sycl/source/detail/scheduler/commands.cpp b/sycl/source/detail/scheduler/commands.cpp index 532805840cb3..aee8319e0f06 100644 --- a/sycl/source/detail/scheduler/commands.cpp +++ b/sycl/source/detail/scheduler/commands.cpp @@ -434,7 +434,7 @@ class DispatchHostTask { // for host task? auto &Queue = HostTask.MQueue; bool NativeCommandSupport = false; - Queue->getAdapter()->call( + Queue->getAdapter().call( detail::getSyclObjImpl(Queue->get_device())->getHandleRef(), UR_DEVICE_INFO_ENQUEUE_NATIVE_COMMAND_SUPPORT_EXP, sizeof(NativeCommandSupport), &NativeCommandSupport, nullptr); @@ -449,7 +449,7 @@ class DispatchHostTask { // // This entry point is needed in order to migrate memory across // devices in the same context for CUDA and HIP backends - Queue->getAdapter()->call( + Queue->getAdapter().call( HostTask.MQueue->getHandleRef(), InteropFreeFunc, &CustomOpData, MReqUrMem.size(), MReqUrMem.data(), nullptr, 0, nullptr, nullptr); } else { @@ -548,9 +548,9 @@ void Command::waitForEvents(queue_impl *Queue, } else { std::vector RawEvents = getUrEvents(EventImpls); flushCrossQueueDeps(EventImpls); - const AdapterPtr &Adapter = Queue->getAdapter(); + adapter_impl &Adapter = Queue->getAdapter(); - Adapter->call( + Adapter.call( Queue->getHandleRef(), RawEvents.size(), &RawEvents[0], &Event); } } @@ -2316,7 +2316,7 @@ ur_mem_flags_t AccessModeToUr(access::mode AccessorMode) { // Refactored from SetKernelParamsAndLaunch to allow it to be used in the graphs // extension. static void SetArgBasedOnType( - const AdapterPtr &Adapter, ur_kernel_handle_t Kernel, + adapter_impl &Adapter, ur_kernel_handle_t Kernel, device_image_impl *DeviceImageImpl, const std::function &getMemAllocationFunc, context_impl &ContextImpl, detail::ArgDesc &Arg, size_t NextTrueIndex) { @@ -2342,17 +2342,17 @@ static void SetArgBasedOnType( ur_kernel_arg_mem_obj_properties_t MemObjData{}; MemObjData.stype = UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES; MemObjData.memoryAccess = AccessModeToUr(Req->MAccessMode); - Adapter->call(Kernel, NextTrueIndex, - &MemObjData, MemArg); + Adapter.call(Kernel, NextTrueIndex, + &MemObjData, MemArg); break; } case kernel_param_kind_t::kind_std_layout: { if (Arg.MPtr) { - Adapter->call( + Adapter.call( Kernel, NextTrueIndex, Arg.MSize, nullptr, Arg.MPtr); } else { - Adapter->call(Kernel, NextTrueIndex, - Arg.MSize, nullptr); + Adapter.call(Kernel, NextTrueIndex, + Arg.MSize, nullptr); } break; @@ -2362,16 +2362,16 @@ static void SetArgBasedOnType( ur_sampler_handle_t Sampler = (ur_sampler_handle_t)detail::getSyclObjImpl(*SamplerPtr) ->getOrCreateSampler(ContextImpl); - Adapter->call(Kernel, NextTrueIndex, - nullptr, Sampler); + Adapter.call(Kernel, NextTrueIndex, + nullptr, Sampler); break; } case kernel_param_kind_t::kind_pointer: { // We need to de-rerence this to get the actual USM allocation - that's the // pointer UR is expecting. const void *Ptr = *static_cast(Arg.MPtr); - Adapter->call(Kernel, NextTrueIndex, - nullptr, Ptr); + Adapter.call(Kernel, NextTrueIndex, + nullptr, Ptr); break; } case kernel_param_kind_t::kind_specialization_constants_buffer: { @@ -2383,7 +2383,7 @@ static void SetArgBasedOnType( MemObjProps.pNext = nullptr; MemObjProps.stype = UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES; MemObjProps.memoryAccess = UR_MEM_FLAG_READ_ONLY; - Adapter->call( + Adapter.call( Kernel, NextTrueIndex, &MemObjProps, SpecConstsBuffer); break; } @@ -2409,7 +2409,7 @@ static ur_result_t SetKernelParamsAndLaunch( void *KernelFuncPtr = nullptr, int KernelNumArgs = 0, detail::kernel_param_desc_t (*KernelParamDescGetter)(int) = nullptr, bool KernelHasSpecialCaptures = true) { - const AdapterPtr &Adapter = Queue.getAdapter(); + adapter_impl &Adapter = Queue.getAdapter(); if (SYCLConfig::get()) { std::vector Empty; @@ -2427,14 +2427,14 @@ static ur_result_t SetKernelParamsAndLaunch( switch (ParamDesc.kind) { case kernel_param_kind_t::kind_std_layout: { int Size = ParamDesc.info; - Adapter->call(Kernel, NextTrueIndex, - Size, nullptr, ArgPtr); + Adapter.call(Kernel, NextTrueIndex, + Size, nullptr, ArgPtr); break; } case kernel_param_kind_t::kind_pointer: { const void *Ptr = *static_cast(ArgPtr); - Adapter->call(Kernel, NextTrueIndex, - nullptr, Ptr); + Adapter.call(Kernel, NextTrueIndex, + nullptr, Ptr); break; } default: @@ -2461,7 +2461,7 @@ static ur_result_t SetKernelParamsAndLaunch( // CUDA-style local memory setting. Note that we may have -1 as a position, // this indicates the buffer is actually unused and was elided. if (ImplicitLocalArg.has_value() && ImplicitLocalArg.value() != -1) { - Adapter->call( + Adapter.call( Kernel, ImplicitLocalArg.value(), WorkGroupMemorySize, nullptr); } @@ -2478,7 +2478,7 @@ static ur_result_t SetKernelParamsAndLaunch( if (HasLocalSize) LocalSize = &NDRDesc.LocalSize[0]; else { - Adapter->call( + Adapter.call( Kernel, Queue.getDeviceImpl().getHandleRef(), UR_KERNEL_GROUP_INFO_COMPILE_WORK_GROUP_SIZE, sizeof(RequiredWGSize), RequiredWGSize, @@ -2520,7 +2520,7 @@ static ur_result_t SetKernelParamsAndLaunch( {{WorkGroupMemorySize}}}); } ur_event_handle_t UREvent = nullptr; - ur_result_t Error = Adapter->call_nocheck( + ur_result_t Error = Adapter.call_nocheck( Queue.getHandleRef(), Kernel, NDRDesc.Dims, HasOffset ? &NDRDesc.GlobalOffset[0] : nullptr, &NDRDesc.GlobalSize[0], LocalSize, property_list.size(), @@ -2610,7 +2610,7 @@ ur_result_t enqueueImpCommandBufferKernel( auto SetFunc = [&Adapter, &UrKernel, &DeviceImageImpl, &ContextImpl, &getMemAllocationFunc](sycl::detail::ArgDesc &Arg, size_t NextTrueIndex) { - sycl::detail::SetArgBasedOnType(Adapter, UrKernel, DeviceImageImpl.get(), + sycl::detail::SetArgBasedOnType(*Adapter, UrKernel, DeviceImageImpl.get(), getMemAllocationFunc, ContextImpl, Arg, NextTrueIndex); }; @@ -2759,8 +2759,8 @@ void enqueueImpKernel( // provided. if (KernelCacheConfig == UR_KERNEL_CACHE_CONFIG_LARGE_SLM || KernelCacheConfig == UR_KERNEL_CACHE_CONFIG_LARGE_DATA) { - const AdapterPtr &Adapter = Queue.getAdapter(); - Adapter->call( + adapter_impl &Adapter = Queue.getAdapter(); + Adapter.call( Kernel, UR_KERNEL_EXEC_INFO_CACHE_CONFIG, sizeof(ur_kernel_cache_config_t), nullptr, &KernelCacheConfig); } @@ -2807,19 +2807,18 @@ ur_result_t enqueueReadWriteHostPipe(queue_impl &Queue, } assert(Program && "Program for this hostpipe is not compiled."); - const AdapterPtr &Adapter = Queue.getAdapter(); - + adapter_impl &Adapter = Queue.getAdapter(); ur_queue_handle_t ur_q = Queue.getHandleRef(); ur_result_t Error; ur_event_handle_t UREvent = nullptr; auto OutEvent = OutEventImpl ? &UREvent : nullptr; if (read) { - Error = Adapter->call_nocheck( + Error = Adapter.call_nocheck( ur_q, Program, PipeName.c_str(), blocking, ptr, size, RawEvents.size(), RawEvents.empty() ? nullptr : &RawEvents[0], OutEvent); } else { - Error = Adapter->call_nocheck( + Error = Adapter.call_nocheck( ur_q, Program, PipeName.c_str(), blocking, ptr, size, RawEvents.size(), RawEvents.empty() ? nullptr : &RawEvents[0], OutEvent); } @@ -2853,8 +2852,8 @@ ur_result_t ExecCGCommand::enqueueImpCommandBuffer() { flushCrossQueueDeps(EventImpls); std::vector RawEvents = getUrEvents(EventImpls); if (!RawEvents.empty()) { - MQueue->getAdapter()->call(RawEvents.size(), - &RawEvents[0]); + MQueue->getAdapter().call(RawEvents.size(), + &RawEvents[0]); } ur_exp_command_buffer_sync_point_t OutSyncPoint{}; @@ -3010,7 +3009,7 @@ ur_result_t ExecCGCommand::enqueueImpCommandBuffer() { case CGType::EnqueueNativeCommand: { // Queue is created by graph_impl before creating command to submit to // scheduler. - const AdapterPtr &Adapter = MQueue->getAdapter(); + adapter_impl &Adapter = MQueue->getAdapter(); context_impl &ContextImpl = MQueue->getContextImpl(); device_impl &DeviceImpl = MQueue->getDeviceImpl(); @@ -3027,7 +3026,7 @@ ur_result_t ExecCGCommand::enqueueImpCommandBuffer() { // then passes the handle via a parameter to // urCommandBufferAppendNativeCommandExp. ur_bool_t DeviceHasSubgraphSupport = false; - Adapter->call( + Adapter.call( DeviceImpl.getHandleRef(), UR_DEVICE_INFO_COMMAND_BUFFER_SUBGRAPH_SUPPORT_EXP, sizeof(ur_bool_t), &DeviceHasSubgraphSupport, nullptr); @@ -3039,7 +3038,7 @@ ur_result_t ExecCGCommand::enqueueImpCommandBuffer() { nullptr /*pnext*/, false /* updatable */, false /* in-order */, false /* profilable*/ }; - Adapter->call( + Adapter.call( ContextImpl.getHandleRef(), DeviceImpl.getHandleRef(), &Desc, &ChildCommandBuffer); } @@ -3088,7 +3087,7 @@ ur_result_t ExecCGCommand::enqueueImpCommandBuffer() { MQueue->setInteropGraph(InteropCommandBuffer); #endif - Adapter->call( + Adapter.call( MCommandBuffer, CommandBufferInteropFreeFunc, &CustomOpData, ChildCommandBuffer, MSyncPointDeps.size(), MSyncPointDeps.empty() ? nullptr : MSyncPointDeps.data(), @@ -3100,9 +3099,10 @@ ur_result_t ExecCGCommand::enqueueImpCommandBuffer() { #endif if (ChildCommandBuffer) { - ur_result_t Res = Adapter->call_nocheck< - sycl::detail::UrApiKind::urCommandBufferReleaseExp>( - ChildCommandBuffer); + ur_result_t Res = + Adapter + .call_nocheck( + ChildCommandBuffer); (void)Res; assert(Res == UR_RESULT_SUCCESS); } @@ -3483,15 +3483,15 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { ur_bool_t NativeCommandSupport = false; assert(MQueue && "Native command should have an associated queue"); - auto &Adapter = MQueue->getAdapter(); - Adapter->call( + adapter_impl &Adapter = MQueue->getAdapter(); + Adapter.call( detail::getSyclObjImpl(MQueue->get_device())->getHandleRef(), UR_DEVICE_INFO_ENQUEUE_NATIVE_COMMAND_SUPPORT_EXP, sizeof(NativeCommandSupport), &NativeCommandSupport, nullptr); assert(NativeCommandSupport && "ext_codeplay_enqueue_native_command is not " "supported on this device"); if (auto Result = - Adapter->call_nocheck( + Adapter.call_nocheck( MQueue->getHandleRef(), InteropFreeFunc, &CustomOpData, ReqMems.size(), ReqMems.data(), nullptr, RawEvents.size(), RawEvents.data(), Event); @@ -3514,7 +3514,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { ext::oneapi::experimental::event_mode_enum::low_power) Properties.flags |= UR_EXP_ENQUEUE_EXT_FLAG_LOW_POWER_EVENTS_SUPPORT; - const AdapterPtr &Adapter = MQueue->getAdapter(); + adapter_impl &Adapter = MQueue->getAdapter(); // User can specify explicit dependencies via depends_on call that we should // honor here. It is very important for cross queue dependencies. We wait // them explicitly since barrier w/o wait list waits for all commands @@ -3522,13 +3522,13 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { // Output event for wait operation is not requested since barrier is // submitted immediately after and should synchronize it internally. if (RawEvents.size()) { - auto Result = Adapter->call_nocheck( + auto Result = Adapter.call_nocheck( MQueue->getHandleRef(), RawEvents.size(), &RawEvents[0], nullptr); if (Result != UR_RESULT_SUCCESS) return Result; } if (auto Result = - Adapter->call_nocheck( + Adapter.call_nocheck( MQueue->getHandleRef(), &Properties, 0, nullptr, Event); Result != UR_RESULT_SUCCESS) return Result; @@ -3558,7 +3558,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { ext::oneapi::experimental::event_mode_enum::low_power) Properties.flags |= UR_EXP_ENQUEUE_EXT_FLAG_LOW_POWER_EVENTS_SUPPORT; - const AdapterPtr &Adapter = MQueue->getAdapter(); + adapter_impl &Adapter = MQueue->getAdapter(); // User can specify explicit dependencies via depends_on call that we should // honor here. It is very important for cross queue dependencies. Adding // them to the barrier wait list since barrier w/ wait list waits only for @@ -3566,7 +3566,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { UrEvents.insert(UrEvents.end(), RawEvents.begin(), RawEvents.end()); if (auto Result = - Adapter->call_nocheck( + Adapter.call_nocheck( MQueue->getHandleRef(), &Properties, UrEvents.size(), &UrEvents[0], Event); Result != UR_RESULT_SUCCESS) @@ -3577,7 +3577,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { } case CGType::ProfilingTag: { assert(MQueue && "Profiling tag requires a valid queue"); - const auto &Adapter = MQueue->getAdapter(); + adapter_impl &Adapter = MQueue->getAdapter(); bool IsInOrderQueue = MQueue->isInOrder(); ur_event_handle_t *TimestampDeps = nullptr; @@ -3594,7 +3594,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { // FIXME: urEnqueueEventsWait on the L0 adapter requires a double-release. // Use that instead once it has been fixed. // See https://github.com/oneapi-src/unified-runtime/issues/2347. - Adapter->call( + Adapter.call( MQueue->getHandleRef(), /*num_events_in_wait_list=*/0, /*event_wait_list=*/nullptr, &PreTimestampMarkerEvent); @@ -3602,7 +3602,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { NumTimestampDeps = 1; } - Adapter->call( + Adapter.call( MQueue->getHandleRef(), /*blocking=*/false, NumTimestampDeps, TimestampDeps, Event); @@ -3611,16 +3611,16 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { // enqueue is blocked until it finishes. if (!IsInOrderQueue) { // We also need to release the timestamp event from the marker. - Adapter->call(PreTimestampMarkerEvent); + Adapter.call(PreTimestampMarkerEvent); // FIXME: Due to a bug in the L0 UR adapter, we will leak events if we do // not pass an output event to the UR call. Once that is fixed, // this immediately-deleted event can be removed. ur_event_handle_t PostTimestampBarrierEvent{}; - Adapter->call( + Adapter.call( MQueue->getHandleRef(), /*num_events_in_wait_list=*/0, /*event_wait_list=*/nullptr, &PostTimestampBarrierEvent); - Adapter->call(PostTimestampBarrierEvent); + Adapter.call(PostTimestampBarrierEvent); } SetEventHandleOrDiscard(); @@ -3673,7 +3673,7 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { static_cast(MCommandGroup.get()); if (auto Result = MQueue->getAdapter() - ->call_nocheck( + .call_nocheck( MQueue->getHandleRef(), CmdBufferCG->MCommandBuffer, RawEvents.size(), RawEvents.empty() ? nullptr : &RawEvents[0], Event); @@ -3704,12 +3704,12 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { assert(MQueue && "Semaphore wait submissions should have an associated queue"); CGSemaphoreWait *SemWait = (CGSemaphoreWait *)MCommandGroup.get(); - const detail::AdapterPtr &Adapter = MQueue->getAdapter(); + detail::adapter_impl &Adapter = MQueue->getAdapter(); auto OptWaitValue = SemWait->getWaitValue(); uint64_t WaitValue = OptWaitValue.has_value() ? OptWaitValue.value() : 0; return Adapter - ->call_nocheck( + .call_nocheck( MQueue->getHandleRef(), SemWait->getExternalSemaphore(), OptWaitValue.has_value(), WaitValue, 0, nullptr, nullptr); } @@ -3717,12 +3717,12 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { assert(MQueue && "Semaphore signal submissions should have an associated queue"); CGSemaphoreSignal *SemSignal = (CGSemaphoreSignal *)MCommandGroup.get(); - const detail::AdapterPtr &Adapter = MQueue->getAdapter(); + detail::adapter_impl &Adapter = MQueue->getAdapter(); auto OptSignalValue = SemSignal->getSignalValue(); uint64_t SignalValue = OptSignalValue.has_value() ? OptSignalValue.value() : 0; return Adapter - ->call_nocheck( + .call_nocheck( MQueue->getHandleRef(), SemSignal->getExternalSemaphore(), OptSignalValue.has_value(), SignalValue, 0, nullptr, nullptr); } @@ -3743,11 +3743,11 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { case CGType::AsyncFree: { assert(MQueue && "Async free submissions should have an associated queue"); CGAsyncFree *AsyncFree = (CGAsyncFree *)MCommandGroup.get(); - const detail::AdapterPtr &Adapter = MQueue->getAdapter(); + detail::adapter_impl &Adapter = MQueue->getAdapter(); void *ptr = AsyncFree->getPtr(); if (auto Result = - Adapter->call_nocheck( + Adapter.call_nocheck( MQueue->getHandleRef(), nullptr, ptr, RawEvents.size(), RawEvents.data(), Event); Result != UR_RESULT_SUCCESS) @@ -3765,9 +3765,9 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { return UR_RESULT_SUCCESS; } assert(MQueue && "Empty node should have an associated queue"); - const detail::AdapterPtr &Adapter = MQueue->getAdapter(); + detail::adapter_impl &Adapter = MQueue->getAdapter(); ur_event_handle_t Event; - if (auto Result = Adapter->call_nocheck( + if (auto Result = Adapter.call_nocheck( MQueue->getHandleRef(), RawEvents.size(), RawEvents.size() ? &RawEvents[0] : nullptr, &Event); Result != UR_RESULT_SUCCESS) diff --git a/sycl/source/detail/ur_utils.hpp b/sycl/source/detail/ur_utils.hpp index 36538cd1deb1..40cee2ba0e00 100644 --- a/sycl/source/detail/ur_utils.hpp +++ b/sycl/source/detail/ur_utils.hpp @@ -21,11 +21,11 @@ namespace detail { // RAII object for keeping ownership of a UR event. struct OwnedUrEvent { - OwnedUrEvent(const AdapterPtr &Adapter) - : MEvent{std::nullopt}, MAdapter{Adapter} {} - OwnedUrEvent(ur_event_handle_t Event, const AdapterPtr &Adapter, + OwnedUrEvent(adapter_impl &Adapter) + : MEvent{std::nullopt}, MAdapter{&Adapter} {} + OwnedUrEvent(ur_event_handle_t Event, adapter_impl &Adapter, bool TakeOwnership = false) - : MEvent(Event), MAdapter(Adapter) { + : MEvent(Event), MAdapter(&Adapter) { // If it is not instructed to take ownership, retain the event to share // ownership of it. if (!TakeOwnership) @@ -65,7 +65,7 @@ struct OwnedUrEvent { private: std::optional MEvent; - const AdapterPtr &MAdapter; + adapter_impl *MAdapter; }; namespace ur { diff --git a/sycl/source/interop_handle.cpp b/sycl/source/interop_handle.cpp index 3731e9ade10a..77bf655e9c12 100644 --- a/sycl/source/interop_handle.cpp +++ b/sycl/source/interop_handle.cpp @@ -43,9 +43,9 @@ interop_handle::getNativeMem(detail::Requirement *Req) const { "Invalid memory object used inside interop"); } - auto Adapter = MQueue->getAdapter(); + detail::adapter_impl &Adapter = MQueue->getAdapter(); ur_native_handle_t Handle; - Adapter->call( + Adapter.call( Iter->second, MDevice->getHandleRef(), &Handle); return Handle; } @@ -78,10 +78,10 @@ ur_native_handle_t interop_handle::getNativeGraph() const { "No backend graph object is available for the command-group"); } - auto Adapter = MQueue->getAdapter(); + detail::adapter_impl &Adapter = MQueue->getAdapter(); ur_native_handle_t Handle = 0; - Adapter->call(Graph, - &Handle); + Adapter.call(Graph, + &Handle); return Handle; } } // namespace _V1