Skip to content

[SYCL][NFC] Small refactoring #2204

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion sycl/include/CL/sycl/detail/aligned_allocator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <CL/sycl/detail/os_util.hpp>
#include <CL/sycl/range.hpp>

#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <memory>
Expand Down
77 changes: 20 additions & 57 deletions sycl/include/CL/sycl/handler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#include <CL/sycl/sampler.hpp>
#include <CL/sycl/stl.hpp>

#include <algorithm>
#include <functional>
#include <limits>
#include <memory>
Expand Down Expand Up @@ -250,7 +249,7 @@ class __SYCL_EXPORT handler {
typename std::remove_reference<T>::type>::type>
F *storePlainArg(T &&Arg) {
MArgsStorage.emplace_back(sizeof(T));
F *Storage = (F *)MArgsStorage.back().data();
auto Storage = reinterpret_cast<F *>(MArgsStorage.back().data());
*Storage = Arg;
return Storage;
}
Expand Down Expand Up @@ -308,8 +307,8 @@ class __SYCL_EXPORT handler {
/// Streams are then forwarded to command group and flushed in the scheduler.
///
/// \param Stream is a pointer to SYCL stream.
void addStream(shared_ptr_class<detail::stream_impl> Stream) {
MStreamStorage.push_back(std::move(Stream));
void addStream(const shared_ptr_class<detail::stream_impl> &Stream) {
MStreamStorage.push_back(Stream);
}

/// Saves buffers created by handling reduction feature in handler.
Expand All @@ -318,28 +317,16 @@ class __SYCL_EXPORT handler {
/// The 'MSharedPtrStorage' suits that need.
///
/// @param ReduObj is a pointer to object that must be stored.
void addReduction(shared_ptr_class<const void> ReduObj) {
MSharedPtrStorage.push_back(std::move(ReduObj));
void addReduction(const shared_ptr_class<const void> &ReduObj) {
MSharedPtrStorage.push_back(ReduObj);
}

~handler() = default;

bool is_host() { return MIsHost; }

void associateWithHandler(detail::AccessorBaseHost *AccBase,
access::target AccTarget) {
detail::AccessorImplPtr AccImpl = detail::getSyclObjImpl(*AccBase);
detail::Requirement *Req = AccImpl.get();
// Add accessor to the list of requirements.
MRequirements.push_back(Req);
// Store copy of the accessor.
MAccStorage.push_back(std::move(AccImpl));
// Add an accessor to the handler list of associated accessors.
// For associated accessors index does not means nothing.
MAssociatedAccesors.emplace_back(detail::kernel_param_kind_t::kind_accessor,
Req, static_cast<int>(AccTarget),
/*index*/ 0);
}
access::target AccTarget);

// Recursively calls itself until arguments pack is fully processed.
// The version for regular(standard layout) argument.
Expand Down Expand Up @@ -387,7 +374,7 @@ class __SYCL_EXPORT handler {
}

template <typename T> void setArgHelper(int ArgIndex, T &&Arg) {
void *StoredArg = (void *)storePlainArg(Arg);
auto StoredArg = static_cast<void *>(storePlainArg(Arg));

if (!std::is_same<cl_mem, T>::value && std::is_pointer<T>::value) {
MArgs.emplace_back(detail::kernel_param_kind_t::kind_pointer, StoredArg,
Expand All @@ -399,7 +386,7 @@ class __SYCL_EXPORT handler {
}

void setArgHelper(int ArgIndex, sampler &&Arg) {
void *StoredArg = (void *)storePlainArg(Arg);
auto StoredArg = static_cast<void *>(storePlainArg(Arg));
MArgs.emplace_back(detail::kernel_param_kind_t::kind_sampler, StoredArg,
sizeof(sampler), ArgIndex);
}
Expand Down Expand Up @@ -791,8 +778,8 @@ class __SYCL_EXPORT handler {
/// Registers event dependencies on this command group.
///
/// \param Events is a vector of valid SYCL events to wait on.
void depends_on(vector_class<event> Events) {
for (event &Event : Events) {
void depends_on(const vector_class<event> &Events) {
for (const event &Event : Events) {
MEvents.push_back(detail::getSyclObjImpl(Event));
}
}
Expand Down Expand Up @@ -1572,8 +1559,8 @@ class __SYCL_EXPORT handler {
detail::AccessorImplPtr AccImpl = detail::getSyclObjImpl(*AccBase);

MRequirements.push_back(AccImpl.get());
MSrcPtr = (void *)AccImpl.get();
MDstPtr = (void *)Dst;
MSrcPtr = static_cast<void *>(AccImpl.get());
MDstPtr = static_cast<void *>(Dst);
// Store copy of accessor to the local storage to make sure it is alive
// until we finish
MAccStorage.push_back(std::move(AccImpl));
Expand Down Expand Up @@ -1679,7 +1666,7 @@ class __SYCL_EXPORT handler {
detail::AccessorBaseHost *AccBase = (detail::AccessorBaseHost *)&Acc;
detail::AccessorImplPtr AccImpl = detail::getSyclObjImpl(*AccBase);

MDstPtr = (void *)AccImpl.get();
MDstPtr = static_cast<void *>(AccImpl.get());
MRequirements.push_back(AccImpl.get());
MAccStorage.push_back(std::move(AccImpl));
}
Expand Down Expand Up @@ -1708,12 +1695,12 @@ class __SYCL_EXPORT handler {
detail::AccessorBaseHost *AccBase = (detail::AccessorBaseHost *)&Dst;
detail::AccessorImplPtr AccImpl = detail::getSyclObjImpl(*AccBase);

MDstPtr = (void *)AccImpl.get();
MDstPtr = static_cast<void *>(AccImpl.get());
MRequirements.push_back(AccImpl.get());
MAccStorage.push_back(std::move(AccImpl));

MPattern.resize(sizeof(T));
T *PatternPtr = (T *)MPattern.data();
auto PatternPtr = reinterpret_cast<T *>(MPattern.data());
*PatternPtr = Pattern;
} else {

Expand Down Expand Up @@ -1741,54 +1728,30 @@ class __SYCL_EXPORT handler {
///
/// \param WaitList is a vector of valid SYCL events that need to complete
/// before barrier command can be executed.
void barrier(const vector_class<event> &WaitList) {
throwIfActionIsCreated();
MCGType = detail::CG::BARRIER_WAITLIST;
MEventsWaitWithBarrier.resize(WaitList.size());
std::transform(
WaitList.begin(), WaitList.end(), MEventsWaitWithBarrier.begin(),
[](const event &Event) { return detail::getSyclObjImpl(Event); });
}
void barrier(const vector_class<event> &WaitList);

/// Copies data from one memory region to another, both pointed by
/// USM pointers.
///
/// \param Dest is a USM pointer to the destination memory.
/// \param Src is a USM pointer to the source memory.
/// \param Count is a number of bytes to copy.
void memcpy(void *Dest, const void *Src, size_t Count) {
throwIfActionIsCreated();
MSrcPtr = const_cast<void *>(Src);
MDstPtr = Dest;
MLength = Count;
MCGType = detail::CG::COPY_USM;
}
void memcpy(void *Dest, const void *Src, size_t Count);

/// Fills the memory pointed by a USM pointer with the value specified.
///
/// \param Dest is a USM pointer to the memory to fill.
/// \param Value is a value to be set. Value is cast as an unsigned char.
/// \param Count is a number of bytes to fill.
void memset(void *Dest, int Value, size_t Count) {
throwIfActionIsCreated();
MDstPtr = Dest;
MPattern.push_back((char)Value);
MLength = Count;
MCGType = detail::CG::FILL_USM;
}
void memset(void *Dest, int Value, size_t Count);

/// Provides hints to the runtime library that data should be made available
/// on a device earlier than Unified Shared Memory would normally require it
/// to be available.
///
/// \param Ptr is a USM pointer to the memory to be prefetched to the device.
/// \param Count is a number of bytes to be prefetched.
void prefetch(const void *Ptr, size_t Count) {
throwIfActionIsCreated();
MDstPtr = const_cast<void *>(Ptr);
MLength = Count;
MCGType = detail::CG::PREFETCH_USM;
}
void prefetch(const void *Ptr, size_t Count);

private:
shared_ptr_class<detail::queue_impl> MQueue;
Expand Down Expand Up @@ -1830,7 +1793,7 @@ class __SYCL_EXPORT handler {
unique_ptr_class<detail::HostTask> MHostTask;
detail::OSModuleHandle MOSModuleHandle = detail::OSUtil::ExeModuleHandle;
// Storage for a lambda or function when using InteropTasks
std::unique_ptr<detail::InteropTask> MInteropTask;
unique_ptr_class<detail::InteropTask> MInteropTask;
/// The list of events that order this operation.
vector_class<detail::EventImplPtr> MEvents;
/// The list of valid SYCL events that need to complete
Expand Down
4 changes: 2 additions & 2 deletions sycl/source/detail/scheduler/graph_builder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ Command *Scheduler::GraphBuilder::insertMemoryMove(MemObjRecord *Record,
// Since no alloca command for the sub buffer requirement was found in the
// current context, need to find a parent alloca command for it (it must be
// there)
auto IsSuitableAlloca = [Record, Req](AllocaCommandBase *AllocaCmd) {
auto IsSuitableAlloca = [Record](AllocaCommandBase *AllocaCmd) {
bool Res = sameCtx(AllocaCmd->getQueue()->getContextImplPtr(),
Record->MCurContext) &&
// Looking for a parent buffer alloca command
Expand Down Expand Up @@ -455,7 +455,7 @@ Command *Scheduler::GraphBuilder::addHostAccessor(Requirement *Req) {
Command *Scheduler::GraphBuilder::addCGUpdateHost(
std::unique_ptr<detail::CG> CommandGroup, QueueImplPtr HostQueue) {

CGUpdateHost *UpdateHost = (CGUpdateHost *)CommandGroup.get();
auto UpdateHost = static_cast<CGUpdateHost *>(CommandGroup.get());
Requirement *Req = UpdateHost->getReqToUpdate();

MemObjRecord *Record = getOrInsertMemObjRecord(HostQueue, Req);
Expand Down
49 changes: 49 additions & 0 deletions sycl/source/handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//
//===----------------------------------------------------------------------===//

#include <algorithm>

#include <CL/sycl/detail/common.hpp>
#include <CL/sycl/detail/helpers.hpp>
#include <CL/sycl/detail/kernel_desc.hpp>
Expand Down Expand Up @@ -113,6 +115,21 @@ event handler::finalize() {
return MLastEvent;
}

void handler::associateWithHandler(detail::AccessorBaseHost *AccBase,
access::target AccTarget) {
detail::AccessorImplPtr AccImpl = detail::getSyclObjImpl(*AccBase);
detail::Requirement *Req = AccImpl.get();
// Add accessor to the list of requirements.
MRequirements.push_back(Req);
// Store copy of the accessor.
MAccStorage.push_back(std::move(AccImpl));
// Add an accessor to the handler list of associated accessors.
// For associated accessors index does not means nothing.
MAssociatedAccesors.emplace_back(detail::kernel_param_kind_t::kind_accessor,
Req, static_cast<int>(AccTarget),
/*index*/ 0);
}

void handler::processArg(void *Ptr, const detail::kernel_param_kind_t &Kind,
const int Size, const size_t Index, size_t &IndexShift,
bool IsKernelCreatedFromSource) {
Expand Down Expand Up @@ -277,5 +294,37 @@ void handler::extractArgsAndReqsFromLambda(
string_class handler::getKernelName() {
return MKernel->get_info<info::kernel::function_name>();
}

void handler::barrier(const vector_class<event> &WaitList) {
throwIfActionIsCreated();
MCGType = detail::CG::BARRIER_WAITLIST;
MEventsWaitWithBarrier.resize(WaitList.size());
std::transform(
WaitList.begin(), WaitList.end(), MEventsWaitWithBarrier.begin(),
[](const event &Event) { return detail::getSyclObjImpl(Event); });
}

void handler::memcpy(void *Dest, const void *Src, size_t Count) {
throwIfActionIsCreated();
MSrcPtr = const_cast<void *>(Src);
MDstPtr = Dest;
MLength = Count;
MCGType = detail::CG::COPY_USM;
}

void handler::memset(void *Dest, int Value, size_t Count) {
throwIfActionIsCreated();
MDstPtr = Dest;
MPattern.push_back(static_cast<char>(Value));
MLength = Count;
MCGType = detail::CG::FILL_USM;
}

void handler::prefetch(const void *Ptr, size_t Count) {
throwIfActionIsCreated();
MDstPtr = const_cast<void *>(Ptr);
MLength = Count;
MCGType = detail::CG::PREFETCH_USM;
}
} // namespace sycl
} // __SYCL_INLINE_NAMESPACE(cl)
17 changes: 11 additions & 6 deletions sycl/test/abi/sycl_symbols_linux.dump
Original file line number Diff line number Diff line change
Expand Up @@ -3621,8 +3621,8 @@ _ZN2cl4sycl5eventC1Ev
_ZN2cl4sycl5eventC2EP9_cl_eventRKNS0_7contextE
_ZN2cl4sycl5eventC2ESt10shared_ptrINS0_6detail10event_implEE
_ZN2cl4sycl5eventC2Ev
_ZN2cl4sycl5intel6detail17reduComputeWGSizeEmmRm
_ZN2cl4sycl5intel6detail16reduGetMaxWGSizeESt10shared_ptrINS0_6detail10queue_implEEm
_ZN2cl4sycl5intel6detail17reduComputeWGSizeEmmRm
_ZN2cl4sycl5queue10mem_adviseEPKvm14_pi_mem_advice
_ZN2cl4sycl5queue10wait_proxyERKNS0_6detail13code_locationE
_ZN2cl4sycl5queue11submit_implESt8functionIFvRNS0_7handlerEEERKNS0_6detail13code_locationE
Expand Down Expand Up @@ -3728,15 +3728,15 @@ _ZN2cl4sycl6detail12sampler_implD2Ev
_ZN2cl4sycl6detail12split_stringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEc
_ZN2cl4sycl6detail13MemoryManager12prefetch_usmEPvSt10shared_ptrINS1_10queue_implEEmSt6vectorIP9_pi_eventSaIS9_EERS9_
_ZN2cl4sycl6detail13MemoryManager13releaseMemObjESt10shared_ptrINS1_12context_implEEPNS1_11SYCLMemObjIEPvS8_
_ZN2cl4sycl6detail13MemoryManager19allocateImageObjectESt10shared_ptrINS1_12context_implEEPvbRK14_pi_image_descRK16_pi_image_formatRKNS0_13property_listE
_ZN2cl4sycl6detail13MemoryManager16allocateMemImageESt10shared_ptrINS1_12context_implEEPNS1_11SYCLMemObjIEPvbmRK14_pi_image_descRK16_pi_image_formatRKS3_INS1_10event_implEERKS5_RKNS0_13property_listERP9_pi_event
_ZN2cl4sycl6detail13MemoryManager24allocateInteropMemObjectESt10shared_ptrINS1_12context_implEEPvRKS3_INS1_10event_implEERKS5_RKNS0_13property_listERP9_pi_event
_ZN2cl4sycl6detail13MemoryManager20allocateBufferObjectESt10shared_ptrINS1_12context_implEEPvbmRKNS0_13property_listE
_ZN2cl4sycl6detail13MemoryManager17allocateMemBufferESt10shared_ptrINS1_12context_implEEPNS1_11SYCLMemObjIEPvbmRKS3_INS1_10event_implEERKS5_RKNS0_13property_listERP9_pi_event
_ZN2cl4sycl6detail13MemoryManager18allocateHostMemoryEPNS1_11SYCLMemObjIEPvbmRKNS0_13property_listE
_ZN2cl4sycl6detail13MemoryManager19wrapIntoImageBufferESt10shared_ptrINS1_12context_implEEPvPNS1_11SYCLMemObjIE
_ZN2cl4sycl6detail13MemoryManager18releaseImageBufferESt10shared_ptrINS1_12context_implEEPv
_ZN2cl4sycl6detail13MemoryManager17allocateMemBufferESt10shared_ptrINS1_12context_implEEPNS1_11SYCLMemObjIEPvbmRKS3_INS1_10event_implEERKS5_RKNS0_13property_listERP9_pi_event
_ZN2cl4sycl6detail13MemoryManager19allocateImageObjectESt10shared_ptrINS1_12context_implEEPvbRK14_pi_image_descRK16_pi_image_formatRKNS0_13property_listE
_ZN2cl4sycl6detail13MemoryManager19wrapIntoImageBufferESt10shared_ptrINS1_12context_implEEPvPNS1_11SYCLMemObjIE
_ZN2cl4sycl6detail13MemoryManager20allocateBufferObjectESt10shared_ptrINS1_12context_implEEPvbmRKNS0_13property_listE
_ZN2cl4sycl6detail13MemoryManager20allocateMemSubBufferESt10shared_ptrINS1_12context_implEEPvmmNS0_5rangeILi3EEESt6vectorIS3_INS1_10event_implEESaISB_EERP9_pi_event
_ZN2cl4sycl6detail13MemoryManager24allocateInteropMemObjectESt10shared_ptrINS1_12context_implEEPvRKS3_INS1_10event_implEERKS5_RKNS0_13property_listERP9_pi_event
_ZN2cl4sycl6detail13MemoryManager3mapEPNS1_11SYCLMemObjIEPvSt10shared_ptrINS1_10queue_implEENS0_6access4modeEjNS0_5rangeILi3EEESC_NS0_2idILi3EEEjSt6vectorIP9_pi_eventSaISH_EERSH_
_ZN2cl4sycl6detail13MemoryManager4copyEPNS1_11SYCLMemObjIEPvSt10shared_ptrINS1_10queue_implEEjNS0_5rangeILi3EEESA_NS0_2idILi3EEEjS5_S8_jSA_SA_SC_jSt6vectorIP9_pi_eventSaISF_EERSF_
_ZN2cl4sycl6detail13MemoryManager4fillEPNS1_11SYCLMemObjIEPvSt10shared_ptrINS1_10queue_implEEmPKcjNS0_5rangeILi3EEESC_NS0_2idILi3EEEjSt6vectorIP9_pi_eventSaISH_EERSH_
Expand Down Expand Up @@ -3819,8 +3819,13 @@ _ZN2cl4sycl7contextC2ESt10shared_ptrINS0_6detail12context_implEE
_ZN2cl4sycl7handler10processArgEPvRKNS0_6detail19kernel_param_kind_tEimRmb
_ZN2cl4sycl7handler13getKernelNameB5cxx11Ev
_ZN2cl4sycl7handler18extractArgsAndReqsEv
_ZN2cl4sycl7handler20associateWithHandlerEPNS0_6detail16AccessorBaseHostENS0_6access6targetE
_ZN2cl4sycl7handler28extractArgsAndReqsFromLambdaEPcmPKNS0_6detail19kernel_param_desc_tE
_ZN2cl4sycl7handler6memcpyEPvPKvm
_ZN2cl4sycl7handler6memsetEPvim
_ZN2cl4sycl7handler7barrierERKSt6vectorINS0_5eventESaIS3_EE
_ZN2cl4sycl7handler8finalizeEv
_ZN2cl4sycl7handler8prefetchEPKvm
_ZN2cl4sycl7program17build_with_sourceENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_
_ZN2cl4sycl7program19compile_with_sourceENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_
_ZN2cl4sycl7program22build_with_kernel_nameENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_l
Expand Down