mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 01:04:57 +08:00
Add method to adjust device bitfield
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
022ba49155
commit
f8d04b1e66
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user