Add TimestampPacketDependencies helper

Change-Id: I3945ac8e495baf442b4f892ba415f939e8d316da
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz
2019-11-13 12:23:29 +01:00
committed by sys_ocldev
parent df20a73622
commit b6015b5293
6 changed files with 49 additions and 54 deletions

View File

@@ -334,7 +334,7 @@ class CommandQueueHw : public CommandQueue {
size_t commandStreamStart,
bool &blocking,
const MultiDispatchInfo &multiDispatchInfo,
TimestampPacketContainer *previousTimestampPacketNodes,
TimestampPacketDependencies &timestampPacketDependencies,
EventsRequest &eventsRequest,
EventBuilder &eventBuilder,
uint32_t taskLevel,
@@ -357,8 +357,7 @@ class CommandQueueHw : public CommandQueue {
size_t commandStreamStart,
bool &blocking,
const EnqueueProperties &enqueueProperties,
TimestampPacketContainer *previousTimestampPacketNodes,
TimestampPacketContainer &barrierTimestampPacketNodes,
TimestampPacketDependencies &timestampPacketDependencies,
EventsRequest &eventsRequest,
EventBuilder &eventBuilder,
uint32_t taskLevel);
@@ -367,8 +366,7 @@ class CommandQueueHw : public CommandQueue {
LinearStream *commandStream,
CsrDependencies &csrDeps);
BlitProperties processDispatchForBlitEnqueue(const MultiDispatchInfo &multiDispatchInfo,
TimestampPacketContainer &previousTimestampPacketNodes,
TimestampPacketContainer &barrierTimestampPacketNode,
TimestampPacketDependencies &timestampPacketDependencies,
const EventsRequest &eventsRequest,
LinearStream &commandStream,
uint32_t commandType, bool queueBlocked);
@@ -450,6 +448,6 @@ class CommandQueueHw : public CommandQueue {
DeviceQueueHw<GfxFamily> *devQueueHw,
CsrDependencies &csrDeps,
KernelOperation *blockedCommandsData,
TimestampPacketContainer &previousTimestampPacketNodes);
TimestampPacketDependencies &timestampPacketDependencies);
};
} // namespace NEO

View File

