mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
OpenCL Queue Families extension 2/n
Disable CL_QUEUE_CAPABILITY_KERNEL_INTEL capability for copy queues Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com> Related-To: NEO-5120
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
438ad860ab
commit
2184ba7ec8
@ -11,6 +11,7 @@
|
|||||||
#include "shared/source/device/device.h"
|
#include "shared/source/device/device.h"
|
||||||
#include "shared/source/device/sub_device.h"
|
#include "shared/source/device/sub_device.h"
|
||||||
#include "shared/source/execution_environment/root_device_environment.h"
|
#include "shared/source/execution_environment/root_device_environment.h"
|
||||||
|
#include "shared/source/helpers/hw_helper.h"
|
||||||
#include "shared/source/os_interface/driver_info.h"
|
#include "shared/source/os_interface/driver_info.h"
|
||||||
#include "shared/source/os_interface/os_interface.h"
|
#include "shared/source/os_interface/os_interface.h"
|
||||||
#include "shared/source/program/sync_buffer_handler.h"
|
#include "shared/source/program/sync_buffer_handler.h"
|
||||||
@ -201,4 +202,33 @@ bool ClDevice::arePipesSupported() const {
|
|||||||
return device.getHardwareInfo().capabilityTable.supportsPipes;
|
return device.getHardwareInfo().capabilityTable.supportsPipes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cl_command_queue_capabilities_intel ClDevice::getQueueFamilyCapabilitiesAll() {
|
||||||
|
return CL_QUEUE_CAPABILITY_EVENT_WAIT_LIST_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_EVENTS_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_MARKER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_BARRIER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_KERNEL_INTEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cl_command_queue_capabilities_intel ClDevice::getQueueFamilyCapabilities(EngineGroupType type) {
|
||||||
|
auto &hwHelper = NEO::HwHelper::get(getHardwareInfo().platform.eRenderCoreFamily);
|
||||||
|
|
||||||
|
cl_command_queue_capabilities_intel disabledProperties = 0u;
|
||||||
|
if (hwHelper.isCopyOnlyEngineType(type)) {
|
||||||
|
disabledProperties |= CL_QUEUE_CAPABILITY_KERNEL_INTEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (disabledProperties != 0) {
|
||||||
|
return getQueueFamilyCapabilitiesAll() & ~disabledProperties;
|
||||||
|
}
|
||||||
|
return CL_QUEUE_CAPABILITY_ALL_INTEL;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
@ -123,6 +123,9 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
|||||||
bool isDeviceEnqueueSupported() const;
|
bool isDeviceEnqueueSupported() const;
|
||||||
bool arePipesSupported() const;
|
bool arePipesSupported() const;
|
||||||
|
|
||||||
|
static cl_command_queue_capabilities_intel getQueueFamilyCapabilitiesAll();
|
||||||
|
MOCKABLE_VIRTUAL cl_command_queue_capabilities_intel getQueueFamilyCapabilities(EngineGroupType type);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initializeCaps();
|
void initializeCaps();
|
||||||
void initializeExtensionsWithVersion();
|
void initializeExtensionsWithVersion();
|
||||||
|
@ -365,8 +365,9 @@ void ClDevice::initializeCaps() {
|
|||||||
for (int queueFamilyIndex = 0; queueFamilyIndex < static_cast<int>(EngineGroupType::MaxEngineGroups); queueFamilyIndex++) {
|
for (int queueFamilyIndex = 0; queueFamilyIndex < static_cast<int>(EngineGroupType::MaxEngineGroups); queueFamilyIndex++) {
|
||||||
const std::vector<EngineControl> &enginesInFamily = queueFamilies.at(queueFamilyIndex);
|
const std::vector<EngineControl> &enginesInFamily = queueFamilies.at(queueFamilyIndex);
|
||||||
if (enginesInFamily.size() > 0) {
|
if (enginesInFamily.size() > 0) {
|
||||||
|
const auto engineGroupType = static_cast<EngineGroupType>(queueFamilyIndex);
|
||||||
cl_queue_family_properties_intel properties;
|
cl_queue_family_properties_intel properties;
|
||||||
properties.capabilities = CL_QUEUE_CAPABILITY_ALL_INTEL;
|
properties.capabilities = getQueueFamilyCapabilities(engineGroupType);
|
||||||
properties.count = static_cast<cl_uint>(enginesInFamily.size());
|
properties.count = static_cast<cl_uint>(enginesInFamily.size());
|
||||||
properties.properties = deviceInfo.queueOnHostProperties;
|
properties.properties = deviceInfo.queueOnHostProperties;
|
||||||
deviceInfo.queueFamilyProperties.push_back(properties);
|
deviceInfo.queueFamilyProperties.push_back(properties);
|
||||||
|
@ -1458,3 +1458,25 @@ TEST_F(DeviceCapsWithModifiedHwInfoTest, givenPlatformWithSourceLevelDebuggerNot
|
|||||||
EXPECT_EQ(nullptr, device->getDebugger());
|
EXPECT_EQ(nullptr, device->getDebugger());
|
||||||
EXPECT_FALSE(caps.debuggerActive);
|
EXPECT_FALSE(caps.debuggerActive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DeviceGetCapsTest, givenClDeviceWhenInitializingCapsThenUseGetQueueFamilyCapabilitiesMethod) {
|
||||||
|
struct ClDeviceWithCustomQueueCaps : MockClDevice {
|
||||||
|
using MockClDevice::MockClDevice;
|
||||||
|
cl_command_queue_capabilities_intel queueCaps{};
|
||||||
|
cl_command_queue_capabilities_intel getQueueFamilyCapabilities(EngineGroupType type) override {
|
||||||
|
return queueCaps;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
auto device = std::make_unique<ClDeviceWithCustomQueueCaps>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get()));
|
||||||
|
|
||||||
|
device->deviceInfo = {};
|
||||||
|
device->queueCaps = CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL;
|
||||||
|
device->initializeCaps();
|
||||||
|
EXPECT_EQ(device->queueCaps, device->getDeviceInfo().queueFamilyProperties[0].capabilities);
|
||||||
|
|
||||||
|
device->deviceInfo = {};
|
||||||
|
device->queueCaps = CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL | CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL;
|
||||||
|
device->initializeCaps();
|
||||||
|
EXPECT_EQ(device->queueCaps, device->getDeviceInfo().queueFamilyProperties[0].capabilities);
|
||||||
|
}
|
||||||
|
@ -466,3 +466,30 @@ TEST(DeviceGenEngineTest, givenEmptyGroupsWhenGettingNonEmptyGroupsThenReturnCor
|
|||||||
EXPECT_EQ(&engineGroups[3], device->getNonEmptyEngineGroup(1));
|
EXPECT_EQ(&engineGroups[3], device->getNonEmptyEngineGroup(1));
|
||||||
EXPECT_EQ(nullptr, device->getNonEmptyEngineGroup(2));
|
EXPECT_EQ(nullptr, device->getNonEmptyEngineGroup(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(DeviceGenEngineTest, whenGettingQueueFamilyCapabilitiesAllThenReturnCorrectValue) {
|
||||||
|
const cl_command_queue_capabilities_intel expectedProperties = CL_QUEUE_CAPABILITY_EVENT_WAIT_LIST_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_EVENTS_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_MARKER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_BARRIER_INTEL |
|
||||||
|
CL_QUEUE_CAPABILITY_KERNEL_INTEL;
|
||||||
|
EXPECT_EQ(expectedProperties, MockClDevice::getQueueFamilyCapabilitiesAll());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DeviceGenEngineTest, givenCopyQueueWhenGettingQueueFamilyCapabilitiesThenDoNotReturnKernel) {
|
||||||
|
const auto propertiesAll = MockClDevice::getQueueFamilyCapabilitiesAll();
|
||||||
|
const auto propertiesWithoutKernel = setBits(propertiesAll, false, CL_QUEUE_CAPABILITY_KERNEL_INTEL);
|
||||||
|
|
||||||
|
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get()));
|
||||||
|
|
||||||
|
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, device->getQueueFamilyCapabilities(NEO::EngineGroupType::Compute));
|
||||||
|
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, device->getQueueFamilyCapabilities(NEO::EngineGroupType::RenderCompute));
|
||||||
|
EXPECT_EQ(propertiesWithoutKernel, device->getQueueFamilyCapabilities(NEO::EngineGroupType::Copy));
|
||||||
|
}
|
||||||
|
@ -735,7 +735,7 @@ HWTEST_F(GetDeviceInfoQueueFamilyTest, givenSingleDeviceWhenInitializingCapsThen
|
|||||||
EXPECT_EQ(3u, families[0].count);
|
EXPECT_EQ(3u, families[0].count);
|
||||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
||||||
|
|
||||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, families[1].capabilities);
|
EXPECT_EQ(clDevice.getQueueFamilyCapabilities(EngineGroupType::Copy), families[1].capabilities);
|
||||||
EXPECT_EQ(1u, families[1].count);
|
EXPECT_EQ(1u, families[1].count);
|
||||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[1].properties);
|
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[1].properties);
|
||||||
}
|
}
|
||||||
@ -760,7 +760,7 @@ HWTEST_F(GetDeviceInfoQueueFamilyTest, givenSubDeviceWhenInitializingCapsThenRet
|
|||||||
EXPECT_EQ(3u, families[0].count);
|
EXPECT_EQ(3u, families[0].count);
|
||||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
||||||
|
|
||||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, families[1].capabilities);
|
EXPECT_EQ(clDevice.getQueueFamilyCapabilities(EngineGroupType::Copy), families[1].capabilities);
|
||||||
EXPECT_EQ(1u, families[1].count);
|
EXPECT_EQ(1u, families[1].count);
|
||||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[1].properties);
|
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[1].properties);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,8 @@ class MockClDevice : public ClDevice {
|
|||||||
using ClDevice::driverInfo;
|
using ClDevice::driverInfo;
|
||||||
using ClDevice::enabledClVersion;
|
using ClDevice::enabledClVersion;
|
||||||
using ClDevice::getClDeviceName;
|
using ClDevice::getClDeviceName;
|
||||||
|
using ClDevice::getQueueFamilyCapabilities;
|
||||||
|
using ClDevice::getQueueFamilyCapabilitiesAll;
|
||||||
using ClDevice::initializeCaps;
|
using ClDevice::initializeCaps;
|
||||||
using ClDevice::name;
|
using ClDevice::name;
|
||||||
using ClDevice::ocl21FeaturesEnabled;
|
using ClDevice::ocl21FeaturesEnabled;
|
||||||
|
Reference in New Issue
Block a user