mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-08 05:56:36 +08:00
Add new clGetDeviceInfo queries
Add support for following queries: - CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION - CL_DEVICE_EXTENSIONS_WITH_VERSION - CL_DEVICE_NUMERIC_VERSION - CL_DEVICE_OPENCL_C_ALL_VERSIONS Related-To: NEO-4368 Change-Id: I920671869fdb8815521173e2ec5ab3a4b905ec19 Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
23ad10731b
commit
4e2097e427
@@ -123,6 +123,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
||||
|
||||
protected:
|
||||
void initializeCaps();
|
||||
void initializeOpenclCAllVersions();
|
||||
void initializeOsSpecificCaps();
|
||||
void setupFp64Flags();
|
||||
|
||||
|
||||
@@ -30,8 +30,6 @@ static std::string spirVersions = "1.2 ";
|
||||
#define TOSTR(b) QTR(b)
|
||||
static std::string driverVersion = TOSTR(NEO_OCL_DRIVER_VERSION);
|
||||
|
||||
const char *builtInKernels = ""; // the "always available" (extension-independent) builtin kernels
|
||||
|
||||
static constexpr cl_device_fp_config defaultFpFlags = static_cast<cl_device_fp_config>(CL_FP_ROUND_TO_NEAREST |
|
||||
CL_FP_ROUND_TO_ZERO |
|
||||
CL_FP_ROUND_TO_INF |
|
||||
@@ -106,17 +104,21 @@ void ClDevice::initializeCaps() {
|
||||
case 30:
|
||||
deviceInfo.clVersion = "OpenCL 3.0 NEO ";
|
||||
deviceInfo.clCVersion = "OpenCL C 3.0 ";
|
||||
deviceInfo.numericClVersion = CL_MAKE_VERSION(3, 0, 0);
|
||||
break;
|
||||
case 21:
|
||||
deviceInfo.clVersion = "OpenCL 2.1 NEO ";
|
||||
deviceInfo.clCVersion = "OpenCL C 2.0 ";
|
||||
deviceInfo.numericClVersion = CL_MAKE_VERSION(2, 1, 0);
|
||||
break;
|
||||
case 12:
|
||||
default:
|
||||
deviceInfo.clVersion = "OpenCL 1.2 NEO ";
|
||||
deviceInfo.clCVersion = "OpenCL C 1.2 ";
|
||||
deviceInfo.numericClVersion = CL_MAKE_VERSION(1, 2, 0);
|
||||
break;
|
||||
}
|
||||
initializeOpenclCAllVersions();
|
||||
deviceInfo.platformLP = (hwInfo.capabilityTable.supportsOcl21Features == false);
|
||||
deviceInfo.spirVersions = spirVersions.c_str();
|
||||
auto supportsVme = hwInfo.capabilityTable.supportsVme;
|
||||
@@ -196,16 +198,23 @@ void ClDevice::initializeCaps() {
|
||||
|
||||
deviceInfo.deviceExtensions = deviceExtensions.c_str();
|
||||
|
||||
exposedBuiltinKernels = builtInKernels;
|
||||
|
||||
std::vector<std::string> exposedBuiltinKernelsVector;
|
||||
if (supportsVme) {
|
||||
exposedBuiltinKernels.append("block_motion_estimate_intel;");
|
||||
exposedBuiltinKernelsVector.push_back("block_motion_estimate_intel");
|
||||
}
|
||||
if (supportsAdvancedVme) {
|
||||
auto advVmeKernels = "block_advanced_motion_estimate_check_intel;block_advanced_motion_estimate_bidirectional_check_intel;";
|
||||
exposedBuiltinKernels.append(advVmeKernels);
|
||||
exposedBuiltinKernelsVector.push_back("block_advanced_motion_estimate_check_intel");
|
||||
exposedBuiltinKernelsVector.push_back("block_advanced_motion_estimate_bidirectional_check_intel");
|
||||
}
|
||||
for (auto builtInKernel : exposedBuiltinKernelsVector) {
|
||||
exposedBuiltinKernels.append(builtInKernel);
|
||||
exposedBuiltinKernels.append(";");
|
||||
|
||||
cl_name_version kernelNameVersion;
|
||||
kernelNameVersion.version = CL_MAKE_VERSION(1, 0, 0);
|
||||
strcpy_s(kernelNameVersion.name, CL_NAME_VERSION_MAX_NAME_SIZE, builtInKernel.c_str());
|
||||
deviceInfo.builtInKernelsWithVersion.push_back(kernelNameVersion);
|
||||
}
|
||||
deviceInfo.builtInKernels = exposedBuiltinKernels.c_str();
|
||||
|
||||
deviceInfo.deviceType = CL_DEVICE_TYPE_GPU;
|
||||
@@ -386,6 +395,38 @@ void ClDevice::initializeCaps() {
|
||||
}
|
||||
|
||||
initializeOsSpecificCaps();
|
||||
|
||||
std::stringstream deviceExtensionsStringStream{deviceExtensions};
|
||||
std::vector<std::string> deviceExtensionsVector{
|
||||
std::istream_iterator<std::string>{deviceExtensionsStringStream}, std::istream_iterator<std::string>{}};
|
||||
for (auto deviceExtension : deviceExtensionsVector) {
|
||||
cl_name_version deviceExtensionWithVersion;
|
||||
deviceExtensionWithVersion.version = CL_MAKE_VERSION(1, 0, 0);
|
||||
strcpy_s(deviceExtensionWithVersion.name, CL_NAME_VERSION_MAX_NAME_SIZE, deviceExtension.c_str());
|
||||
deviceInfo.extensionsWithVersion.push_back(deviceExtensionWithVersion);
|
||||
}
|
||||
}
|
||||
|
||||
void ClDevice::initializeOpenclCAllVersions() {
|
||||
cl_name_version openClCVersion;
|
||||
strcpy_s(openClCVersion.name, CL_NAME_VERSION_MAX_NAME_SIZE, "OpenCL C");
|
||||
|
||||
openClCVersion.version = CL_MAKE_VERSION(1, 0, 0);
|
||||
deviceInfo.openclCAllVersions.push_back(openClCVersion);
|
||||
openClCVersion.version = CL_MAKE_VERSION(1, 1, 0);
|
||||
deviceInfo.openclCAllVersions.push_back(openClCVersion);
|
||||
openClCVersion.version = CL_MAKE_VERSION(1, 2, 0);
|
||||
deviceInfo.openclCAllVersions.push_back(openClCVersion);
|
||||
|
||||
if (ocl21FeaturesEnabled) {
|
||||
openClCVersion.version = CL_MAKE_VERSION(2, 0, 0);
|
||||
deviceInfo.openclCAllVersions.push_back(openClCVersion);
|
||||
}
|
||||
|
||||
if (enabledClVersion == 30) {
|
||||
openClCVersion.version = CL_MAKE_VERSION(3, 0, 0);
|
||||
deviceInfo.openclCAllVersions.push_back(openClCVersion);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -129,6 +129,7 @@ cl_int ClDevice::getDeviceInfo(cl_device_info paramName,
|
||||
case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: getCap<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG >(src, srcSize, retSize); break;
|
||||
case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT: getCap<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT >(src, srcSize, retSize); break;
|
||||
case CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT: getCap<CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT >(src, srcSize, retSize); break;
|
||||
case CL_DEVICE_NUMERIC_VERSION: getCap<CL_DEVICE_NUMERIC_VERSION >(src, srcSize, retSize); break;
|
||||
case CL_DEVICE_OPENCL_C_VERSION: getStr<CL_DEVICE_OPENCL_C_VERSION >(src, srcSize, retSize); break;
|
||||
case CL_DEVICE_PARENT_DEVICE: getCap<CL_DEVICE_PARENT_DEVICE >(src, srcSize, retSize); break;
|
||||
case CL_DEVICE_PARTITION_AFFINITY_DOMAIN: getCap<CL_DEVICE_PARTITION_AFFINITY_DOMAIN >(src, srcSize, retSize); break;
|
||||
@@ -214,6 +215,18 @@ cl_int ClDevice::getDeviceInfo(cl_device_info paramName,
|
||||
case CL_DEVICE_OPENCL_C_FEATURES:
|
||||
retSize = srcSize = 0;
|
||||
break;
|
||||
case CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION:
|
||||
src = deviceInfo.builtInKernelsWithVersion.data();
|
||||
retSize = srcSize = deviceInfo.builtInKernelsWithVersion.size() * sizeof(cl_name_version);
|
||||
break;
|
||||
case CL_DEVICE_OPENCL_C_ALL_VERSIONS:
|
||||
src = deviceInfo.openclCAllVersions.data();
|
||||
retSize = srcSize = deviceInfo.openclCAllVersions.size() * sizeof(cl_name_version);
|
||||
break;
|
||||
case CL_DEVICE_EXTENSIONS_WITH_VERSION:
|
||||
src = deviceInfo.extensionsWithVersion.data();
|
||||
retSize = srcSize = deviceInfo.extensionsWithVersion.size() * sizeof(cl_name_version);
|
||||
break;
|
||||
default:
|
||||
if (getDeviceInfoForImage(paramName, src, srcSize, retSize) && !getSharedDeviceInfo().imageSupport) {
|
||||
src = &value;
|
||||
|
||||
@@ -9,11 +9,16 @@
|
||||
|
||||
#include "opencl/extensions/public/cl_ext_private.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace NEO {
|
||||
|
||||
// clang-format off
|
||||
struct ClDeviceInfo {
|
||||
cl_name_version ilsWithVersion[1];
|
||||
std::vector<cl_name_version> builtInKernelsWithVersion;
|
||||
std::vector<cl_name_version> openclCAllVersions;
|
||||
std::vector<cl_name_version> extensionsWithVersion;
|
||||
cl_device_type deviceType;
|
||||
size_t maxSliceCount;
|
||||
size_t image3DMaxWidth;
|
||||
@@ -50,6 +55,7 @@ struct ClDeviceInfo {
|
||||
double platformHostTimerResolution;
|
||||
size_t planarYuvMaxWidth;
|
||||
size_t planarYuvMaxHeight;
|
||||
cl_version numericClVersion;
|
||||
cl_uint maxComputUnits;
|
||||
cl_uint maxWorkItemDimensions;
|
||||
cl_uint maxNumOfSubGroups;
|
||||
|
||||
@@ -129,6 +129,7 @@ template<> struct Map<CL_DEVICE_NATIVE_VECTOR_WIDTH_INT > :
|
||||
template<> struct Map<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG > : public ClMapBase<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, uint32_t, &ClDeviceInfo::nativeVectorWidthLong> {};
|
||||
template<> struct Map<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT > : public ClMapBase<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, uint32_t, &ClDeviceInfo::nativeVectorWidthShort> {};
|
||||
template<> struct Map<CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT > : public ClMapBase<CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT, uint32_t, &ClDeviceInfo::nonUniformWorkGroupSupport> {};
|
||||
template<> struct Map<CL_DEVICE_NUMERIC_VERSION > : public ClMapBase<CL_DEVICE_NUMERIC_VERSION, uint32_t, &ClDeviceInfo::numericClVersion> {};
|
||||
template<> struct Map<CL_DEVICE_OPENCL_C_VERSION > : public ClMapBase<CL_DEVICE_OPENCL_C_VERSION, const char *, &ClDeviceInfo::clCVersion> {};
|
||||
template<> struct Map<CL_DEVICE_PARENT_DEVICE > : public ClMapBase<CL_DEVICE_PARENT_DEVICE, cl_device_id, &ClDeviceInfo::parentDevice> {};
|
||||
template<> struct Map<CL_DEVICE_PARTITION_AFFINITY_DOMAIN > : public ClMapBase<CL_DEVICE_PARTITION_AFFINITY_DOMAIN, uint64_t, &ClDeviceInfo::partitionAffinityDomain> {};
|
||||
|
||||
Reference in New Issue
Block a user