dumpinfo
This commit is contained in:
@@ -59,6 +59,7 @@ class CV_EXPORTS Kernel;
|
||||
class CV_EXPORTS Program;
|
||||
class CV_EXPORTS ProgramSource2;
|
||||
class CV_EXPORTS Queue;
|
||||
class CV_EXPORTS PlatformInform;
|
||||
|
||||
class CV_EXPORTS Device
|
||||
{
|
||||
@@ -84,6 +85,7 @@ public:
|
||||
|
||||
String name() const;
|
||||
String extensions() const;
|
||||
String version() const;
|
||||
String vendor() const;
|
||||
String OpenCL_C_Version() const;
|
||||
String OpenCLVersion() const;
|
||||
@@ -549,9 +551,28 @@ protected:
|
||||
Impl* p;
|
||||
};
|
||||
|
||||
class CV_EXPORTS PlatformInform
|
||||
{
|
||||
public:
|
||||
PlatformInform();
|
||||
explicit PlatformInform(void* id);
|
||||
~PlatformInform();
|
||||
|
||||
String name() const;
|
||||
String vendor() const;
|
||||
String version() const;
|
||||
int deviceNumber() const;
|
||||
void getDevice(Device& device, int d) const;
|
||||
|
||||
protected:
|
||||
struct Impl;
|
||||
Impl* p;
|
||||
};
|
||||
|
||||
CV_EXPORTS const char* convertTypeStr(int sdepth, int ddepth, int cn, char* buf);
|
||||
CV_EXPORTS const char* typeToStr(int t);
|
||||
CV_EXPORTS const char* memopTypeToStr(int t);
|
||||
CV_EXPORTS void getPlatfomsInfo(std::vector<PlatformInform>& platform_info);
|
||||
|
||||
}}
|
||||
|
||||
|
@@ -1693,6 +1693,9 @@ String Device::name() const
|
||||
String Device::extensions() const
|
||||
{ return p ? p->getStrProp(CL_DEVICE_EXTENSIONS) : String(); }
|
||||
|
||||
String Device::version() const
|
||||
{ return p ? p->getStrProp(CL_DEVICE_VERSION) : String(); }
|
||||
|
||||
String Device::vendor() const
|
||||
{ return p ? p->getStrProp(CL_DEVICE_VENDOR) : String(); }
|
||||
|
||||
@@ -3621,6 +3624,110 @@ MatAllocator* getOpenCLAllocator()
|
||||
return &allocator;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void getDevices(std::vector<cl_device_id>& devices,cl_platform_id& platform)
|
||||
{
|
||||
cl_int status = CL_SUCCESS;
|
||||
cl_uint numDevices = 0;
|
||||
status = clGetDeviceIDs(platform, (cl_device_type)Device::TYPE_ALL, 0, NULL, &numDevices);
|
||||
CV_Assert(status == CL_SUCCESS);
|
||||
if (numDevices == 0)
|
||||
return;
|
||||
devices.resize((size_t)numDevices);
|
||||
status = clGetDeviceIDs(platform, (cl_device_type)Device::TYPE_ALL, numDevices, &devices[0], &numDevices);
|
||||
CV_Assert(status == CL_SUCCESS);
|
||||
devices.resize(numDevices);
|
||||
}
|
||||
|
||||
struct PlatformInform::Impl
|
||||
{
|
||||
Impl(void* id)
|
||||
{
|
||||
handle = *(cl_platform_id*)id;
|
||||
getDevices(devices, handle);
|
||||
}
|
||||
|
||||
String getStrProp(cl_device_info prop) const
|
||||
{
|
||||
char buf[1024];
|
||||
size_t sz=0;
|
||||
return clGetPlatformInfo(handle, prop, sizeof(buf)-16, buf, &sz) >= 0 &&
|
||||
sz < sizeof(buf) ? String(buf) : String();
|
||||
}
|
||||
|
||||
IMPLEMENT_REFCOUNTABLE();
|
||||
std::vector<cl_device_id> devices;
|
||||
cl_platform_id handle;
|
||||
};
|
||||
|
||||
PlatformInform::PlatformInform()
|
||||
{
|
||||
p = 0;
|
||||
}
|
||||
|
||||
PlatformInform::PlatformInform(void* platform_id)
|
||||
{
|
||||
p = new Impl(platform_id);
|
||||
}
|
||||
|
||||
PlatformInform::~PlatformInform()
|
||||
{
|
||||
if(p)
|
||||
p->release();
|
||||
}
|
||||
|
||||
int PlatformInform::deviceNumber() const
|
||||
{
|
||||
return p ? (int)p->devices.size() : 0;
|
||||
}
|
||||
|
||||
void PlatformInform::getDevice(Device& device, int d) const
|
||||
{
|
||||
CV_Assert(d < (int)p->devices.size() );
|
||||
if(p)
|
||||
device.set(p->devices[d]);
|
||||
}
|
||||
|
||||
String PlatformInform::name() const
|
||||
{
|
||||
return p ? p->getStrProp(CL_PLATFORM_NAME) : String();
|
||||
}
|
||||
|
||||
String PlatformInform::vendor() const
|
||||
{
|
||||
return p ? p->getStrProp(CL_PLATFORM_VENDOR) : String();
|
||||
}
|
||||
|
||||
String PlatformInform::version() const
|
||||
{
|
||||
return p ? p->getStrProp(CL_PLATFORM_VERSION) : String();
|
||||
}
|
||||
|
||||
static void getPlatforms(std::vector<cl_platform_id>& platforms)
|
||||
{
|
||||
cl_int status = CL_SUCCESS;
|
||||
cl_uint numPlatforms = 0;
|
||||
status = clGetPlatformIDs(0, NULL, &numPlatforms);
|
||||
CV_Assert(status == CL_SUCCESS);
|
||||
if (numPlatforms == 0)
|
||||
return;
|
||||
platforms.resize((size_t)numPlatforms);
|
||||
status = clGetPlatformIDs(numPlatforms, &platforms[0], &numPlatforms);
|
||||
CV_Assert(status == CL_SUCCESS);
|
||||
platforms.resize(numPlatforms);
|
||||
}
|
||||
|
||||
void getPlatfomsInfo(std::vector<PlatformInform>& platformsInfo)
|
||||
{
|
||||
std::vector<cl_platform_id> platforms;
|
||||
getPlatforms(platforms);
|
||||
for (size_t i = 0; i < platforms.size(); i++)
|
||||
{
|
||||
platformsInfo.push_back( PlatformInform((void*)&platforms[i]) );
|
||||
}
|
||||
}
|
||||
|
||||
const char* typeToStr(int t)
|
||||
{
|
||||
static const char* tab[]=
|
||||
|
Reference in New Issue
Block a user