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
[ROCm/clr commit: b02f98556a]
This commit is contained in:
@@ -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<device::Kernel*>(kernel.getDeviceKernel(dev()));
|
||||
Kernel& gpuKernel = static_cast<Kernel&>(*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<AmdAqlWrap*>(reinterpret_cast<uint64_t>(schedulerParam_->getHostMem()) + sizeof(SchedulerParam));
|
||||
memset(wrap, 0, sizeof(AmdAqlWrap));
|
||||
wrap->state = AQL_WRAP_DONE;
|
||||
|
||||
spVA = reinterpret_cast<uint64_t>(schedulerMem->getDeviceMemory()) + sizeof(SchedulerParam);
|
||||
}
|
||||
WriteAqlArgAt(const_cast<address>(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<void*>(as_cl(&vcmd.event())), vcmd.sharedMemBytes(), vcmd.cooperativeGroups())) {
|
||||
static_cast<void*>(as_cl(&vcmd.event())), vcmd.sharedMemBytes(), vcmd.cooperativeGroups()), vcmd.isSvm()) {
|
||||
LogError("AQL dispatch failed!");
|
||||
vcmd.setStatus(CL_INVALID_OPERATION);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<device::Kernel*>(kernel.getDeviceKernel(device));
|
||||
profilingInfo_.setCallback(devKernel->getProfilingCallback(
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user