Refactor Device::getEngine to get Engine by its type

Change-Id: I640b32c0d226686e6648d39dd62404f5d507c98f
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz 2019-03-23 14:26:06 +01:00 committed by sys_ocldev
parent 6f84496e78
commit a8db48dbca
6 changed files with 43 additions and 24 deletions

View File

@ -36,7 +36,7 @@ class CommandQueueHw : public CommandQueue {
if (clPriority & static_cast<cl_queue_priority_khr>(CL_QUEUE_PRIORITY_LOW_KHR)) {
priority = QueuePriority::LOW;
this->engine = &device->getEngine(EngineInstanceConstants::lowPriorityGpgpuEngineIndex);
this->engine = &device->getEngine(EngineType::ENGINE_RCS, true);
} else if (clPriority & static_cast<cl_queue_priority_khr>(CL_QUEUE_PRIORITY_MED_KHR)) {
priority = QueuePriority::MEDIUM;
} else if (clPriority & static_cast<cl_queue_priority_khr>(CL_QUEUE_PRIORITY_HIGH_KHR)) {

View File

@ -277,4 +277,14 @@ void Device::initMaxPowerSavingMode() {
engine.commandStreamReceiver->peekKmdNotifyHelper()->initMaxPowerSavingMode();
}
}
EngineControl &Device::getEngine(EngineType engineType, bool lowPriority) {
for (auto &engine : engines) {
if (engine.osContext->getEngineType() == engineType &&
engine.osContext->isLowPriority() == lowPriority) {
return engine;
}
}
UNRECOVERABLE_IF(true);
}
} // namespace OCLRT

View File

