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_(); }