P4 to Git Change 1998899 by gandryey@gera-win10 on 2019/09/16 15:49:58

SWDEV-86035 - Swtich PAL to the new interface 533

Affected files ...

... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palbedefs#48 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.cpp#161 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.hpp#46 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palvirtual.cpp#151 edit
Bu işleme şunda yer alıyor:
foreman
2019-09-16 15:56:01 -04:00
ebeveyn 438c93bec7
işleme b7fdb3049b
3 değiştirilmiş dosya ile 48 ekleme ve 32 silme
+27 -19
Dosyayı Görüntüle
@@ -656,7 +656,7 @@ void NullDevice::fillDeviceInfo(const Pal::DeviceProperties& palProp,
info_.numAsyncQueues_ = numComputeRings;
info_.numRTQueues_ = numExclusiveComputeRings;
info_.numRTCUs_ = palProp.engineProperties[Pal::EngineTypeExclusiveCompute].maxNumDedicatedCu;
info_.numRTCUs_ = palProp.engineProperties[Pal::EngineTypeCompute].maxNumDedicatedCu;
info_.threadTraceEnable_ = settings().threadTraceEnable_;
@@ -787,7 +787,6 @@ Device::Device()
xferRead_(nullptr),
mapCache_(nullptr),
resourceCache_(nullptr),
numComputeEngines_(0),
numDmaEngines_(0),
heapInitComplete_(false),
xferQueue_(nullptr),
@@ -904,22 +903,28 @@ bool Device::create(Pal::IDevice* device) {
}
// Find the number of available engines
numComputeEngines_ = properties().engineProperties[Pal::EngineTypeCompute].engineCount;
if (properties().engineProperties[Pal::EngineTypeExclusiveCompute].maxNumDedicatedCu > 0) {
for (uint i = 0; i < properties().engineProperties[Pal::EngineTypeExclusiveCompute].engineCount;
if (properties().engineProperties[Pal::EngineTypeCompute].maxNumDedicatedCu > 0) {
for (uint i = 0; i < properties().engineProperties[Pal::EngineTypeCompute].engineCount;
++i) {
if (properties().engineProperties[Pal::EngineTypeExclusiveCompute].engineSubType[i] ==
Pal::EngineSubType::RtCuHighCompute) {
if (exclusiveComputeEnginesId_.find(ExclusiveQueueType::RealTime0) !=
if (properties().engineProperties[Pal::EngineTypeCompute].capabilities[i].flags.exclusive) {
if (properties()
.engineProperties[Pal::EngineTypeCompute]
.capabilities[i]
.queuePrioritySupport == Pal::SupportQueuePriorityRealtime) {
if (exclusiveComputeEnginesId_.find(ExclusiveQueueType::RealTime0) !=
exclusiveComputeEnginesId_.end()) {
exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime1, i});
} else {
exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime0, i});
exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime1, i});
} else {
exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime0, i});
}
} else if (properties()
.engineProperties[Pal::EngineTypeCompute]
.capabilities[i]
.queuePrioritySupport == Pal::SupportQueuePriorityMedium) {
exclusiveComputeEnginesId_.insert({ExclusiveQueueType::Medium, i});
}
}
if (properties().engineProperties[Pal::EngineTypeExclusiveCompute].engineSubType[i] ==
Pal::EngineSubType::RtCuMedCompute) {
exclusiveComputeEnginesId_.insert({ExclusiveQueueType::Medium, i});
} else {
computeEnginesId_.push_back(i);
}
}
}
@@ -957,7 +962,7 @@ bool Device::create(Pal::IDevice* device) {
return false;
}
numComputeEngines_ = std::min(numComputeEngines_, settings().numComputeRings_);
computeEnginesId_.resize(std::min(numComputeEngines(), settings().numComputeRings_));
amd::Context::Info info = {0};
std::vector<amd::Device*> devices;
@@ -1140,11 +1145,14 @@ bool Device::initializeHeapResources() {
Pal::DeviceFinalizeInfo finalizeInfo = {};
// Request all compute engines
finalizeInfo.requestedEngineCounts[Pal::EngineTypeCompute].engines =
((1 << numComputeEngines_) - 1);
for (const auto& it : computeEnginesId_) {
// Request real time compute engines
finalizeInfo.requestedEngineCounts[Pal::EngineTypeCompute].engines |= (1 << it);
}
for (const auto& it : exclusiveComputeEnginesId_) {
// Request real time compute engines
finalizeInfo.requestedEngineCounts[Pal::EngineTypeExclusiveCompute].engines |=
finalizeInfo.requestedEngineCounts[Pal::EngineTypeCompute].engines |=
(1 << it.second);
}
// Request all SDMA engines
+7 -2
Dosyayı Görüntüle
@@ -400,7 +400,12 @@ class Device : public NullDevice {
ResourceCache& resourceCache() const { return *resourceCache_; }
//! Returns the number of available compute rings
uint numComputeEngines() const { return numComputeEngines_; }
uint numComputeEngines() const { return computeEnginesId_.size(); }
//! Returns the vector of available compute rings with the engine index
const std::vector<uint32_t>& computeEnginesId() const {
return computeEnginesId_;
}
//! Returns the number of available compute rings
uint numExclusiveComputeEngines() const { return exclusiveComputeEnginesId_.size(); }
@@ -595,9 +600,9 @@ class Device : public NullDevice {
XferBuffers* xferRead_; //!< Transfer buffers read
std::vector<amd::Memory*>* mapCache_; //!< Map cache info structure
ResourceCache* resourceCache_; //!< Resource cache
uint numComputeEngines_; //!< The number of available compute engines
std::map<ExclusiveQueueType, uint32_t>
exclusiveComputeEnginesId_; //!< The number of available compute engines
std::vector<uint32_t> computeEnginesId_; //!< PAL index for compute engine
uint numDmaEngines_; //!< The number of available compute engines
bool heapInitComplete_; //!< Keep track of initialization status of heap resources
VirtualGPU* xferQueue_; //!< Transfer queue
+14 -11
Dosyayı Görüntüle
@@ -50,10 +50,11 @@ VirtualGPU::Queue* VirtualGPU::Queue::Create(const VirtualGPU& gpu, Pal::QueueTy
Pal::Result result;
Pal::CmdBufferCreateInfo cmdCreateInfo = {};
Pal::QueueCreateInfo qCreateInfo = {};
qCreateInfo.engineIndex = engineIdx;
qCreateInfo.engineIndex =
(queueType == Pal::QueueTypeCompute) ? gpu.dev().computeEnginesId()[engineIdx] : engineIdx;
qCreateInfo.aqlQueue = true;
qCreateInfo.queueType = queueType;
qCreateInfo.priority = Pal::QueuePriority::Low;
qCreateInfo.priority = Pal::QueuePriority::Normal;
if (queueType == Pal::QueueTypeDma) {
cmdCreateInfo.engineType = qCreateInfo.engineType = Pal::EngineTypeDma;
@@ -64,7 +65,7 @@ VirtualGPU::Queue* VirtualGPU::Queue::Create(const VirtualGPU& gpu, Pal::QueueTy
if ((priority == amd::CommandQueue::Priority::Medium) &&
(amd::CommandQueue::RealTimeDisabled == rtCU)) {
it = gpu.dev().exclusiveComputeEnginesId().find(ExclusiveQueueType::Medium);
cmdCreateInfo.engineType = qCreateInfo.engineType = Pal::EngineTypeExclusiveCompute;
cmdCreateInfo.engineType = qCreateInfo.engineType = Pal::EngineTypeCompute;
qCreateInfo.priority = Pal::QueuePriority::Medium;
} else if (amd::CommandQueue::RealTimeDisabled != rtCU) {
qCreateInfo.numReservedCu = rtCU;
@@ -73,18 +74,20 @@ VirtualGPU::Queue* VirtualGPU::Queue::Create(const VirtualGPU& gpu, Pal::QueueTy
} else {
it = gpu.dev().exclusiveComputeEnginesId().find(ExclusiveQueueType::RealTime0);
}
cmdCreateInfo.engineType = qCreateInfo.engineType = Pal::EngineTypeExclusiveCompute;
cmdCreateInfo.engineType = qCreateInfo.engineType = Pal::EngineTypeCompute;
cmdCreateInfo.flags.realtimeComputeUnits = true;
qCreateInfo.priority = Pal::QueuePriority::Realtime;
}
// If the app creates an exclusive compute, then find the engine id
if (qCreateInfo.engineType == Pal::EngineTypeExclusiveCompute) {
if (it != gpu.dev().exclusiveComputeEnginesId().end()) {
qCreateInfo.engineIndex = it->second;
} else {
return nullptr;
// If the app creates an exclusive compute, then find the engine id
if (qCreateInfo.engineType == Pal::EngineTypeCompute) {
if (it != gpu.dev().exclusiveComputeEnginesId().end()) {
qCreateInfo.engineIndex = it->second;
} else {
return nullptr;
}
}
}
// Find queue object size
size_t qSize = palDev->GetQueueSize(qCreateInfo, &result);
if (result != Pal::Result::Success) {