SWDEV-364604 - Add ROCclr support for hipEventDisableSystemFence
Change-Id: I6127b432a8759359359a1890fda85bc401be6a56
This commit is contained in:
کامیت شده توسط
Rahul Garg
والد
4830dd168c
کامیت
3e603d986a
@@ -1260,6 +1260,9 @@ class VirtualDevice : public amd::HeapObject {
|
|||||||
//! Returns fence state of the VirtualGPU
|
//! Returns fence state of the VirtualGPU
|
||||||
virtual bool isFenceDirty() const = 0;
|
virtual bool isFenceDirty() const = 0;
|
||||||
|
|
||||||
|
//! Resets fence state of the VirtualGPU
|
||||||
|
virtual void resetFenceDirty() = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Disable default copy constructor
|
//! Disable default copy constructor
|
||||||
VirtualDevice& operator=(const VirtualDevice&);
|
VirtualDevice& operator=(const VirtualDevice&);
|
||||||
|
|||||||
@@ -359,6 +359,8 @@ class VirtualGPU : public device::VirtualDevice {
|
|||||||
|
|
||||||
bool isFenceDirty() const { return false; }
|
bool isFenceDirty() const { return false; }
|
||||||
|
|
||||||
|
void resetFenceDirty() {}
|
||||||
|
|
||||||
//! Returns GPU device object associated with this kernel
|
//! Returns GPU device object associated with this kernel
|
||||||
const Device& dev() const { return gpuDevice_; }
|
const Device& dev() const { return gpuDevice_; }
|
||||||
|
|
||||||
|
|||||||
@@ -78,13 +78,8 @@ static constexpr uint16_t kBarrierPacketHeader =
|
|||||||
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
||||||
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
||||||
|
|
||||||
static constexpr uint16_t kBarrierPacketAgentScopeHeader =
|
|
||||||
(HSA_PACKET_TYPE_BARRIER_AND << HSA_PACKET_HEADER_TYPE) | (1 << HSA_PACKET_HEADER_BARRIER) |
|
|
||||||
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
|
||||||
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
|
||||||
|
|
||||||
static constexpr uint16_t kNopPacketHeader =
|
static constexpr uint16_t kNopPacketHeader =
|
||||||
(HSA_PACKET_TYPE_BARRIER_AND << HSA_PACKET_HEADER_TYPE) |
|
(HSA_PACKET_TYPE_BARRIER_AND << HSA_PACKET_HEADER_TYPE) | (1 << HSA_PACKET_HEADER_BARRIER) |
|
||||||
(HSA_FENCE_SCOPE_NONE << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
(HSA_FENCE_SCOPE_NONE << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
||||||
(HSA_FENCE_SCOPE_NONE << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
(HSA_FENCE_SCOPE_NONE << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
||||||
|
|
||||||
@@ -99,14 +94,16 @@ static constexpr uint16_t kBarrierPacketReleaseHeader =
|
|||||||
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
||||||
|
|
||||||
static constexpr uint16_t kBarrierVendorPacketHeader =
|
static constexpr uint16_t kBarrierVendorPacketHeader =
|
||||||
(HSA_PACKET_TYPE_VENDOR_SPECIFIC << HSA_PACKET_HEADER_TYPE) | (1 << HSA_PACKET_HEADER_BARRIER) |
|
(HSA_PACKET_TYPE_VENDOR_SPECIFIC << HSA_PACKET_HEADER_TYPE) |
|
||||||
|
(1 << HSA_PACKET_HEADER_BARRIER) |
|
||||||
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
||||||
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
(HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
||||||
|
|
||||||
static constexpr uint16_t kBarrierVendorPacketAgentScopeHeader =
|
static constexpr uint16_t kBarrierVendorPacketNopScopeHeader =
|
||||||
(HSA_PACKET_TYPE_VENDOR_SPECIFIC << HSA_PACKET_HEADER_TYPE) | (1 << HSA_PACKET_HEADER_BARRIER) |
|
(HSA_PACKET_TYPE_VENDOR_SPECIFIC << HSA_PACKET_HEADER_TYPE) |
|
||||||
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
(1 << HSA_PACKET_HEADER_BARRIER) |
|
||||||
(HSA_FENCE_SCOPE_AGENT << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
(HSA_FENCE_SCOPE_NONE << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE) |
|
||||||
|
(HSA_FENCE_SCOPE_NONE << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE);
|
||||||
|
|
||||||
static constexpr hsa_barrier_and_packet_t kBarrierAcquirePacket = {
|
static constexpr hsa_barrier_and_packet_t kBarrierAcquirePacket = {
|
||||||
kBarrierPacketAcquireHeader, 0, 0, {{0}}, 0, {0}};
|
kBarrierPacketAcquireHeader, 0, 0, {{0}}, 0, {0}};
|
||||||
@@ -989,6 +986,7 @@ void VirtualGPU::dispatchBarrierPacket(uint16_t packetHeader, bool skipSignal,
|
|||||||
uint64_t index = hsa_queue_add_write_index_screlease(gpu_queue_, 1);
|
uint64_t index = hsa_queue_add_write_index_screlease(gpu_queue_, 1);
|
||||||
uint64_t read = hsa_queue_load_read_index_relaxed(gpu_queue_);
|
uint64_t read = hsa_queue_load_read_index_relaxed(gpu_queue_);
|
||||||
|
|
||||||
|
fence_dirty_ = true;
|
||||||
auto cache_state = extractAqlBits(packetHeader, HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE,
|
auto cache_state = extractAqlBits(packetHeader, HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE,
|
||||||
HSA_PACKET_HEADER_WIDTH_SCRELEASE_FENCE_SCOPE);
|
HSA_PACKET_HEADER_WIDTH_SCRELEASE_FENCE_SCOPE);
|
||||||
if (!skipSignal) {
|
if (!skipSignal) {
|
||||||
@@ -1001,7 +999,9 @@ void VirtualGPU::dispatchBarrierPacket(uint16_t packetHeader, bool skipSignal,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reset fence_dirty_ flag if we submit a barrier
|
// Reset fence_dirty_ flag if we submit a barrier
|
||||||
fence_dirty_ = false;
|
if (cache_state == amd::Device::kCacheStateSystem) {
|
||||||
|
fence_dirty_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
while ((index - hsa_queue_load_read_index_scacquire(gpu_queue_)) >= queueMask);
|
while ((index - hsa_queue_load_read_index_scacquire(gpu_queue_)) >= queueMask);
|
||||||
hsa_barrier_and_packet_t* aql_loc =
|
hsa_barrier_and_packet_t* aql_loc =
|
||||||
@@ -1063,6 +1063,10 @@ void VirtualGPU::dispatchBarrierValuePacket(uint16_t packetHeader, bool resolveD
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fence_dirty_ = true;
|
||||||
|
auto cache_state = extractAqlBits(packetHeader, HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE,
|
||||||
|
HSA_PACKET_HEADER_WIDTH_SCRELEASE_FENCE_SCOPE);
|
||||||
|
|
||||||
if (completionSignal.handle == 0) {
|
if (completionSignal.handle == 0) {
|
||||||
// Get active signal for current dispatch if profiling is necessary
|
// Get active signal for current dispatch if profiling is necessary
|
||||||
barrier_value_packet_.completion_signal =
|
barrier_value_packet_.completion_signal =
|
||||||
@@ -1072,6 +1076,11 @@ void VirtualGPU::dispatchBarrierValuePacket(uint16_t packetHeader, bool resolveD
|
|||||||
barrier_value_packet_.completion_signal = completionSignal;
|
barrier_value_packet_.completion_signal = completionSignal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset fence_dirty_ flag if we submit a barrier
|
||||||
|
if (cache_state == amd::Device::kCacheStateSystem) {
|
||||||
|
fence_dirty_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t index = hsa_queue_add_write_index_screlease(gpu_queue_, 1);
|
uint64_t index = hsa_queue_add_write_index_screlease(gpu_queue_, 1);
|
||||||
while ((index - hsa_queue_load_read_index_scacquire(gpu_queue_)) >= queueMask);
|
while ((index - hsa_queue_load_read_index_scacquire(gpu_queue_)) >= queueMask);
|
||||||
hsa_amd_barrier_value_packet_t* aql_loc = &(reinterpret_cast<hsa_amd_barrier_value_packet_t*>(
|
hsa_amd_barrier_value_packet_t* aql_loc = &(reinterpret_cast<hsa_amd_barrier_value_packet_t*>(
|
||||||
@@ -1079,9 +1088,6 @@ void VirtualGPU::dispatchBarrierValuePacket(uint16_t packetHeader, bool resolveD
|
|||||||
*aql_loc = barrier_value_packet_;
|
*aql_loc = barrier_value_packet_;
|
||||||
packet_store_release(reinterpret_cast<uint32_t*>(aql_loc), packetHeader, rest);
|
packet_store_release(reinterpret_cast<uint32_t*>(aql_loc), packetHeader, rest);
|
||||||
|
|
||||||
auto cache_state = extractAqlBits(packetHeader, HSA_PACKET_HEADER_SCRELEASE_FENCE_SCOPE,
|
|
||||||
HSA_PACKET_HEADER_WIDTH_SCRELEASE_FENCE_SCOPE);
|
|
||||||
|
|
||||||
hsa_signal_store_screlease(gpu_queue_->doorbell_signal, index);
|
hsa_signal_store_screlease(gpu_queue_->doorbell_signal, index);
|
||||||
|
|
||||||
ClPrint(amd::LOG_DEBUG, amd::LOG_AQL,
|
ClPrint(amd::LOG_DEBUG, amd::LOG_AQL,
|
||||||
@@ -3252,11 +3258,11 @@ void VirtualGPU::submitMarker(amd::Marker& vcmd) {
|
|||||||
if (timestamp_ != nullptr) {
|
if (timestamp_ != nullptr) {
|
||||||
const Settings& settings = dev().settings();
|
const Settings& settings = dev().settings();
|
||||||
int32_t releaseFlags = vcmd.getEventScope();
|
int32_t releaseFlags = vcmd.getEventScope();
|
||||||
if (releaseFlags == Device::CacheState::kCacheStateAgent) {
|
if (releaseFlags == Device::CacheState::kCacheStateIgnore) {
|
||||||
if (settings.barrier_value_packet_ && vcmd.profilingInfo().marker_ts_) {
|
if (settings.barrier_value_packet_ && vcmd.profilingInfo().marker_ts_) {
|
||||||
dispatchBarrierValuePacket(kBarrierVendorPacketAgentScopeHeader, true);
|
dispatchBarrierValuePacket(kBarrierVendorPacketNopScopeHeader, true);
|
||||||
} else {
|
} else {
|
||||||
dispatchBarrierPacket(kBarrierPacketAgentScopeHeader, false);
|
dispatchBarrierPacket(kNopPacketHeader, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Submit a barrier with a cache flushes.
|
// Submit a barrier with a cache flushes.
|
||||||
|
|||||||
@@ -407,6 +407,7 @@ class VirtualGPU : public device::VirtualDevice {
|
|||||||
|
|
||||||
void* allocKernArg(size_t size, size_t alignment);
|
void* allocKernArg(size_t size, size_t alignment);
|
||||||
bool isFenceDirty() const { return fence_dirty_; }
|
bool isFenceDirty() const { return fence_dirty_; }
|
||||||
|
void resetFenceDirty() { fence_dirty_ = false; }
|
||||||
// } roc OpenCL integration
|
// } roc OpenCL integration
|
||||||
private:
|
private:
|
||||||
//! Dispatches a barrier with blocking HSA signals
|
//! Dispatches a barrier with blocking HSA signals
|
||||||
|
|||||||
@@ -436,7 +436,6 @@ NDRangeKernelCommand::NDRangeKernelCommand(HostQueue& queue, const EventWaitList
|
|||||||
profilingInfo_.clear();
|
profilingInfo_.clear();
|
||||||
profilingInfo_.callback_ = nullptr;
|
profilingInfo_.callback_ = nullptr;
|
||||||
profilingInfo_.marker_ts_ = true;
|
profilingInfo_.marker_ts_ = true;
|
||||||
setEventScope(amd::Device::kCacheStateSystem);
|
|
||||||
}
|
}
|
||||||
kernel_.retain();
|
kernel_.retain();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ void HostQueue::finish() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nullptr == command || vdev()->isHandlerPending()) {
|
if (nullptr == command || vdev()->isHandlerPending() || vdev()->isFenceDirty()) {
|
||||||
if (nullptr != command) {
|
if (nullptr != command) {
|
||||||
command->release();
|
command->release();
|
||||||
}
|
}
|
||||||
|
|||||||
مرجع در شماره جدید
Block a user