mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
Use single event for multiple kernels
Related-To: NEO-6871 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
a3745c28a3
commit
819d648997
@@ -96,6 +96,17 @@ struct Event : _ze_event_handle_t {
|
||||
return isTimestampEvent || usingContextEndOffset;
|
||||
}
|
||||
|
||||
void increaseKernelCount() {
|
||||
kernelCount++;
|
||||
UNRECOVERABLE_IF(kernelCount > EventPacketsCount::maxKernelSplit);
|
||||
}
|
||||
uint32_t getKernelCount() const {
|
||||
return kernelCount;
|
||||
}
|
||||
void zeroKernelCount() {
|
||||
kernelCount = 0;
|
||||
}
|
||||
|
||||
uint64_t globalStartTS;
|
||||
uint64_t globalEndTS;
|
||||
uint64_t contextStartTS;
|
||||
@@ -110,8 +121,6 @@ struct Event : _ze_event_handle_t {
|
||||
ze_event_scope_flags_t signalScope = 0u;
|
||||
ze_event_scope_flags_t waitScope = 0u;
|
||||
|
||||
uint32_t kernelCount = 1u;
|
||||
|
||||
bool l3FlushWaApplied = false;
|
||||
|
||||
protected:
|
||||
@@ -122,6 +131,9 @@ struct Event : _ze_event_handle_t {
|
||||
size_t timestampSizeInDw = 0u;
|
||||
size_t singlePacketSize = 0u;
|
||||
size_t eventPoolOffset = 0u;
|
||||
|
||||
uint32_t kernelCount = 1u;
|
||||
|
||||
bool isTimestampEvent = false;
|
||||
bool usingContextEndOffset = false;
|
||||
};
|
||||
@@ -180,8 +192,7 @@ struct EventImp : public Event {
|
||||
|
||||
protected:
|
||||
ze_result_t calculateProfilingData();
|
||||
ze_result_t queryStatusKernelTimestamp();
|
||||
ze_result_t queryStatusNonTimestamp();
|
||||
ze_result_t queryStatusEventPackets();
|
||||
ze_result_t hostEventSetValue(TagSizeT eventValue);
|
||||
ze_result_t hostEventSetValueTimestamps(TagSizeT eventVal);
|
||||
void assignKernelEventCompletionData(void *address);
|
||||
|
||||
@@ -104,33 +104,13 @@ void EventImp<TagSizeT>::assignKernelEventCompletionData(void *address) {
|
||||
}
|
||||
|
||||
template <typename TagSizeT>
|
||||
ze_result_t EventImp<TagSizeT>::queryStatusKernelTimestamp() {
|
||||
ze_result_t EventImp<TagSizeT>::queryStatusEventPackets() {
|
||||
assignKernelEventCompletionData(hostAddress);
|
||||
uint32_t queryVal = Event::STATE_CLEARED;
|
||||
for (uint32_t i = 0; i < kernelCount; i++) {
|
||||
uint32_t packetsToCheck = kernelEventCompletionData[i].getPacketsUsed();
|
||||
for (uint32_t packetId = 0; packetId < packetsToCheck; packetId++) {
|
||||
bool ready = NEO::WaitUtils::waitFunctionWithPredicate<const TagSizeT>(
|
||||
static_cast<TagSizeT const *>(kernelEventCompletionData[i].getContextEndAddress(packetId)),
|
||||
queryVal,
|
||||
std::not_equal_to<TagSizeT>());
|
||||
if (!ready) {
|
||||
return ZE_RESULT_NOT_READY;
|
||||
}
|
||||
}
|
||||
}
|
||||
this->csr->getInternalAllocationStorage()->cleanAllocationList(this->csr->peekTaskCount(), NEO::AllocationUsage::TEMPORARY_ALLOCATION);
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
template <typename TagSizeT>
|
||||
ze_result_t EventImp<TagSizeT>::queryStatusNonTimestamp() {
|
||||
assignKernelEventCompletionData(hostAddress);
|
||||
uint32_t queryVal = Event::STATE_CLEARED;
|
||||
for (uint32_t i = 0; i < kernelCount; i++) {
|
||||
uint32_t packetsToCheck = kernelEventCompletionData[i].getPacketsUsed();
|
||||
for (uint32_t packetId = 0; packetId < packetsToCheck; packetId++) {
|
||||
void const *queryAddress = usingContextEndOffset
|
||||
void const *queryAddress = isUsingContextEndOffset()
|
||||
? kernelEventCompletionData[i].getContextEndAddress(packetId)
|
||||
: kernelEventCompletionData[i].getContextStartAddress(packetId);
|
||||
bool ready = NEO::WaitUtils::waitFunctionWithPredicate<const TagSizeT>(
|
||||
@@ -156,11 +136,7 @@ ze_result_t EventImp<TagSizeT>::queryStatus() {
|
||||
*hostAddr = metricStreamer->getNotificationState();
|
||||
}
|
||||
this->csr->downloadAllocations();
|
||||
if (isEventTimestampFlagSet()) {
|
||||
return queryStatusKernelTimestamp();
|
||||
} else {
|
||||
return queryStatusNonTimestamp();
|
||||
}
|
||||
return queryStatusEventPackets();
|
||||
}
|
||||
|
||||
template <typename TagSizeT>
|
||||
@@ -274,11 +250,9 @@ ze_result_t EventImp<TagSizeT>::hostSynchronize(uint64_t timeout) {
|
||||
|
||||
template <typename TagSizeT>
|
||||
ze_result_t EventImp<TagSizeT>::reset() {
|
||||
if (isEventTimestampFlagSet()) {
|
||||
kernelCount = EventPacketsCount::maxKernelSplit;
|
||||
for (uint32_t i = 0; i < kernelCount; i++) {
|
||||
kernelEventCompletionData[i].setPacketsUsed(NEO::TimestampPacketSizeControl::preferredPacketCount);
|
||||
}
|
||||
kernelCount = EventPacketsCount::maxKernelSplit;
|
||||
for (uint32_t i = 0; i < kernelCount; i++) {
|
||||
kernelEventCompletionData[i].setPacketsUsed(NEO::TimestampPacketSizeControl::preferredPacketCount);
|
||||
}
|
||||
hostEventSetValue(Event::STATE_INITIAL);
|
||||
resetPackets();
|
||||
|
||||
Reference in New Issue
Block a user