Refactor of pipeline select programming

Adding new interface to cooperate with hw context state
Simplify programming removing unnecessary functions
Code optimization that stop using expensive call and instead
stores configuration parameter

Related-To: NEO-5019

Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
Zbigniew Zdanowicz
2022-09-15 00:28:41 +00:00
committed by Compute-Runtime-Automation
parent 2b13f8af6d
commit 218a98f7f7
22 changed files with 189 additions and 134 deletions

View File

@@ -319,6 +319,7 @@ struct CommandList : _ze_command_list_handle_t {
bool containsStatelessUncachedResource = false;
bool performMemoryPrefetch = false;
bool multiReturnPointCommandList = false;
bool systolicModeSupport = false;
};
using CommandListAllocatorFn = CommandList *(*)(uint32_t);

View File

@@ -126,6 +126,8 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::initialize(Device *device, NEO
if (this->multiReturnPointCommandList) {
this->returnPoints.reserve(32);
}
auto &hwInfo = device->getHwInfo();
this->systolicModeSupport = NEO::PreambleHelper<GfxFamily>::isSystolicModeConfigurable(hwInfo);
if (device->isImplicitScalingCapable() && !this->internalUsage && !isCopyOnly()) {
this->partitionCount = static_cast<uint32_t>(this->device->getNEODevice()->getDeviceBitfield().count());
@@ -138,6 +140,8 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::initialize(Device *device, NEO
commandContainer.setReservedSshSize(getReserveSshSize());
DeviceImp *deviceImp = static_cast<DeviceImp *>(device);
auto returnValue = commandContainer.initialize(deviceImp->getActiveDevice(), deviceImp->allocationsForReuse.get(), !isCopyOnly());
commandContainer.systolicModeSupport = this->systolicModeSupport;
ze_result_t returnType = parseErrorCode(returnValue);
if (returnType == ZE_RESULT_SUCCESS) {
if (!isCopyOnly()) {

View File

@@ -387,7 +387,7 @@ template <GFXCORE_FAMILY gfxCoreFamily>
void CommandQueueHw<gfxCoreFamily>::programPipelineSelectIfGpgpuDisabled(NEO::LinearStream &cmdStream) {
bool gpgpuEnabled = this->csr->getPreambleSetFlag();
if (!gpgpuEnabled) {
NEO::PipelineSelectArgs args = {0, 0};
NEO::PipelineSelectArgs args = {false, false, false, false};
NEO::PreambleHelper<GfxFamily>::programPipelineSelect(&cmdStream, args, device->getHwInfo());
this->csr->setPreambleSetFlag(true);
}