From aac9311992b5232c3e4aa7d840247f822cf15aa1 Mon Sep 17 00:00:00 2001 From: foreman Date: Thu, 26 Oct 2017 17:08:01 -0400 Subject: [PATCH] P4 to Git Change 1475393 by lmoriche@lmoriche_opencl_dev2 on 2017/10/26 17:01:11 SWDEV-126884 - OCL 2.1 Platform APIs - Implement clGetKernelSubGroupInfo, clCloneKernel, clGetHostTimer and clGetHostAndDeviceTimer Affected files ... ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_device.cpp#68 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_execute.cpp#25 edit ... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_program.cpp#43 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/kernel.cpp#24 edit ... //depot/stg/opencl/drivers/opencl/runtime/platform/kernel.hpp#19 edit [ROCm/clr commit: c9b973e307960e54209d2d3999ab4c24765654f4] --- .../clr/rocclr/runtime/platform/kernel.cpp | 10 +++++--- .../clr/rocclr/runtime/platform/kernel.hpp | 25 ++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/projects/clr/rocclr/runtime/platform/kernel.cpp b/projects/clr/rocclr/runtime/platform/kernel.cpp index a4e3ef270c..3a6fd1ab49 100644 --- a/projects/clr/rocclr/runtime/platform/kernel.cpp +++ b/projects/clr/rocclr/runtime/platform/kernel.cpp @@ -13,13 +13,17 @@ namespace amd { Kernel::Kernel(Program& program, const Symbol& symbol, const std::string& name) : program_(program), symbol_(symbol), name_(name) { - const KernelSignature& s = signature(); - size_t stackSize = s.paramsSize(); - parameters_ = new (s) KernelParameters(s); + parameters_ = new (signature()) KernelParameters(signature()); fixme_guarantee(parameters_ != NULL && "out of memory"); name_ += '\0'; } +Kernel::Kernel(const Kernel& rhs) + : program_(rhs.program_()), symbol_(rhs.symbol_), name_(rhs.name_) { + parameters_ = new(signature()) KernelParameters(*rhs.parameters_); + fixme_guarantee(parameters_ != NULL && "out of memory"); +} + Kernel::~Kernel() { // Release kernel object itself delete parameters_; diff --git a/projects/clr/rocclr/runtime/platform/kernel.hpp b/projects/clr/rocclr/runtime/platform/kernel.hpp index a1e75f89f6..7e401fed11 100644 --- a/projects/clr/rocclr/runtime/platform/kernel.hpp +++ b/projects/clr/rocclr/runtime/platform/kernel.hpp @@ -93,13 +93,29 @@ class KernelParameters : protected HeapObject { execNewVcop_(0), execPfpaVcop_(0) { values_ = (address) this + alignUp(sizeof(KernelParameters), 16); - defined_ = (bool*)(values_ + signature.paramsSize()); - svmBound_ = (bool*)((address)defined_ + signature.numParameters() * sizeof(bool)); + defined_ = (bool*)(values_ + signature_.paramsSize()); + svmBound_ = (bool*)((address)defined_ + signature_.numParameters() * sizeof(bool)); - address limit = (address)&svmBound_[signature.numParameters()]; + address limit = (address)&svmBound_[signature_.numParameters()]; ::memset(values_, '\0', limit - values_); } + explicit KernelParameters(const KernelParameters& rhs) + : signature_(rhs.signature_), + execInfoOffset_(rhs.execInfoOffset_), + execSvmPtr_(rhs.execSvmPtr_), + svmSystemPointersSupport_(rhs.svmSystemPointersSupport_), + validated_(rhs.validated_), + execNewVcop_(rhs.execNewVcop_), + execPfpaVcop_(rhs.execPfpaVcop_) { + values_ = (address) this + alignUp(sizeof(KernelParameters), 16); + defined_ = (bool*)(values_ + signature_.paramsSize()); + svmBound_ = (bool*)((address)defined_ + signature_.numParameters() * sizeof(bool)); + + address limit = (address)&svmBound_[signature_.numParameters()]; + ::memcpy(values_, rhs.values_, limit - values_); + } + //! Reset the parameter at the given \a index (becomes undefined). void reset(size_t index) { defined_[index] = false; @@ -202,6 +218,9 @@ class Kernel : public RuntimeObject { */ Kernel(Program& program, const Symbol& symbol, const std::string& name); + //! Construct a new kernel object from an existing one. Used by CloneKernel. + explicit Kernel(const Kernel& rhs); + //! Return the program containing this kernel. Program& program() const { return program_(); }