From 8f7e75cd2caa1aae87b93d4298f24e706542b2f5 Mon Sep 17 00:00:00 2001
From: foreman
Date: Thu, 18 Oct 2018 13:41:32 -0400
Subject: [PATCH] P4 to Git Change 1620765 by
skudchad@skudchad_test2_win_opencl on 2018/10/17 16:58:04
SWDEV-145570 - [HIP] Track last used event and use last enqueued command in a stream rather than creating a new event
ReviewBoardURL = http://ocltc.amd.com/reviews/r/15996/diff/
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/hip/hip_context.cpp#15 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_event.cpp#7 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_stream.cpp#14 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/command.cpp#90 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/commandqueue.cpp#28 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/commandqueue.hpp#20 edit
[ROCm/clr commit: 19caea543c659c440e0c3c89e7407df89ec9eb8e]
---
.../clr/rocclr/runtime/platform/command.cpp | 3 +++
.../rocclr/runtime/platform/commandqueue.cpp | 25 +++++++++++++++++--
.../rocclr/runtime/platform/commandqueue.hpp | 8 ++++++
3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/projects/clr/rocclr/runtime/platform/command.cpp b/projects/clr/rocclr/runtime/platform/command.cpp
index 1d7d11254d..99873ac981 100644
--- a/projects/clr/rocclr/runtime/platform/command.cpp
+++ b/projects/clr/rocclr/runtime/platform/command.cpp
@@ -213,6 +213,9 @@ void Command::enqueue() {
Agent::postEventCreate(as_cl(static_cast(this)), type_);
}
+ if (IS_HIP) {
+ queue_->setLastQueuedCommand(this);
+ }
queue_->append(*this);
queue_->flush();
if (queue_->device().settings().waitCommand_ && (type_ != 0)) {
diff --git a/projects/clr/rocclr/runtime/platform/commandqueue.cpp b/projects/clr/rocclr/runtime/platform/commandqueue.cpp
index 3d6148f6fc..2990271e18 100644
--- a/projects/clr/rocclr/runtime/platform/commandqueue.cpp
+++ b/projects/clr/rocclr/runtime/platform/commandqueue.cpp
@@ -21,7 +21,8 @@ HostQueue::HostQueue(Context& context, Device& device, cl_command_queue_properti
uint queueRTCUs, Priority priority)
: CommandQueue(context, device, properties,
device.info().queueProperties_ | CL_QUEUE_COMMAND_INTERCEPT_ENABLE_AMD,
- queueRTCUs, priority) {
+ queueRTCUs, priority),
+ lastEnqueueCommand_(nullptr) {
if (thread_.state() >= Thread::INITIALIZED) {
ScopedLock sl(queueLock_);
thread_.start(this);
@@ -163,12 +164,32 @@ void HostQueue::append(Command& command) {
queue_.enqueue(&command);
}
-
bool HostQueue::isEmpty() {
// Get a snapshot of queue size
return queue_.empty();
}
+void HostQueue::setLastQueuedCommand(Command* lastCommand) {
+ // Set last submitted command
+ ScopedLock sl(queueLock_);
+ if (lastEnqueueCommand_ != nullptr) {
+ lastEnqueueCommand_->release();
+ }
+ lastEnqueueCommand_ = lastCommand;
+ if (lastCommand != nullptr) {
+ lastEnqueueCommand_->retain();
+ }
+}
+
+Command* HostQueue::getLastQueuedCommand(bool retain) {
+ // Get last submitted command
+ ScopedLock sl(queueLock_);
+ if (retain) {
+ lastEnqueueCommand_->retain();
+ }
+ return lastEnqueueCommand_;
+}
+
DeviceQueue::~DeviceQueue() {
delete virtualDevice_;
ScopedLock lock(context().lock());
diff --git a/projects/clr/rocclr/runtime/platform/commandqueue.hpp b/projects/clr/rocclr/runtime/platform/commandqueue.hpp
index 85563746bf..8413a02112 100644
--- a/projects/clr/rocclr/runtime/platform/commandqueue.hpp
+++ b/projects/clr/rocclr/runtime/platform/commandqueue.hpp
@@ -163,6 +163,8 @@ class HostQueue : public CommandQueue {
private:
ConcurrentLinkedQueue queue_; //!< The queue.
+ Command* lastEnqueueCommand_; //!< The last submitted command
+
//! Await commands and execute them as they become ready.
void loop(device::VirtualDevice* virtualDevice);
@@ -204,6 +206,12 @@ class HostQueue : public CommandQueue {
//! Return the current queue as the HostQueue
virtual HostQueue* asHostQueue() { return this; }
+
+ //! Get last enqueued command
+ Command* getLastQueuedCommand(bool retain);
+
+ //! Set last enqueued command
+ void setLastQueuedCommand(Command* lastCommand);
};