mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-04 07:14:10 +08:00
fix(ocl): fix resolve dependencies by pipecontrol
Keep semaphore programming for events on bcs Related-To: NEO-7321 Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
59d79d63b6
commit
d13dd79312
@@ -236,6 +236,14 @@ TaskCountType Event::peekBcsTaskCountFromCommandQueue() {
|
||||
}
|
||||
}
|
||||
|
||||
bool Event::isBcsEvent() const {
|
||||
return bcsState.isValid() && bcsState.taskCount > 0;
|
||||
}
|
||||
|
||||
aub_stream::EngineType Event::getBcsEngineType() const {
|
||||
return bcsState.engineType;
|
||||
}
|
||||
|
||||
TaskCountType Event::getCompletionStamp() const {
|
||||
return this->taskCount;
|
||||
}
|
||||
|
||||
@@ -92,6 +92,8 @@ class Event : public BaseObject<_cl_event>, public IDNode<Event> {
|
||||
|
||||
void setupBcs(aub_stream::EngineType bcsEngineType);
|
||||
TaskCountType peekBcsTaskCountFromCommandQueue();
|
||||
bool isBcsEvent() const;
|
||||
aub_stream::EngineType getBcsEngineType() const;
|
||||
|
||||
TaskCountType getCompletionStamp() const;
|
||||
void updateCompletionStamp(TaskCountType taskCount, TaskCountType bcsTaskCount, TaskCountType tasklevel, FlushStamp flushStamp);
|
||||
|
||||
@@ -39,16 +39,21 @@ void EventsRequest::fillCsrDependenciesForTimestampPacketContainer(CsrDependenci
|
||||
continue;
|
||||
}
|
||||
|
||||
auto sameRootDevice = event->getCommandQueue()->getClDevice().getRootDeviceIndex() == currentCsr.getRootDeviceIndex();
|
||||
const auto sameRootDevice = event->getCommandQueue()->getClDevice().getRootDeviceIndex() == currentCsr.getRootDeviceIndex();
|
||||
if (!sameRootDevice) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto &dependentCsr = event->getCommandQueue()->getGpgpuCommandStreamReceiver();
|
||||
auto sameCsr = (&dependentCsr == ¤tCsr);
|
||||
bool pushDependency = (CsrDependencies::DependenciesType::OnCsr == depsType && sameCsr) ||
|
||||
(CsrDependencies::DependenciesType::OutOfCsr == depsType && !sameCsr) ||
|
||||
(CsrDependencies::DependenciesType::All == depsType);
|
||||
CommandStreamReceiver *dependentCsr;
|
||||
if (event->isBcsEvent()) {
|
||||
dependentCsr = event->getCommandQueue()->getBcsCommandStreamReceiver(event->getBcsEngineType());
|
||||
} else {
|
||||
dependentCsr = &event->getCommandQueue()->getGpgpuCommandStreamReceiver();
|
||||
}
|
||||
const auto sameCsr = (dependentCsr == ¤tCsr);
|
||||
const auto pushDependency = (CsrDependencies::DependenciesType::OnCsr == depsType && sameCsr) ||
|
||||
(CsrDependencies::DependenciesType::OutOfCsr == depsType && !sameCsr) ||
|
||||
(CsrDependencies::DependenciesType::All == depsType);
|
||||
|
||||
if (pushDependency) {
|
||||
csrDeps.timestampPacketContainer.push_back(timestampPacketContainer);
|
||||
@@ -56,9 +61,9 @@ void EventsRequest::fillCsrDependenciesForTimestampPacketContainer(CsrDependenci
|
||||
if (!sameCsr) {
|
||||
const auto &productHelper = event->getCommandQueue()->getDevice().getProductHelper();
|
||||
if (productHelper.isDcFlushAllowed()) {
|
||||
if (!dependentCsr.isLatestTaskCountFlushed()) {
|
||||
flushDependentCsr(dependentCsr, csrDeps);
|
||||
currentCsr.makeResident(*dependentCsr.getTagAllocation());
|
||||
if (!dependentCsr->isLatestTaskCountFlushed()) {
|
||||
flushDependentCsr(*dependentCsr, csrDeps);
|
||||
currentCsr.makeResident(*dependentCsr->getTagAllocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user