Add method to adjust device bitfield

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2021-08-05 15:51:25 +00:00
committed by Compute-Runtime-Automation
parent 022ba49155
commit f8d04b1e66
5 changed files with 64 additions and 11 deletions

View File

@@ -12,13 +12,7 @@
namespace NEO {
void MemoryPropertiesHelper::addExtraMemoryProperties(MemoryProperties &properties, cl_mem_flags flags, cl_mem_flags_intel flagsIntel,
const Device *pDevice) {
}
DeviceBitfield MemoryPropertiesHelper::adjustDeviceBitfield(uint32_t rootDeviceIndex, const MemoryProperties &memoryProperties,
DeviceBitfield deviceBitfield) {
return deviceBitfield;
void MemoryPropertiesHelper::addExtraMemoryProperties(MemoryProperties &properties, cl_mem_flags flags, cl_mem_flags_intel flagsIntel) {
}
bool MemoryPropertiesHelper::parseMemoryProperties(const cl_mem_properties_intel *properties, MemoryProperties &memoryProperties,

View File

@@ -25,8 +25,7 @@ class MemoryPropertiesHelper {
IMAGE,
};
static void addExtraMemoryProperties(MemoryProperties &properties, cl_mem_flags flags, cl_mem_flags_intel flagsIntel,
const Device *pDevice);
static void addExtraMemoryProperties(MemoryProperties &properties, cl_mem_flags flags, cl_mem_flags_intel flagsIntel);
static MemoryProperties createMemoryProperties(cl_mem_flags flags, cl_mem_flags_intel flagsIntel,
cl_mem_alloc_flags_intel allocflags, const Device *pDevice);

View File

@@ -85,7 +85,9 @@ MemoryProperties MemoryPropertiesHelper::createMemoryProperties(cl_mem_flags fla
memoryProperties.flags.resource48Bit = true;
}
addExtraMemoryProperties(memoryProperties, flags, flagsIntel, pDevice);
memoryProperties.pDevice = pDevice;
addExtraMemoryProperties(memoryProperties, flags, flagsIntel);
return memoryProperties;
}
@@ -110,4 +112,12 @@ void MemoryPropertiesHelper::fillCachePolicyInProperties(AllocationProperties &a
allocationProperties.cacheRegion = cacheRegion;
}
DeviceBitfield MemoryPropertiesHelper::adjustDeviceBitfield(uint32_t rootDeviceIndex, const MemoryProperties &memoryProperties,
DeviceBitfield deviceBitfieldIn) {
if (rootDeviceIndex == memoryProperties.pDevice->getRootDeviceIndex()) {
return deviceBitfieldIn & memoryProperties.pDevice->getDeviceBitfield();
}
return deviceBitfieldIn;
}
} // namespace NEO

View File

@@ -11,6 +11,7 @@
#include "opencl/source/helpers/memory_properties_helpers.h"
#include "opencl/source/mem_obj/mem_obj_helper.h"
#include "opencl/test/unit_test/mocks/mock_cl_device.h"
#include "opencl/test/unit_test/mocks/mock_context.h"
#include "CL/cl_ext_intel.h"
@@ -334,3 +335,49 @@ TEST_F(MemoryPropertiesHelperTests, givenMemFlagsWithFlagsAndPropertiesWhenParsi
EXPECT_EQ(testInput.expectedResult, flags);
}
}
TEST_F(MemoryPropertiesHelperTests, WhenAdjustingDeviceBitfieldThenCorrectBitfieldIsReturned) {
UltClDeviceFactory deviceFactory{2, 4};
auto memoryPropertiesRootDevice0 = MemoryPropertiesHelper::createMemoryProperties(0, 0, 0, &deviceFactory.rootDevices[0]->getDevice());
auto memoryPropertiesRootDevice0Tile0 = MemoryPropertiesHelper::createMemoryProperties(0, 0, 0, &deviceFactory.subDevices[0]->getDevice());
auto memoryPropertiesRootDevice0Tile1 = MemoryPropertiesHelper::createMemoryProperties(0, 0, 0, &deviceFactory.subDevices[1]->getDevice());
auto memoryPropertiesRootDevice1 = MemoryPropertiesHelper::createMemoryProperties(0, 0, 0, &deviceFactory.rootDevices[1]->getDevice());
auto memoryPropertiesRootDevice1Tile0 = MemoryPropertiesHelper::createMemoryProperties(0, 0, 0, &deviceFactory.subDevices[4]->getDevice());
auto memoryPropertiesRootDevice1Tile1 = MemoryPropertiesHelper::createMemoryProperties(0, 0, 0, &deviceFactory.subDevices[5]->getDevice());
DeviceBitfield devicesInContextBitfield0001{0b1};
DeviceBitfield devicesInContextBitfield0101{0b101};
DeviceBitfield devicesInContextBitfield1010{0b1010};
DeviceBitfield devicesInContextBitfield1111{0b1111};
MemoryProperties memoryPropertiesToProcess[] = {
memoryPropertiesRootDevice0, memoryPropertiesRootDevice0Tile0, memoryPropertiesRootDevice0Tile1,
memoryPropertiesRootDevice1, memoryPropertiesRootDevice1Tile0, memoryPropertiesRootDevice1Tile1};
DeviceBitfield devicesInContextBitfields[] = {devicesInContextBitfield0001, devicesInContextBitfield0101,
devicesInContextBitfield1010, devicesInContextBitfield1111};
uint32_t rootDevicesToProcess[] = {0, 1, 2};
EXPECT_EQ(0b1u, MemoryPropertiesHelper::adjustDeviceBitfield(0, memoryPropertiesRootDevice0Tile0, devicesInContextBitfield1111).to_ulong());
EXPECT_EQ(0b10u, MemoryPropertiesHelper::adjustDeviceBitfield(0, memoryPropertiesRootDevice0Tile1, devicesInContextBitfield1111).to_ulong());
EXPECT_EQ(0b1111u, MemoryPropertiesHelper::adjustDeviceBitfield(1, memoryPropertiesRootDevice0Tile0, devicesInContextBitfield1111).to_ulong());
EXPECT_EQ(0b1111u, MemoryPropertiesHelper::adjustDeviceBitfield(1, memoryPropertiesRootDevice0Tile1, devicesInContextBitfield1111).to_ulong());
EXPECT_EQ(0b101u, MemoryPropertiesHelper::adjustDeviceBitfield(0, memoryPropertiesRootDevice0, devicesInContextBitfield0101).to_ulong());
EXPECT_EQ(0b1010u, MemoryPropertiesHelper::adjustDeviceBitfield(0, memoryPropertiesRootDevice0, devicesInContextBitfield1010).to_ulong());
EXPECT_EQ(0b1111u, MemoryPropertiesHelper::adjustDeviceBitfield(0, memoryPropertiesRootDevice0, devicesInContextBitfield1111).to_ulong());
for (auto processedRootDevice : rootDevicesToProcess) {
for (auto devicesInContextBitfield : devicesInContextBitfields) {
for (auto &memoryProperties : memoryPropertiesToProcess) {
auto expectedDeviceBitfield = devicesInContextBitfield;
if (processedRootDevice == memoryProperties.pDevice->getRootDeviceIndex()) {
expectedDeviceBitfield &= memoryProperties.pDevice->getDeviceBitfield();
}
auto adjustedDeviceBitfield = MemoryPropertiesHelper::adjustDeviceBitfield(
processedRootDevice, memoryProperties, devicesInContextBitfield);
EXPECT_EQ(expectedDeviceBitfield, adjustedDeviceBitfield);
}
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2020 Intel Corporation
* Copyright (C) 2019-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -10,7 +10,10 @@
namespace NEO {
class Device;
struct MemoryProperties {
const Device *pDevice = nullptr;
union {
MemoryFlags flags;
uint32_t allFlags = 0;