From b02f98556a08fc9b5e763c647a1263f5099ef602 Mon Sep 17 00:00:00 2001 From: foreman Date: Thu, 22 Aug 2019 13:26:57 -0400 Subject: [PATCH] P4 to Git Change 1987582 by cpaquot@cpaquot-ocl-lc-lnx on 2019/08/22 13:20:28 SWDEV-185742 - [HIP] Add a svm path to avoid analyzing the mem objs and just memcpy the kernel args Affected files ... ... //depot/stg/opencl/drivers/opencl/api/hip/hip_module.cpp#36 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#82 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.hpp#25 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/command.cpp#96 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/command.hpp#94 edit --- rocclr/runtime/device/rocm/rocvirtual.cpp | 9 ++++----- rocclr/runtime/device/rocm/rocvirtual.hpp | 3 ++- rocclr/runtime/platform/command.cpp | 5 +++-- rocclr/runtime/platform/command.hpp | 6 +++++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/rocclr/runtime/device/rocm/rocvirtual.cpp b/rocclr/runtime/device/rocm/rocvirtual.cpp index 950bbce25d..fb130dd234 100644 --- a/rocclr/runtime/device/rocm/rocvirtual.cpp +++ b/rocclr/runtime/device/rocm/rocvirtual.cpp @@ -576,7 +576,7 @@ VirtualGPU::VirtualGPU(Device& device) kernarg_pool_base_ = nullptr; kernarg_pool_size_ = 0; kernarg_pool_cur_offset_ = 0; - aqlHeader_ = kDispatchPacketHeaderNoSync; + aqlHeader_ = kDispatchPacketHeader; barrier_signal_.handle = 0; // Note: Virtual GPU device creation must be a thread safe operation @@ -1981,13 +1981,13 @@ bool VirtualGPU::createVirtualQueue(uint deviceQueueSize) } bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const amd::Kernel& kernel, - const_address parameters, void* eventHandle, uint32_t sharedMemBytes, bool cooperativeGroups) { + const_address parameters, void* eventHandle, uint32_t sharedMemBytes, bool cooperativeGroups, bool isSvm) { device::Kernel* devKernel = const_cast(kernel.getDeviceKernel(dev())); Kernel& gpuKernel = static_cast(*devKernel); size_t ldsUsage = gpuKernel.WorkgroupGroupSegmentByteSize(); // Check memory dependency and SVM objects - if (!processMemObjects(kernel, parameters, ldsUsage, cooperativeGroups)) { + if (!isSvm && !processMemObjects(kernel, parameters, ldsUsage, cooperativeGroups)) { LogError("Wrong memory objects!"); return false; } @@ -2113,7 +2113,6 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const AmdAqlWrap* wrap = reinterpret_cast(reinterpret_cast(schedulerParam_->getHostMem()) + sizeof(SchedulerParam)); memset(wrap, 0, sizeof(AmdAqlWrap)); wrap->state = AQL_WRAP_DONE; - spVA = reinterpret_cast(schedulerMem->getDeviceMemory()) + sizeof(SchedulerParam); } WriteAqlArgAt(const_cast
(parameters), &spVA, it.size_, it.offset_); @@ -2225,7 +2224,7 @@ void VirtualGPU::submitKernel(amd::NDRangeKernelCommand& vcmd) { // Submit kernel to HW if (!queue->submitKernelInternal(vcmd.sizes(), vcmd.kernel(), vcmd.parameters(), - static_cast(as_cl(&vcmd.event())), vcmd.sharedMemBytes(), vcmd.cooperativeGroups())) { + static_cast(as_cl(&vcmd.event())), vcmd.sharedMemBytes(), vcmd.cooperativeGroups()), vcmd.isSvm()) { LogError("AQL dispatch failed!"); vcmd.setStatus(CL_INVALID_OPERATION); } diff --git a/rocclr/runtime/device/rocm/rocvirtual.hpp b/rocclr/runtime/device/rocm/rocvirtual.hpp index 97153fbaeb..80697ef554 100644 --- a/rocclr/runtime/device/rocm/rocvirtual.hpp +++ b/rocclr/runtime/device/rocm/rocvirtual.hpp @@ -168,7 +168,8 @@ class VirtualGPU : public device::VirtualDevice { const_address parameters, //!< Parameters for the kernel void* event_handle, //!< Handle to OCL event for debugging uint32_t sharedMemBytes = 0, //!< Shared memory size - bool cooperativeGroups = false //!< TRUE if cooperative groups mode is required + bool cooperativeGroups = false, //!< TRUE if cooperative groups mode is required + bool isSvm = false //!< TRUE if all params are SVM ); void submitNativeFn(amd::NativeFnCommand& cmd); void submitMarker(amd::Marker& cmd); diff --git a/rocclr/runtime/platform/command.cpp b/rocclr/runtime/platform/command.cpp index b540d6b8fc..a2aff2401d 100644 --- a/rocclr/runtime/platform/command.cpp +++ b/rocclr/runtime/platform/command.cpp @@ -230,12 +230,13 @@ const Context& Command::context() const { return queue_->context(); } NDRangeKernelCommand::NDRangeKernelCommand(HostQueue& queue, const EventWaitList& eventWaitList, Kernel& kernel, const NDRangeContainer& sizes, - uint32_t sharedMemBytes, uint32_t extraParam) + uint32_t sharedMemBytes, uint32_t extraParam, bool svm) : Command(queue, CL_COMMAND_NDRANGE_KERNEL, eventWaitList, AMD_SERIALIZE_KERNEL) , kernel_(kernel) , sizes_(sizes) , sharedMemBytes_(sharedMemBytes) - , extraParam_(extraParam) { + , extraParam_(extraParam) + , svm_(svm) { auto& device = queue.device(); auto devKernel = const_cast(kernel.getDeviceKernel(device)); profilingInfo_.setCallback(devKernel->getProfilingCallback( diff --git a/rocclr/runtime/platform/command.hpp b/rocclr/runtime/platform/command.hpp index 2a52954d5f..8e043e0809 100644 --- a/rocclr/runtime/platform/command.hpp +++ b/rocclr/runtime/platform/command.hpp @@ -764,6 +764,7 @@ class NDRangeKernelCommand : public Command { address parameters_; uint32_t sharedMemBytes_; uint32_t extraParam_; + bool svm_; public: enum { @@ -774,7 +775,7 @@ class NDRangeKernelCommand : public Command { //! Construct an ExecuteKernel command NDRangeKernelCommand(HostQueue& queue, const EventWaitList& eventWaitList, Kernel& kernel, const NDRangeContainer& sizes, uint32_t sharedMemBytes = 0, - uint32_t extraParam = 0); + uint32_t extraParam = 0, bool svm = false); virtual void submit(device::VirtualDevice& device) { device.submitKernel(*this); } @@ -805,6 +806,9 @@ class NDRangeKernelCommand : public Command { void setLocalWorkSize(const NDRange& local) { sizes_.local() = local; } cl_int captureAndValidate(); + + //! Return if NDRange is svm or not + bool isSvm() const { return svm_; } }; class NativeFnCommand : public Command {