Merge pull request #9603 from alalek:ocl_device_extensions
This commit is contained in:
commit
32bb71d686
@ -91,6 +91,7 @@ public:
|
|||||||
|
|
||||||
String name() const;
|
String name() const;
|
||||||
String extensions() const;
|
String extensions() const;
|
||||||
|
bool isExtensionSupported(const String& extensionName) const;
|
||||||
String version() const;
|
String version() const;
|
||||||
String vendorName() const;
|
String vendorName() const;
|
||||||
String OpenCL_C_Version() const;
|
String OpenCL_C_Version() const;
|
||||||
@ -160,6 +161,7 @@ public:
|
|||||||
uint imagePitchAlignment() const;
|
uint imagePitchAlignment() const;
|
||||||
uint imageBaseAddressAlignment() const;
|
uint imageBaseAddressAlignment() const;
|
||||||
|
|
||||||
|
/// deprecated, use isExtensionSupported() method (probably with "cl_khr_subgroups" value)
|
||||||
bool intelSubgroupsSupport() const;
|
bool intelSubgroupsSupport() const;
|
||||||
|
|
||||||
size_t image2DMaxWidth() const;
|
size_t image2DMaxWidth() const;
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream> // std::cerr
|
#include <iostream> // std::cerr
|
||||||
@ -518,6 +519,7 @@ struct Device::Impl
|
|||||||
|
|
||||||
name_ = getStrProp(CL_DEVICE_NAME);
|
name_ = getStrProp(CL_DEVICE_NAME);
|
||||||
version_ = getStrProp(CL_DEVICE_VERSION);
|
version_ = getStrProp(CL_DEVICE_VERSION);
|
||||||
|
extensions_ = getStrProp(CL_DEVICE_EXTENSIONS);
|
||||||
doubleFPConfig_ = getProp<cl_device_fp_config, int>(CL_DEVICE_DOUBLE_FP_CONFIG);
|
doubleFPConfig_ = getProp<cl_device_fp_config, int>(CL_DEVICE_DOUBLE_FP_CONFIG);
|
||||||
hostUnifiedMemory_ = getBoolProp(CL_DEVICE_HOST_UNIFIED_MEMORY);
|
hostUnifiedMemory_ = getBoolProp(CL_DEVICE_HOST_UNIFIED_MEMORY);
|
||||||
maxComputeUnits_ = getProp<cl_uint, int>(CL_DEVICE_MAX_COMPUTE_UNITS);
|
maxComputeUnits_ = getProp<cl_uint, int>(CL_DEVICE_MAX_COMPUTE_UNITS);
|
||||||
@ -528,6 +530,20 @@ struct Device::Impl
|
|||||||
String deviceVersion_ = getStrProp(CL_DEVICE_VERSION);
|
String deviceVersion_ = getStrProp(CL_DEVICE_VERSION);
|
||||||
parseDeviceVersion(deviceVersion_, deviceVersionMajor_, deviceVersionMinor_);
|
parseDeviceVersion(deviceVersion_, deviceVersionMajor_, deviceVersionMinor_);
|
||||||
|
|
||||||
|
size_t pos = 0;
|
||||||
|
while (pos < extensions_.size())
|
||||||
|
{
|
||||||
|
size_t pos2 = extensions_.find(' ', pos);
|
||||||
|
if (pos2 == String::npos)
|
||||||
|
pos2 = extensions_.size();
|
||||||
|
if (pos2 > pos)
|
||||||
|
{
|
||||||
|
std::string extensionName = extensions_.substr(pos, pos2 - pos);
|
||||||
|
extensions_set_.insert(extensionName);
|
||||||
|
}
|
||||||
|
pos = pos2 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
intelSubgroupsSupport_ = isExtensionSupported("cl_intel_subgroups");
|
intelSubgroupsSupport_ = isExtensionSupported("cl_intel_subgroups");
|
||||||
|
|
||||||
vendorName_ = getStrProp(CL_DEVICE_VENDOR);
|
vendorName_ = getStrProp(CL_DEVICE_VENDOR);
|
||||||
@ -569,23 +585,19 @@ struct Device::Impl
|
|||||||
sz < sizeof(buf) ? String(buf) : String();
|
sz < sizeof(buf) ? String(buf) : String();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isExtensionSupported(const String& extensionName) const
|
bool isExtensionSupported(const std::string& extensionName) const
|
||||||
{
|
{
|
||||||
bool ret = false;
|
return extensions_set_.count(extensionName) > 0;
|
||||||
size_t pos = getStrProp(CL_DEVICE_EXTENSIONS).find(extensionName);
|
|
||||||
if (pos != String::npos)
|
|
||||||
{
|
|
||||||
ret = true;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IMPLEMENT_REFCOUNTABLE();
|
IMPLEMENT_REFCOUNTABLE();
|
||||||
|
|
||||||
cl_device_id handle;
|
cl_device_id handle;
|
||||||
|
|
||||||
String name_;
|
String name_;
|
||||||
String version_;
|
String version_;
|
||||||
|
std::string extensions_;
|
||||||
int doubleFPConfig_;
|
int doubleFPConfig_;
|
||||||
bool hostUnifiedMemory_;
|
bool hostUnifiedMemory_;
|
||||||
int maxComputeUnits_;
|
int maxComputeUnits_;
|
||||||
@ -597,6 +609,8 @@ struct Device::Impl
|
|||||||
String vendorName_;
|
String vendorName_;
|
||||||
int vendorID_;
|
int vendorID_;
|
||||||
bool intelSubgroupsSupport_;
|
bool intelSubgroupsSupport_;
|
||||||
|
|
||||||
|
std::set<std::string> extensions_set_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -651,7 +665,10 @@ String Device::name() const
|
|||||||
{ return p ? p->name_ : String(); }
|
{ return p ? p->name_ : String(); }
|
||||||
|
|
||||||
String Device::extensions() const
|
String Device::extensions() const
|
||||||
{ return p ? p->getStrProp(CL_DEVICE_EXTENSIONS) : String(); }
|
{ return p ? String(p->extensions_) : String(); }
|
||||||
|
|
||||||
|
bool Device::isExtensionSupported(const String& extensionName) const
|
||||||
|
{ return p ? p->isExtensionSupported(extensionName) : false; }
|
||||||
|
|
||||||
String Device::version() const
|
String Device::version() const
|
||||||
{ return p ? p->version_ : String(); }
|
{ return p ? p->version_ : String(); }
|
||||||
@ -744,16 +761,7 @@ bool Device::imageSupport() const
|
|||||||
|
|
||||||
bool Device::imageFromBufferSupport() const
|
bool Device::imageFromBufferSupport() const
|
||||||
{
|
{
|
||||||
bool ret = false;
|
return p ? p->isExtensionSupported("cl_khr_image2d_from_buffer") : false;
|
||||||
if (p)
|
|
||||||
{
|
|
||||||
size_t pos = p->getStrProp(CL_DEVICE_EXTENSIONS).find("cl_khr_image2d_from_buffer");
|
|
||||||
if (pos != String::npos)
|
|
||||||
{
|
|
||||||
ret = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint Device::imagePitchAlignment() const
|
uint Device::imagePitchAlignment() const
|
||||||
|
|||||||
@ -181,6 +181,23 @@ void dumpOpenCLDevice()
|
|||||||
DUMP_MESSAGE_STDOUT(" Host unified memory = "<< isUnifiedMemoryStr);
|
DUMP_MESSAGE_STDOUT(" Host unified memory = "<< isUnifiedMemoryStr);
|
||||||
DUMP_PROPERTY_XML("cv_ocl_current_hostUnifiedMemory", device.hostUnifiedMemory());
|
DUMP_PROPERTY_XML("cv_ocl_current_hostUnifiedMemory", device.hostUnifiedMemory());
|
||||||
|
|
||||||
|
DUMP_MESSAGE_STDOUT(" Device extensions:");
|
||||||
|
String extensionsStr = device.extensions();
|
||||||
|
size_t pos = 0;
|
||||||
|
while (pos < extensionsStr.size())
|
||||||
|
{
|
||||||
|
size_t pos2 = extensionsStr.find(' ', pos);
|
||||||
|
if (pos2 == String::npos)
|
||||||
|
pos2 = extensionsStr.size();
|
||||||
|
if (pos2 > pos)
|
||||||
|
{
|
||||||
|
String extensionName = extensionsStr.substr(pos, pos2 - pos);
|
||||||
|
DUMP_MESSAGE_STDOUT(" " << extensionName);
|
||||||
|
}
|
||||||
|
pos = pos2 + 1;
|
||||||
|
}
|
||||||
|
DUMP_PROPERTY_XML("cv_ocl_current_extensions", extensionsStr.c_str());
|
||||||
|
|
||||||
const char* haveAmdBlasStr = haveAmdBlas() ? "Yes" : "No";
|
const char* haveAmdBlasStr = haveAmdBlas() ? "Yes" : "No";
|
||||||
DUMP_MESSAGE_STDOUT(" Has AMD Blas = "<< haveAmdBlasStr);
|
DUMP_MESSAGE_STDOUT(" Has AMD Blas = "<< haveAmdBlasStr);
|
||||||
DUMP_PROPERTY_XML("cv_ocl_current_AmdBlas", haveAmdBlas());
|
DUMP_PROPERTY_XML("cv_ocl_current_AmdBlas", haveAmdBlas());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user