SWDEV-408473 - Add wait time of 10 us if the waiting signal copy was < 24K.

Change-Id: I438ec9eb07e5034042a4a9a5e6e51d74daba2c83


[ROCm/clr commit: 6f5277c701]
This commit is contained in:
kjayapra-amd
2023-08-07 13:46:02 -04:00
zatwierdzone przez Karthik Jayaprakash
rodzic 105212ef57
commit b432ced424
5 zmienionych plików z 59 dodań i 19 usunięć
@@ -151,7 +151,7 @@ void Timestamp::checkGpuTime() {
ClPrint(amd::LOG_INFO, amd::LOG_SIG, "Signal = (0x%lx), start = %ld, "
"end = %ld time taken= %ld ns", it->signal_.handle, start, end, end - start);
}
it->done_ = true;
it->flags_.done_ = true;
}
signals_.clear();
if (end != 0) {
@@ -361,7 +361,7 @@ bool VirtualGPU::HwQueueTracker::Create() {
// ================================================================================================
hsa_signal_t VirtualGPU::HwQueueTracker::ActiveSignal(
hsa_signal_value_t init_val, Timestamp* ts) {
hsa_signal_value_t init_val, Timestamp* ts, bool forceHostWait) {
bool new_signal = false;
// Peep signal +2 ahead to see if its done
@@ -422,8 +422,9 @@ hsa_signal_t VirtualGPU::HwQueueTracker::ActiveSignal(
ProfilingSignal* prof_signal = signal_list_[current_id_];
// Reset the signal and return
hsa_signal_silent_store_relaxed(prof_signal->signal_, init_val);
prof_signal->done_ = false;
prof_signal->flags_.done_ = false;
prof_signal->engine_ = engine_;
prof_signal->flags_.forceHostWait_ = forceHostWait;
if (ts != 0) {
// Save HSA signal earlier to make sure the possible callback will have a valid
// value for processing
@@ -473,13 +474,9 @@ hsa_signal_t VirtualGPU::HwQueueTracker::ActiveSignal(
// ================================================================================================
std::vector<hsa_signal_t>& VirtualGPU::HwQueueTracker::WaitingSignal(HwQueueEngine engine) {
bool explicit_wait = false;
bool sdma_wait = false;
// Reset all current waiting signals
waiting_signals_.clear();
if(engine != HwQueueEngine::Compute)
sdma_wait = true;
// Does runtime switch the active engine?
if (engine != engine_) {
// Yes, return the signal from the previous operation for a wait
@@ -498,6 +495,7 @@ std::vector<hsa_signal_t>& VirtualGPU::HwQueueTracker::WaitingSignal(HwQueueEngi
}
}
}
// Check if a wait is required
if (explicit_wait) {
bool skip_internal_signal = false;
@@ -520,8 +518,10 @@ std::vector<hsa_signal_t>& VirtualGPU::HwQueueTracker::WaitingSignal(HwQueueEngi
if (hsa_signal_load_relaxed(external_signals_[i]->signal_) > 0) {
const Settings& settings = gpu_.dev().settings();
// Actively wait on CPU to avoid extra overheads of signal tracking on GPU
if (!WaitForSignal<true>(external_signals_[i]->signal_, false, sdma_wait)) {
// Actively wait on CPU to avoid extra overheads of signal tracking on GPU.
// For small copies set forced wait
if (!WaitForSignal<true>(external_signals_[i]->signal_, false,
external_signals_[i]->flags_.forceHostWait_)) {
if (settings.cpu_wait_for_signal_) {
// Wait on CPU for completion if requested
CpuWaitForSignal(external_signals_[i]);
@@ -556,7 +556,7 @@ bool VirtualGPU::HwQueueTracker::CpuWaitForSignal(ProfilingSignal* signal) {
LogPrintfError("Failed signal [0x%lx] wait", signal->signal_);
return false;
}
signal->done_ = true;
signal->flags_.done_ = true;
}
return true;
}