L0 extension for cache reservation

Signed-off-by: Milczarek, Slawomir <slawomir.milczarek@intel.com>
This commit is contained in:
Milczarek, Slawomir
2021-06-23 14:53:34 +00:00
committed by Compute-Runtime-Automation
parent 9e18416098
commit e4eb7538fa
20 changed files with 571 additions and 2 deletions

View File

@@ -67,6 +67,8 @@ struct Device : _ze_device_handle_t {
virtual ze_result_t getProperties(ze_device_properties_t *pDeviceProperties) = 0;
virtual ze_result_t getSubDevices(uint32_t *pCount, ze_device_handle_t *phSubdevices) = 0;
virtual ze_result_t getCacheProperties(uint32_t *pCount, ze_device_cache_properties_t *pCacheProperties) = 0;
virtual ze_result_t reserveCache(size_t cacheLevel, size_t cacheReservationSize) = 0;
virtual ze_result_t setCacheAdvice(void *ptr, size_t regionSize, ze_cache_ext_region_t cacheRegion) = 0;
virtual ze_result_t imageGetProperties(const ze_image_desc_t *desc, ze_image_properties_t *pImageProperties) = 0;
virtual ze_result_t getDeviceImageProperties(ze_device_image_properties_t *pDeviceImageProperties) = 0;
virtual ze_result_t getExternalMemoryProperties(ze_device_external_memory_properties_t *pExternalMemoryProperties) = 0;

View File

@@ -31,6 +31,7 @@
#include "opencl/source/program/program.h"
#include "level_zero/core/source/builtin/builtin_functions_lib.h"
#include "level_zero/core/source/cache/cache_reservation.h"
#include "level_zero/core/source/cmdlist/cmdlist.h"
#include "level_zero/core/source/cmdqueue/cmdqueue.h"
#include "level_zero/core/source/driver/driver_handle_imp.h"
@@ -505,6 +506,50 @@ ze_result_t DeviceImp::getCacheProperties(uint32_t *pCount, ze_device_cache_prop
pCacheProperties[0].cacheSize = hardwareInfo.gtSystemInfo.L3BankCount * 128 * KB;
pCacheProperties[0].flags = 0;
if (pCacheProperties->pNext) {
auto extendedProperties = reinterpret_cast<ze_device_cache_properties_t *>(pCacheProperties->pNext);
if (extendedProperties->stype == ZE_STRUCTURE_TYPE_CACHE_RESERVATION_EXT_DESC) {
auto cacheReservationProperties = reinterpret_cast<ze_cache_reservation_ext_desc_t *>(extendedProperties);
cacheReservationProperties->maxCacheReservationSize = cacheReservation->getMaxCacheReservationSize();
} else {
return ZE_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
}
}
return ZE_RESULT_SUCCESS;
}
ze_result_t DeviceImp::reserveCache(size_t cacheLevel, size_t cacheReservationSize) {
if (cacheReservation->getMaxCacheReservationSize() == 0) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
if (cacheLevel == 0) {
cacheLevel = 3;
}
auto result = cacheReservation->reserveCache(cacheLevel, cacheReservationSize);
if (result == false) {
return ZE_RESULT_ERROR_UNINITIALIZED;
}
return ZE_RESULT_SUCCESS;
}
ze_result_t DeviceImp::setCacheAdvice(void *ptr, size_t regionSize, ze_cache_ext_region_t cacheRegion) {
if (cacheReservation->getMaxCacheReservationSize() == 0) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
if (cacheRegion == ze_cache_ext_region_t::ZE_CACHE_EXT_REGION_ZE_CACHE_REGION_DEFAULT) {
cacheRegion = ze_cache_ext_region_t::ZE_CACHE_EXT_REGION_ZE_CACHE_NON_RESERVED_REGION;
}
auto result = cacheReservation->setCacheAdvice(ptr, regionSize, cacheRegion);
if (result == false) {
return ZE_RESULT_ERROR_UNINITIALIZED;
}
return ZE_RESULT_SUCCESS;
}
@@ -609,6 +654,7 @@ Device *Device::create(DriverHandle *driverHandle, NEO::Device *neoDevice, uint3
device->metricContext = MetricContext::create(*device);
device->builtins = BuiltinFunctionsLib::create(
device, neoDevice->getBuiltIns());
device->cacheReservation = CacheReservation::create(*device);
device->maxNumHwThreads = NEO::HwHelper::getMaxThreadsForVfe(neoDevice->getHardwareInfo());
const bool allocateDebugSurface = (device->getL0Debugger() || neoDevice->getDeviceInfo().debuggerActive) && !isSubDevice;
@@ -716,6 +762,7 @@ void DeviceImp::releaseResources() {
}
metricContext.reset();
builtins.reset();
cacheReservation.reset();
if (getSourceLevelDebugger()) {
getSourceLevelDebugger()->notifyDeviceDestruction();

View File

@@ -10,6 +10,7 @@
#include "shared/source/utilities/spinlock.h"
#include "level_zero/core/source/builtin/builtin_functions_lib.h"
#include "level_zero/core/source/cache/cache_reservation.h"
#include "level_zero/core/source/cmdlist/cmdlist.h"
#include "level_zero/core/source/device/device.h"
#include "level_zero/core/source/driver/driver_handle.h"
@@ -45,6 +46,8 @@ struct DeviceImp : public Device {
ze_result_t getProperties(ze_device_properties_t *pDeviceProperties) override;
ze_result_t getSubDevices(uint32_t *pCount, ze_device_handle_t *phSubdevices) override;
ze_result_t getCacheProperties(uint32_t *pCount, ze_device_cache_properties_t *pCacheProperties) override;
ze_result_t reserveCache(size_t cacheLevel, size_t cacheReservationSize) override;
ze_result_t setCacheAdvice(void *ptr, size_t regionSize, ze_cache_ext_region_t cacheRegion) override;
ze_result_t imageGetProperties(const ze_image_desc_t *desc, ze_image_properties_t *pImageProperties) override;
ze_result_t getDeviceImageProperties(ze_device_image_properties_t *pDeviceImageProperties) override;
ze_result_t getCommandQueueGroupProperties(uint32_t *pCount,
@@ -97,6 +100,7 @@ struct DeviceImp : public Device {
void *execEnvironment = nullptr;
std::unique_ptr<BuiltinFunctionsLib> builtins = nullptr;
std::unique_ptr<MetricContext> metricContext = nullptr;
std::unique_ptr<CacheReservation> cacheReservation = nullptr;
uint32_t maxNumHwThreads = 0;
uint32_t numSubDevices = 0;
std::vector<Device *> subDevices;