@ -72,7 +72,7 @@ class Device : public BaseObject<_cl_device_id> {
deviceInfo.force32BitAddressess = value;
}
EngineControl &getEngine(uint32_t engineId);
EngineControl &getEngine(EngineType engineType, bool lowPriority);
EngineControl &getDefaultEngine();
const char *getProductAbbrev() const;
@ -173,12 +173,8 @@ inline void Device::getCap(const void *&src,
retSize = size = DeviceInfoTable::Map<Param>::size;
}
inline EngineControl &Device::getEngine(uint32_t engineId) {
return engines[engineId];
}
inline EngineControl &Device::getDefaultEngine() {
return getEngine(defaultEngineIndex);
return engines[defaultEngineIndex];
}
inline MemoryManager *Device::getMemoryManager() const {

View File

@ -47,14 +47,26 @@ TEST_F(DeviceTest, getSupportedClVersion) {
EXPECT_EQ(version, version2);
}
TEST_F(DeviceTest, getTagAddress) {
for (uint32_t i = 0; i < static_cast<uint32_t>(HwHelper::get(platformDevices[0]->pPlatform->eRenderCoreFamily).getGpgpuEngineInstances().size()); i++) {
auto tagAddress = pDevice->getEngine(i).commandStreamReceiver->getTagAddress();
TEST_F(DeviceTest, givenDeviceWhenEngineIsCreatedThenSetInitialValueForTag) {
for (auto &engine : pDevice->engines) {
auto tagAddress = engine.commandStreamReceiver->getTagAddress();
ASSERT_NE(nullptr, const_cast<uint32_t *>(tagAddress));
EXPECT_EQ(initialHardwareTag, *tagAddress);
}
}
TEST_F(DeviceTest, givenDeviceWhenAskedForSpecificEngineThenRetrunIt) {
auto &engines = HwHelper::get(platformDevices[0]->pPlatform->eRenderCoreFamily).getGpgpuEngineInstances();
for (uint32_t i = 0; i < engines.size(); i++) {
bool lowPriority = (EngineInstanceConstants::lowPriorityGpgpuEngineIndex == i);
auto &deviceEngine = pDevice->getEngine(engines[i], lowPriority);
EXPECT_EQ(deviceEngine.osContext->getEngineType(), engines[i]);
EXPECT_EQ(deviceEngine.osContext->isLowPriority(), lowPriority);
}
EXPECT_THROW(pDevice->getEngine(EngineType::ENGINE_VCS, false), std::exception);
}
TEST_F(DeviceTest, WhenGetOSTimeThenNotNull) {
auto pDevice = std::unique_ptr<Device>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
@ -159,22 +171,22 @@ TEST(DeviceCreation, givenMultiDeviceWhenTheyAreCreatedThenEachOsContextHasUniqu
const size_t numDevices = 2;
const auto &numGpgpuEngines = static_cast<uint32_t>(HwHelper::get(platformDevices[0]->pPlatform->eRenderCoreFamily).getGpgpuEngineInstances().size());
auto device1 = std::unique_ptr<Device>(Device::create<MockDevice>(nullptr, executionEnvironment, 0u));
auto device2 = std::unique_ptr<Device>(Device::create<MockDevice>(nullptr, executionEnvironment, 1u));
auto device1 = std::unique_ptr<MockDevice>(Device::create<MockDevice>(nullptr, executionEnvironment, 0u));
auto device2 = std::unique_ptr<MockDevice>(Device::create<MockDevice>(nullptr, executionEnvironment, 1u));
auto &registeredEngines = executionEnvironment->memoryManager->getRegisteredEngines();
EXPECT_EQ(numGpgpuEngines * numDevices, registeredEngines.size());
for (uint32_t i = 0; i < numGpgpuEngines; i++) {
EXPECT_EQ(i, device1->getEngine(i).osContext->getContextId());
EXPECT_EQ(1u, device1->getEngine(i).osContext->getDeviceBitfield().to_ulong());
EXPECT_EQ(i + numGpgpuEngines, device2->getEngine(i).osContext->getContextId());
EXPECT_EQ(2u, device2->getEngine(i).osContext->getDeviceBitfield().to_ulong());
EXPECT_EQ(i, device1->engines[i].osContext->getContextId());
EXPECT_EQ(1u, device1->engines[i].osContext->getDeviceBitfield().to_ulong());
EXPECT_EQ(i + numGpgpuEngines, device2->engines[i].osContext->getContextId());
EXPECT_EQ(2u, device2->engines[i].osContext->getDeviceBitfield().to_ulong());
EXPECT_EQ(registeredEngines[i].commandStreamReceiver,
device1->getEngine(i).commandStreamReceiver);
device1->engines[i].commandStreamReceiver);
EXPECT_EQ(registeredEngines[i + numGpgpuEngines].commandStreamReceiver,
device2->getEngine(i).commandStreamReceiver);
device2->engines[i].commandStreamReceiver);
}
EXPECT_EQ(numGpgpuEngines * numDevices, executionEnvironment->memoryManager->getRegisteredEnginesCount());
}
@ -202,8 +214,8 @@ TEST(DeviceCreation, givenMultiDeviceWhenTheyAreCreatedThenEachDeviceHasSeperate
for (uint32_t i = 0; i < static_cast<uint32_t>(numGpgpuEngines); i++) {
EXPECT_NE(nullptr, executionEnvironment->commandStreamReceivers[0][i]);
EXPECT_NE(nullptr, executionEnvironment->commandStreamReceivers[1][i]);
EXPECT_EQ(executionEnvironment->commandStreamReceivers[0][i].get(), device1->getEngine(i).commandStreamReceiver);
EXPECT_EQ(executionEnvironment->commandStreamReceivers[1][i].get(), device2->getEngine(i).commandStreamReceiver);
EXPECT_EQ(executionEnvironment->commandStreamReceivers[0][i].get(), device1->engines[i].commandStreamReceiver);
EXPECT_EQ(executionEnvironment->commandStreamReceivers[1][i].get(), device2->engines[i].commandStreamReceiver);
}
}

View File

@ -1472,8 +1472,8 @@ using GraphicsAllocationTests = ::testing::Test;
HWTEST_F(GraphicsAllocationTests, givenAllocationUsedOnlyByNonDefaultCsrWhenCheckingUsageBeforeDestroyThenStoreItAsTemporaryAllocation) {
auto device = std::unique_ptr<MockDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0]));
auto nonDefaultOsContext = device->getEngine(EngineInstanceConstants::lowPriorityGpgpuEngineIndex).osContext;
auto nonDefaultCsr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> *>(device->getEngine(EngineInstanceConstants::lowPriorityGpgpuEngineIndex).commandStreamReceiver);
auto nonDefaultOsContext = device->engines[EngineInstanceConstants::lowPriorityGpgpuEngineIndex].osContext;
auto nonDefaultCsr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> *>(device->engines[EngineInstanceConstants::lowPriorityGpgpuEngineIndex].commandStreamReceiver);
auto memoryManager = device->getExecutionEnvironment()->memoryManager.get();
auto graphicsAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize});
@ -1519,8 +1519,8 @@ HWTEST_F(GraphicsAllocationTests, givenAllocationUsedByManyOsContextsWhenCheckin
memoryManager->multiContextResourceDestructor.reset(multiContextDestructor);
auto device = std::unique_ptr<MockDevice>(MockDevice::create<MockDevice>(platformDevices[0], executionEnvironment, 0u));
auto nonDefaultOsContext = device->getEngine(EngineInstanceConstants::lowPriorityGpgpuEngineIndex).osContext;
auto nonDefaultCsr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> *>(device->getEngine(EngineInstanceConstants::lowPriorityGpgpuEngineIndex).commandStreamReceiver);
auto nonDefaultOsContext = device->engines[EngineInstanceConstants::lowPriorityGpgpuEngineIndex].osContext;
auto nonDefaultCsr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> *>(device->engines[EngineInstanceConstants::lowPriorityGpgpuEngineIndex].commandStreamReceiver);
auto defaultCsr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> *>(device->getDefaultEngine().commandStreamReceiver);
auto defaultOsContext = device->getDefaultEngine().osContext;

View File

@ -19,6 +19,7 @@ extern CommandStreamReceiver *createCommandStream(ExecutionEnvironment &executio
class MockDevice : public Device {
public:
using Device::engines;
using Device::executionEnvironment;
using Device::initializeCaps;