From c1d21f2a47e34362ee1d939bca8ca082f5474b33 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Fri, 4 Jan 2013 15:23:14 +0000 Subject: Import initial git-svn-id: file:///var/svn/2013-gpudataviz/trunk@2 371a6b4a-a258-45f8-9dcc-bdd82ce0ac9d --- src/boring_parts.cc | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/boring_parts.cc (limited to 'src/boring_parts.cc') diff --git a/src/boring_parts.cc b/src/boring_parts.cc new file mode 100644 index 0000000..3affae9 --- /dev/null +++ b/src/boring_parts.cc @@ -0,0 +1,101 @@ +#include "boring_parts.h" + +#define RETURN_IF_FAIL(expr) do { \ + int res=(expr); \ + if ( res != 0 ) return res; \ +} while(0) + +// TODO : print streamsdk::getOpenCLErrorCodeStr(res) +#define CL_RETURN_VAL_IF_FAIL(val, expr) do { \ + cl_int res=(expr); \ + if ( res != CL_SUCCESS ) { \ + std::cerr << "file " << __FILE__ << ": line " << __LINE__ << " (" << __PRETTY_FUNCTION__ \ + << "): '" << "expr" << "' failed (return code : " << res << ")" << std::endl; \ + return val; \ + } \ +} while(0) + +int initLibs() { + + // FIXME : unused + RETURN_IF_FAIL( initOpenCL() ); + + return 0; +} + +int initOpenCL() { + cl_uint id, numPlatforms, numDevices; + char pbuf[100]; + std::string dTypeStr; + cl_platform_id *platforms, platform; + cl_device_id *devices, device; + + // Get platform count + CL_RETURN_VAL_IF_FAIL(1, + clGetPlatformIDs(0, NULL, &numPlatforms) + ); + + std::cout << "Detected " << numPlatforms << " platform(s)" << std::endl; + if ( ! ( numPlatforms > 0 ) ) return 2; + + // Allocate room for all platform IDs + platforms = new cl_platform_id[numPlatforms]; + + // Get platform IDs + CL_RETURN_VAL_IF_FAIL(3, + clGetPlatformIDs(numPlatforms, platforms, &numPlatforms) + ); + + // Enumerate platforms and grab informations + for(id=0;id 0 ) ) return 12; + + // Allocate room for all devices IDs + devices = new cl_device_id[numDevices]; + + // Get devices IDs + CL_RETURN_VAL_IF_FAIL(13, + clGetDeviceIDs(platform,CL_DEVICE_TYPE_ALL,numDevices,devices,&numDevices) + ); + + // Enumerate devices and grab informations + for(id=0;id