@@ -54,12 +54,12 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface *(&surfaces)[surfaceCount
const cl_event *eventWaitList,
cl_event *event) {
BuiltInOwnershipWrapper builtInLock;
MemObjsForAuxTranslation memObjsForAuxTranslation;
MultiDispatchInfo multiDispatchInfo(kernel);
if (DebugManager.flags.ForceDispatchScheduler.get()) {
forceDispatchScheduler(multiDispatchInfo);
} else {
MemObjsForAuxTranslation memObjsForAuxTranslation;
if (kernel->isAuxTranslationRequired()) {
auto &builder = getDevice().getExecutionEnvironment()->getBuiltIns()->getBuiltinDispatchInfoBuilder(EBuiltInOps::AuxTranslation, getContext(), getDevice());
builtInLock.takeOwnership(builder, this->context);
@@ -189,8 +189,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
blocking = true;
}
TimestampPacketContainer previousTimestampPacketNodes;
TimestampPacketContainer barrierTimestampPacketNode;
TimestampPacketDependencies timestampPacketDependencies;
EventsRequest eventsRequest(numEventsInWaitList, eventWaitList, event);
CsrDependencies csrDeps;
BlitPropertiesContainer blitPropertiesContainer;
@@ -207,12 +206,12 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
if (blitEnqueue && !blockQueue && getGpgpuCommandStreamReceiver().isStallingPipeControlOnNextFlushRequired()) {
auto allocator = getGpgpuCommandStreamReceiver().getTimestampPacketAllocator();
barrierTimestampPacketNode.add(allocator->getTag());
timestampPacketDependencies.barrierNodes.add(allocator->getTag());
}
if (nodesCount > 0) {
obtainNewTimestampPacketNodes(nodesCount, previousTimestampPacketNodes, clearAllDependencies);
csrDeps.push_back(&previousTimestampPacketNodes);
obtainNewTimestampPacketNodes(nodesCount, timestampPacketDependencies.previousEnqueueNodes, clearAllDependencies);
csrDeps.push_back(&timestampPacketDependencies.previousEnqueueNodes);
}
}
@@ -227,12 +226,12 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
bool flushDependenciesForNonKernelCommand = false;
if (blitEnqueue) {
blitPropertiesContainer.push_back(processDispatchForBlitEnqueue(multiDispatchInfo, previousTimestampPacketNodes, barrierTimestampPacketNode,
blitPropertiesContainer.push_back(processDispatchForBlitEnqueue(multiDispatchInfo, timestampPacketDependencies,
eventsRequest, commandStream, commandType, blockQueue));
} else if (multiDispatchInfo.empty() == false) {
processDispatchForKernels<commandType>(multiDispatchInfo, printfHandler, eventBuilder.getEvent(),
hwTimeStamps, blockQueue, devQueueHw, csrDeps, blockedCommandsData.get(),
previousTimestampPacketNodes);
timestampPacketDependencies);
} else if (isCacheFlushCommand(commandType)) {
processDispatchForCacheFlush(surfacesForResidency, numSurfaceForResidency, &commandStream, csrDeps);
} else if (getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled()) {
@@ -274,7 +273,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
commandStreamStart,
blocking,
multiDispatchInfo,
&previousTimestampPacketNodes,
timestampPacketDependencies,
eventsRequest,
eventBuilder,
taskLevel,
@@ -296,8 +295,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
commandStreamStart,
blocking,
enqueueProperties,
&previousTimestampPacketNodes,
barrierTimestampPacketNode,
timestampPacketDependencies,
eventsRequest,
eventBuilder,
taskLevel);
@@ -345,7 +343,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
surfacesForResidency,
numSurfaceForResidency,
multiDispatchInfo,
previousTimestampPacketNodes,
timestampPacketDependencies.previousEnqueueNodes,
blockedCommandsData,
enqueueProperties,
eventsRequest,
@@ -380,7 +378,7 @@ void CommandQueueHw<GfxFamily>::processDispatchForKernels(const MultiDispatchInf
DeviceQueueHw<GfxFamily> *devQueueHw,
CsrDependencies &csrDeps,
KernelOperation *blockedCommandsData,
TimestampPacketContainer &previousTimestampPacketNodes) {
TimestampPacketDependencies &timestampPacketDependencies) {
TagNode<HwPerfCounter> *hwPerfCounter = nullptr;
DebugManager.dumpKernelArgs(&multiDispatchInfo);
@@ -422,7 +420,7 @@ void CommandQueueHw<GfxFamily>::processDispatchForKernels(const MultiDispatchInf
blockedCommandsData,
hwTimeStamps,
hwPerfCounter,
&previousTimestampPacketNodes,
&timestampPacketDependencies,
timestampPacketContainer.get(),
commandType);
@@ -439,8 +437,7 @@ void CommandQueueHw<GfxFamily>::processDispatchForKernels(const MultiDispatchInf
template <typename GfxFamily>
BlitProperties CommandQueueHw<GfxFamily>::processDispatchForBlitEnqueue(const MultiDispatchInfo &multiDispatchInfo,
TimestampPacketContainer &previousTimestampPacketNodes,
TimestampPacketContainer &barrierTimestampPacketNode,
TimestampPacketDependencies &timestampPacketDependencies,
const EventsRequest &eventsRequest, LinearStream &commandStream,
uint32_t commandType, bool queueBlocked) {
auto blitDirection = BlitProperties::obtainBlitDirection(commandType);
@@ -453,8 +450,8 @@ BlitProperties CommandQueueHw<GfxFamily>::processDispatchForBlitEnqueue(const Mu
blitProperties.csrDependencies.fillFromEventsRequest(eventsRequest, *blitCommandStreamReceiver,
CsrDependencies::DependenciesType::All);
blitProperties.csrDependencies.push_back(&previousTimestampPacketNodes);
blitProperties.csrDependencies.push_back(&barrierTimestampPacketNode);
blitProperties.csrDependencies.push_back(&timestampPacketDependencies.previousEnqueueNodes);
blitProperties.csrDependencies.push_back(&timestampPacketDependencies.barrierNodes);
}
auto currentTimestampPacketNode = timestampPacketContainer->peekNodes().at(0);
@@ -581,7 +578,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
size_t commandStreamStart,
bool &blocking,
const MultiDispatchInfo &multiDispatchInfo,
TimestampPacketContainer *previousTimestampPacketNodes,
TimestampPacketDependencies &timestampPacketDependencies,
EventsRequest &eventsRequest,
EventBuilder &eventBuilder,
uint32_t taskLevel,
@@ -597,7 +594,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
}
if (timestampPacketContainer) {
timestampPacketContainer->makeResident(getGpgpuCommandStreamReceiver());
previousTimestampPacketNodes->makeResident(getGpgpuCommandStreamReceiver());
timestampPacketDependencies.previousEnqueueNodes.makeResident(getGpgpuCommandStreamReceiver());
}
bool anyUncacheableArgs = false;
@@ -841,15 +838,14 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
size_t commandStreamStart,
bool &blocking,
const EnqueueProperties &enqueueProperties,
TimestampPacketContainer *previousTimestampPacketNodes,
TimestampPacketContainer &barrierTimestampPacketNodes,
TimestampPacketDependencies &timestampPacketDependencies,
EventsRequest &eventsRequest,
EventBuilder &eventBuilder,
uint32_t taskLevel) {
if (timestampPacketContainer) {
timestampPacketContainer->makeResident(getGpgpuCommandStreamReceiver());
previousTimestampPacketNodes->makeResident(getGpgpuCommandStreamReceiver());
timestampPacketDependencies.previousEnqueueNodes.makeResident(getGpgpuCommandStreamReceiver());
}
for (auto surface : CreateRange(surfaces, surfaceCount)) {
@@ -863,7 +859,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
DispatchFlags dispatchFlags(
{}, //csrDependencies
&barrierTimestampPacketNodes, //barrierTimestampPacketNodes
&timestampPacketDependencies.barrierNodes, //barrierTimestampPacketNodes
{}, //pipelineSelectArgs
flushStamp->getStampReference(), //flushStampReference
QueueThrottle::MEDIUM, //throttle

View File

@@ -42,7 +42,7 @@ class HardwareInterface {
KernelOperation *blockedCommandsData,
TagNode<HwTimeStamps> *hwTimeStamps,
TagNode<HwPerfCounter> *hwPerfCounter,
TimestampPacketContainer *previousTimestampPacketNodes,
TimestampPacketDependencies *timestampPacketDependencies,
TimestampPacketContainer *currentTimestampPacketNodes,
uint32_t commandType);

View File

@@ -30,7 +30,7 @@ void HardwareInterface<GfxFamily>::dispatchWalker(
KernelOperation *blockedCommandsData,
TagNode<HwTimeStamps> *hwTimeStamps,
TagNode<HwPerfCounter> *hwPerfCounter,
TimestampPacketContainer *previousTimestampPacketNodes,
TimestampPacketDependencies *timestampPacketDependencies,
TimestampPacketContainer *currentTimestampPacketNodes,
uint32_t commandType) {

View File

@@ -91,6 +91,11 @@ class TimestampPacketContainer : public NonCopyableClass {
std::vector<Node *> timestampPacketNodes;
};
struct TimestampPacketDependencies : public NonCopyableClass {
TimestampPacketContainer previousEnqueueNodes;
TimestampPacketContainer barrierNodes;
};
struct TimestampPacketHelper {
template <typename GfxFamily>
static void programSemaphoreWithImplicitDependency(LinearStream &cmdStream, TagNode<TimestampPacketStorage> &timestampPacketNode) {