[clfft] 55/64: syncing upstream repo and local fork

Jérôme Kieffer kieffer-guest at moszumanska.debian.org
Wed May 20 07:33:37 UTC 2015


This is an automated email from the git hooks/post-receive script.

kieffer-guest pushed a commit to branch develop
in repository clfft.

commit 2a533358c6a559d1a996e1c3077dd05bc8845191
Merge: 2c0bb93 42a90d2
Author: bragadeesh <bragadeesh.natarajan at amd>
Date:   Tue Mar 31 17:11:26 2015 -0500

    syncing upstream repo and local fork

 .gitignore                      |    3 +
 .travis.yml                     |   14 +-
 README.md                       |   14 +-
 doc/clFFT.doxy                  | 2603 +++++++++++++++++++++++----------------
 src/CMakeLists.txt              |   48 +-
 src/clFFTConfig.cmake.in        |    3 +
 src/clFFTConfigVersion.cmake.in |   46 +
 src/client/CMakeLists.txt       |   14 +-
 src/client/client.cpp           |   52 +-
 src/client/openCL.misc.cpp      |  273 ++--
 src/client/openCL.misc.h        |   43 +-
 src/examples/CMakeLists.txt     |   52 +
 src/examples/fft1d.c            |  136 ++
 src/examples/fft2d.c            |  145 +++
 src/examples/fft3d.c            |  154 +++
 src/gtest.cmake                 |   79 ++
 src/include/sharedLibrary.h     |   16 +-
 src/library/CMakeLists.txt      |    1 +
 src/library/mainpage.h          |    2 +-
 src/scripts/perf/CMakeLists.txt |    7 +-
 src/statTimer/CMakeLists.txt    |    1 +
 src/tests/buffer.h              |    2 +-
 src/tests/cl_transform.h        |    7 +-
 src/tests/gtest_main.cpp        |   34 +-
 src/tests/test_constants.cpp    |    5 +-
 src/tests/test_constants.h      |    5 +-
 src/tests/unit_test.cpp         |    5 +-
 27 files changed, 2485 insertions(+), 1279 deletions(-)

diff --cc src/client/openCL.misc.cpp
index 71e4650,ba6fdc4..cb5db29
--- a/src/client/openCL.misc.cpp
+++ b/src/client/openCL.misc.cpp
@@@ -27,188 -27,207 +27,207 @@@
  #include "clFFT.h"
  #include "openCL.misc.h"
  
+ 
+ 
  void prettyPrintPlatformInfo( const cl_platform_id& pId )
  {
 -	size_t platformProfileSize	= 0;
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_PROFILE, 0, NULL, &platformProfileSize ),
 -		"Getting CL_PLATFORM_PROFILE Platform Info string size ( ::clGetPlatformInfo() )" );
 -
 -	std::vector< char > szPlatformProfile( platformProfileSize );
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_PROFILE, platformProfileSize, &szPlatformProfile[ 0 ], NULL),
 -		"Getting CL_PLATFORM_PROFILE Platform Info string ( ::clGetPlatformInfo() )" );
 -
 -	size_t platformVersionSize	= 0;
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VERSION, 0, NULL, &platformVersionSize ),
 -		"Getting CL_PLATFORM_VERSION Platform Info string size ( ::clGetPlatformInfo() )" );
 -
 -	std::vector< char > szPlatformVersion( platformVersionSize );
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VERSION, platformVersionSize, &szPlatformVersion[ 0 ], NULL),
 -		"Getting CL_PLATFORM_VERSION Platform Info string ( ::clGetPlatformInfo() )" );
 -
 -	size_t platformNameSize	= 0;
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_NAME, 0, NULL, &platformNameSize ),
 -		"Getting CL_PLATFORM_NAME Platform Info string size ( ::clGetPlatformInfo() )" );
 -
 -	std::vector< char > szPlatformName( platformNameSize );
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_NAME, platformNameSize, &szPlatformName[ 0 ], NULL),
 -		"Getting CL_PLATFORM_NAME Platform Info string ( ::clGetPlatformInfo() )" );
 -
 -	size_t vendorStringSize	= 0;
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VENDOR, 0, NULL, &vendorStringSize ),
 -		"Getting CL_PLATFORM_VENDOR Platform Info string size ( ::clGetPlatformInfo() )" );
 -
 -	std::vector< char > szPlatformVendor( vendorStringSize );
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VENDOR, vendorStringSize, &szPlatformVendor[ 0 ], NULL),
 -		"Getting CL_PLATFORM_VENDOR Platform Info string ( ::clGetPlatformInfo() )" );
 -
 -	size_t platformExtensionsSize	= 0;
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_EXTENSIONS, 0, NULL, &platformExtensionsSize ),
 -		"Getting CL_PLATFORM_EXTENSIONS Platform Info string size ( ::clGetPlatformInfo() )" );
 -
 -	std::vector< char > szPlatformExtensions( platformExtensionsSize );
 -	OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_EXTENSIONS, platformExtensionsSize, &szPlatformExtensions[ 0 ], NULL),
 -		"Getting CL_PLATFORM_EXTENSIONS Platform Info string ( ::clGetPlatformInfo() )" );
 -
 -	const int indent = countOf( "    CL_PLATFORM_EXTENSIONS: " );
 -	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_PROFILE: " << &szPlatformProfile[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_VERSION: " << &szPlatformVersion[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_NAME: " << &szPlatformName[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_VENDOR: " << &szPlatformVendor[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_EXTENSIONS: " << &szPlatformExtensions[ 0 ] << std::endl;
 -	std::cout << std::right << std::endl;
 +    size_t platformProfileSize	= 0;
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_PROFILE, 0, NULL, &platformProfileSize ),
 +        "Getting CL_PLATFORM_PROFILE Platform Info string size ( ::clGetPlatformInfo() )" );
 +
 +    std::vector< char > szPlatformProfile( platformProfileSize );
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_PROFILE, platformProfileSize, &szPlatformProfile[ 0 ], NULL),
 +        "Getting CL_PLATFORM_PROFILE Platform Info string ( ::clGetPlatformInfo() )" );
 +
 +    size_t platformVersionSize	= 0;
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VERSION, 0, NULL, &platformVersionSize ),
 +        "Getting CL_PLATFORM_VERSION Platform Info string size ( ::clGetPlatformInfo() )" );
 +
 +    std::vector< char > szPlatformVersion( platformVersionSize );
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VERSION, platformVersionSize, &szPlatformVersion[ 0 ], NULL),
 +        "Getting CL_PLATFORM_VERSION Platform Info string ( ::clGetPlatformInfo() )" );
 +
 +    size_t platformNameSize	= 0;
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_NAME, 0, NULL, &platformNameSize ),
 +        "Getting CL_PLATFORM_NAME Platform Info string size ( ::clGetPlatformInfo() )" );
 +
 +    std::vector< char > szPlatformName( platformNameSize );
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_NAME, platformNameSize, &szPlatformName[ 0 ], NULL),
 +        "Getting CL_PLATFORM_NAME Platform Info string ( ::clGetPlatformInfo() )" );
 +
 +    size_t vendorStringSize	= 0;
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VENDOR, 0, NULL, &vendorStringSize ),
 +        "Getting CL_PLATFORM_VENDOR Platform Info string size ( ::clGetPlatformInfo() )" );
 +
 +    std::vector< char > szPlatformVendor( vendorStringSize );
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_VENDOR, vendorStringSize, &szPlatformVendor[ 0 ], NULL),
 +        "Getting CL_PLATFORM_VENDOR Platform Info string ( ::clGetPlatformInfo() )" );
 +
 +    size_t platformExtensionsSize	= 0;
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_EXTENSIONS, 0, NULL, &platformExtensionsSize ),
 +        "Getting CL_PLATFORM_EXTENSIONS Platform Info string size ( ::clGetPlatformInfo() )" );
 +
 +    std::vector< char > szPlatformExtensions( platformExtensionsSize );
 +    OPENCL_V_THROW( ::clGetPlatformInfo( pId, CL_PLATFORM_EXTENSIONS, platformExtensionsSize, &szPlatformExtensions[ 0 ], NULL),
 +        "Getting CL_PLATFORM_EXTENSIONS Platform Info string ( ::clGetPlatformInfo() )" );
 +
 +    const int indent = countOf( "    CL_PLATFORM_EXTENSIONS: " );
 +    std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_PROFILE: " << &szPlatformProfile[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_VERSION: " << &szPlatformVersion[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_NAME: " << &szPlatformName[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_VENDOR: " << &szPlatformVendor[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_PLATFORM_EXTENSIONS: " << &szPlatformExtensions[ 0 ] << std::endl;
 +    std::cout << std::right << std::endl;
  }
  
  void prettyPrintDeviceInfo( const cl_device_id& dId )
  {
 -	size_t deviceNameSize	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_NAME, 0, NULL, &deviceNameSize ),
 -		"Getting CL_DEVICE_NAME Platform Info string size ( ::clGetDeviceInfo() )" );
 -
 -	std::vector< char > szDeviceName( deviceNameSize );
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_NAME, deviceNameSize, &szDeviceName[ 0 ], NULL ),
 -		"Getting CL_DEVICE_NAME Platform Info string ( ::clGetDeviceInfo() )" );
 -
 -	size_t deviceVersionSize	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_VERSION, 0, NULL, &deviceVersionSize ),
 -		"Getting CL_DEVICE_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
 -
 -	std::vector< char > szDeviceVersion( deviceVersionSize );
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_VERSION, deviceVersionSize, &szDeviceVersion[ 0 ], NULL ),
 -		"Getting CL_DEVICE_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
 -
 -	size_t driverVersionSize	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DRIVER_VERSION, 0, NULL, &driverVersionSize ),
 -		"Getting CL_DRIVER_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
 -
 -	std::vector< char > szDriverVersion( driverVersionSize );
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DRIVER_VERSION, driverVersionSize, &szDriverVersion[ 0 ], NULL ),
 -		"Getting CL_DRIVER_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
 -
 -	size_t openCLVersionSize	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_OPENCL_C_VERSION, 0, NULL, &openCLVersionSize ),
 -		"Getting CL_DEVICE_OPENCL_C_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
 -
 -	std::vector< char > szOpenCLVersion( openCLVersionSize );
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_OPENCL_C_VERSION, openCLVersionSize, &szOpenCLVersion[ 0 ], NULL ),
 -		"Getting CL_DEVICE_OPENCL_C_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
 -
 -	cl_device_type devType = CL_DEVICE_TYPE_DEFAULT;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_TYPE, sizeof( cl_device_type ), &devType, NULL ),
 -		"Getting CL_DEVICE_TYPE device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_uint devAddrBits = 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_ADDRESS_BITS, sizeof( cl_uint ), &devAddrBits, NULL ),
 -		"Getting CL_DEVICE_ADDRESS_BITS device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_uint maxClockFreq = 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof( cl_uint ), &maxClockFreq, NULL ),
 -		"Getting CL_DEVICE_MAX_CLOCK_FREQUENCY device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_bool devAvailable = CL_FALSE;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_AVAILABLE, sizeof( cl_bool ), &devAvailable, NULL ),
 -		"Getting CL_DEVICE_AVAILABLE device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_bool devCompAvailable = CL_FALSE;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_COMPILER_AVAILABLE, sizeof( cl_bool ), &devCompAvailable, NULL ),
 -		"Getting CL_DEVICE_COMPILER_AVAILABLE device info ( ::clGetDeviceInfo() )" );
 -
 -	size_t devMaxWorkGroup	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof( size_t ), &devMaxWorkGroup, NULL ),
 -		"Getting CL_DEVICE_MAX_WORK_GROUP_SIZE device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_uint devMaxWorkItemDim = CL_FALSE;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof( cl_uint ), &devMaxWorkItemDim, NULL ),
 -		"Getting CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS device info ( ::clGetDeviceInfo() )" );
 -
 -	std::vector< size_t >	devMaxWorkItemSizes( devMaxWorkItemDim );
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof( size_t )*devMaxWorkItemSizes.size( ), &devMaxWorkItemSizes[0], NULL),
 -		"Getting CL_DEVICE_MAX_WORK_ITEM_SIZES device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_bool deviceHostUnified = 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof( cl_bool ), &deviceHostUnified, NULL ),
 -		"Getting CL_DEVICE_HOST_UNIFIED_MEMORY Platform Info string ( ::clGetDeviceInfo() )" );
 -
 -	cl_ulong devMaxConstantBuffer	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof( cl_ulong ), &devMaxConstantBuffer, NULL ),
 -		"Getting CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_ulong devLocalMemSize	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_LOCAL_MEM_SIZE, sizeof( cl_ulong ), &devLocalMemSize, NULL ),
 -		"Getting CL_DEVICE_LOCAL_MEM_SIZE device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_ulong deviceGlobalMemSize = 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof( cl_ulong ), &deviceGlobalMemSize, NULL ),
 -		"Getting CL_DEVICE_GLOBAL_MEM_SIZE device info ( ::clGetDeviceInfo() )" );
 -
 -	cl_ulong deviceMaxMemAllocSize = 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof( cl_ulong ), &deviceMaxMemAllocSize, NULL ),
 -		"Getting CL_DEVICE_MAX_MEM_ALLOC_SIZE device info ( ::clGetDeviceInfo() )" );
 -
 -	size_t deviceExtSize	= 0;
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_EXTENSIONS, 0, NULL, &deviceExtSize ),
 -		"Getting CL_DEVICE_EXTENSIONS Platform Info string size ( ::clGetDeviceInfo() )" );
 -
 -	std::vector< char > szDeviceExt( deviceExtSize );
 -	OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_EXTENSIONS, deviceExtSize, &szDeviceExt[ 0 ], NULL ),
 -		"Getting CL_DEVICE_EXTENSIONS Platform Info string ( ::clGetDeviceInfo() )" );
 -
 -	const int indent = countOf( "    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " );
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_NAME: " << &szDeviceName[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_VERSION: " << &szDeviceVersion[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DRIVER_VERSION: " << &szDriverVersion[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_TYPE: "
 -		<< (CL_DEVICE_TYPE_DEFAULT     & devType ? "default"     : "")
 -		<< (CL_DEVICE_TYPE_CPU         & devType ? "CPU"         : "")
 -		<< (CL_DEVICE_TYPE_GPU         & devType ? "GPU"         : "")
 -		<< (CL_DEVICE_TYPE_ACCELERATOR & devType ? "Accelerator" : "")
 -		<< std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_CLOCK_FREQUENCY: " << maxClockFreq << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_ADDRESS_BITS: " << devAddrBits << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_AVAILABLE: " << ( devAvailable ? "TRUE": "FALSE") << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_COMPILER_AVAILABLE: " << ( devCompAvailable ? "TRUE": "FALSE") << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_OPENCL_C_VERSION: " << &szOpenCLVersion[ 0 ] << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_WORK_GROUP_SIZE: " << devMaxWorkGroup << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " << devMaxWorkItemDim << std::endl;
 -	for( cl_uint wis = 0; wis < devMaxWorkItemSizes.size( ); ++wis )
 -	{
 -		std::stringstream dimString;
 -		dimString << "Dimension[ " << wis << " ]  ";
 -		std::cout << std::right << std::setw( indent ) << dimString.str( ) << devMaxWorkItemSizes[wis] << std::endl;
 -	}
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_HOST_UNIFIED_MEMORY: " << ( deviceHostUnified ? "TRUE": "FALSE") << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: " << devMaxConstantBuffer;
 -	std::cout << " ( " << devMaxConstantBuffer / 1024 << " KB )" << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_LOCAL_MEM_SIZE: " << devLocalMemSize;
 -	std::cout << " ( " << devLocalMemSize / 1024 << " KB )" << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_GLOBAL_MEM_SIZE: " << deviceGlobalMemSize;
 -	std::cout << " ( " << deviceGlobalMemSize / 1048576 << " MB )" << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_MEM_ALLOC_SIZE: " << deviceMaxMemAllocSize;
 -	std::cout << " ( " << deviceMaxMemAllocSize / 1048576 << " MB )" << std::endl;
 -	std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_EXTENSIONS: " << &szDeviceExt[ 0 ] << std::endl;
 -
 -	std::cout << std::right << std::endl;
 +    size_t deviceNameSize	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_NAME, 0, NULL, &deviceNameSize ),
 +        "Getting CL_DEVICE_NAME Platform Info string size ( ::clGetDeviceInfo() )" );
 +
 +    std::vector< char > szDeviceName( deviceNameSize );
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_NAME, deviceNameSize, &szDeviceName[ 0 ], NULL ),
 +        "Getting CL_DEVICE_NAME Platform Info string ( ::clGetDeviceInfo() )" );
 +
 +    size_t deviceVersionSize	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_VERSION, 0, NULL, &deviceVersionSize ),
 +        "Getting CL_DEVICE_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
 +
 +    std::vector< char > szDeviceVersion( deviceVersionSize );
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_VERSION, deviceVersionSize, &szDeviceVersion[ 0 ], NULL ),
 +        "Getting CL_DEVICE_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
 +
 +    size_t driverVersionSize	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DRIVER_VERSION, 0, NULL, &driverVersionSize ),
 +        "Getting CL_DRIVER_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
 +
 +    std::vector< char > szDriverVersion( driverVersionSize );
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DRIVER_VERSION, driverVersionSize, &szDriverVersion[ 0 ], NULL ),
 +        "Getting CL_DRIVER_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
 +
 +    size_t openCLVersionSize	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_OPENCL_C_VERSION, 0, NULL, &openCLVersionSize ),
 +        "Getting CL_DEVICE_OPENCL_C_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
 +
 +    std::vector< char > szOpenCLVersion( openCLVersionSize );
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_OPENCL_C_VERSION, openCLVersionSize, &szOpenCLVersion[ 0 ], NULL ),
 +        "Getting CL_DEVICE_OPENCL_C_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
 +
 +    cl_device_type devType = CL_DEVICE_TYPE_DEFAULT;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_TYPE, sizeof( cl_device_type ), &devType, NULL ),
 +        "Getting CL_DEVICE_TYPE device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_uint devAddrBits = 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_ADDRESS_BITS, sizeof( cl_uint ), &devAddrBits, NULL ),
 +        "Getting CL_DEVICE_ADDRESS_BITS device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_uint maxClockFreq = 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof( cl_uint ), &maxClockFreq, NULL ),
 +        "Getting CL_DEVICE_MAX_CLOCK_FREQUENCY device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_bool devAvailable = CL_FALSE;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_AVAILABLE, sizeof( cl_bool ), &devAvailable, NULL ),
 +        "Getting CL_DEVICE_AVAILABLE device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_bool devCompAvailable = CL_FALSE;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_COMPILER_AVAILABLE, sizeof( cl_bool ), &devCompAvailable, NULL ),
 +        "Getting CL_DEVICE_COMPILER_AVAILABLE device info ( ::clGetDeviceInfo() )" );
 +
 +    size_t devMaxWorkGroup	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof( size_t ), &devMaxWorkGroup, NULL ),
 +        "Getting CL_DEVICE_MAX_WORK_GROUP_SIZE device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_uint devMaxWorkItemDim = CL_FALSE;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof( cl_uint ), &devMaxWorkItemDim, NULL ),
 +        "Getting CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS device info ( ::clGetDeviceInfo() )" );
 +
 +    std::vector< size_t >	devMaxWorkItemSizes( devMaxWorkItemDim );
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof( size_t )*devMaxWorkItemSizes.size( ), &devMaxWorkItemSizes[0], NULL),
 +        "Getting CL_DEVICE_MAX_WORK_ITEM_SIZES device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_bool deviceHostUnified = 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof( cl_bool ), &deviceHostUnified, NULL ),
 +        "Getting CL_DEVICE_HOST_UNIFIED_MEMORY Platform Info string ( ::clGetDeviceInfo() )" );
 +
 +    cl_ulong devMaxConstantBuffer	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof( cl_ulong ), &devMaxConstantBuffer, NULL ),
 +        "Getting CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_ulong devLocalMemSize	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_LOCAL_MEM_SIZE, sizeof( cl_ulong ), &devLocalMemSize, NULL ),
 +        "Getting CL_DEVICE_LOCAL_MEM_SIZE device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_ulong deviceGlobalMemSize = 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof( cl_ulong ), &deviceGlobalMemSize, NULL ),
 +        "Getting CL_DEVICE_GLOBAL_MEM_SIZE device info ( ::clGetDeviceInfo() )" );
 +
 +    cl_ulong deviceMaxMemAllocSize = 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof( cl_ulong ), &deviceMaxMemAllocSize, NULL ),
 +        "Getting CL_DEVICE_MAX_MEM_ALLOC_SIZE device info ( ::clGetDeviceInfo() )" );
 +
 +    size_t deviceExtSize	= 0;
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_EXTENSIONS, 0, NULL, &deviceExtSize ),
 +        "Getting CL_DEVICE_EXTENSIONS Platform Info string size ( ::clGetDeviceInfo() )" );
 +
 +    std::vector< char > szDeviceExt( deviceExtSize );
 +    OPENCL_V_THROW( ::clGetDeviceInfo( dId, CL_DEVICE_EXTENSIONS, deviceExtSize, &szDeviceExt[ 0 ], NULL ),
 +        "Getting CL_DEVICE_EXTENSIONS Platform Info string ( ::clGetDeviceInfo() )" );
 +
 +    const int indent = countOf( "    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " );
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_NAME: " << &szDeviceName[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_VERSION: " << &szDeviceVersion[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DRIVER_VERSION: " << &szDriverVersion[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_TYPE: "
 +        << (CL_DEVICE_TYPE_DEFAULT     & devType ? "default"     : "")
 +        << (CL_DEVICE_TYPE_CPU         & devType ? "CPU"         : "")
 +        << (CL_DEVICE_TYPE_GPU         & devType ? "GPU"         : "")
 +        << (CL_DEVICE_TYPE_ACCELERATOR & devType ? "Accelerator" : "")
 +        << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_CLOCK_FREQUENCY: " << maxClockFreq << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_ADDRESS_BITS: " << devAddrBits << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_AVAILABLE: " << ( devAvailable ? "TRUE": "FALSE") << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_COMPILER_AVAILABLE: " << ( devCompAvailable ? "TRUE": "FALSE") << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_OPENCL_C_VERSION: " << &szOpenCLVersion[ 0 ] << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_WORK_GROUP_SIZE: " << devMaxWorkGroup << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: " << devMaxWorkItemDim << std::endl;
 +    for( cl_uint wis = 0; wis < devMaxWorkItemSizes.size( ); ++wis )
 +    {
 +        std::stringstream dimString;
 +        dimString << "Dimension[ " << wis << " ]  ";
 +        std::cout << std::right << std::setw( indent ) << dimString.str( ) << devMaxWorkItemSizes[wis] << std::endl;
 +    }
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_HOST_UNIFIED_MEMORY: " << ( deviceHostUnified ? "TRUE": "FALSE") << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: " << devMaxConstantBuffer;
 +    std::cout << " ( " << devMaxConstantBuffer / 1024 << " KB )" << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_LOCAL_MEM_SIZE: " << devLocalMemSize;
 +    std::cout << " ( " << devLocalMemSize / 1024 << " KB )" << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_GLOBAL_MEM_SIZE: " << deviceGlobalMemSize;
 +    std::cout << " ( " << deviceGlobalMemSize / 1048576 << " MB )" << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_MAX_MEM_ALLOC_SIZE: " << deviceMaxMemAllocSize;
 +    std::cout << " ( " << deviceMaxMemAllocSize / 1048576 << " MB )" << std::endl;
 +    std::cout << std::left << std::setw( indent ) << "    CL_DEVICE_EXTENSIONS: " << &szDeviceExt[ 0 ] << std::endl;
 +
 +    std::cout << std::right << std::endl;
  }
  
+ void prettyPrintCLPlatforms(std::vector< cl_platform_id >& platforms,
+ 	std::vector< std::vector< cl_device_id > >& devices)
+ {
+ 	for (unsigned int i = 0; i < platforms.size(); ++i)
+ 	{
+ 		std::cout << "OpenCL platform [ " << i << " ]:" << std::endl;
+ 		prettyPrintPlatformInfo(platforms[i]);
+ 
+ 		for (unsigned int n = 0; n < devices[i].size(); ++n)
+ 		{
+ 			std::cout << "OpenCL platform [ " << i << " ], device [ " << n << " ]:" << std::endl;
+ 			prettyPrintDeviceInfo((devices[i])[n]);
+ 		}
+ 	}
+ 
+ }
+ 
  //	Verify a failed condition; return true on fail
  inline cl_bool OPENCL_V_FAIL( cl_int res )
  {
@@@ -220,259 -239,236 +239,239 @@@
  
  std::string prettyPrintclFFTStatus( const cl_int& status )
  {
 -	switch( status )
 -	{
 -		case CLFFT_INVALID_GLOBAL_WORK_SIZE:
 -			return "CLFFT_INVALID_GLOBAL_WORK_SIZE";
 -		case CLFFT_INVALID_MIP_LEVEL:
 -			return "CLFFT_INVALID_MIP_LEVEL";
 -		case CLFFT_INVALID_BUFFER_SIZE:
 -			return "CLFFT_INVALID_BUFFER_SIZE";
 -		case CLFFT_INVALID_GL_OBJECT:
 -			return "CLFFT_INVALID_GL_OBJECT";
 -		case CLFFT_INVALID_OPERATION:
 -			return "CLFFT_INVALID_OPERATION";
 -		case CLFFT_INVALID_EVENT:
 -			return "CLFFT_INVALID_EVENT";
 -		case CLFFT_INVALID_EVENT_WAIT_LIST:
 -			return "CLFFT_INVALID_EVENT_WAIT_LIST";
 -		case CLFFT_INVALID_GLOBAL_OFFSET:
 -			return "CLFFT_INVALID_GLOBAL_OFFSET";
 -		case CLFFT_INVALID_WORK_ITEM_SIZE:
 -			return "CLFFT_INVALID_WORK_ITEM_SIZE";
 -		case CLFFT_INVALID_WORK_GROUP_SIZE:
 -			return "CLFFT_INVALID_WORK_GROUP_SIZE";
 -		case CLFFT_INVALID_WORK_DIMENSION:
 -			return "CLFFT_INVALID_WORK_DIMENSION";
 -		case CLFFT_INVALID_KERNEL_ARGS:
 -			return "CLFFT_INVALID_KERNEL_ARGS";
 -		case CLFFT_INVALID_ARG_SIZE:
 -			return "CLFFT_INVALID_ARG_SIZE";
 -		case CLFFT_INVALID_ARG_VALUE:
 -			return "CLFFT_INVALID_ARG_VALUE";
 -		case CLFFT_INVALID_ARG_INDEX:
 -			return "CLFFT_INVALID_ARG_INDEX";
 -		case CLFFT_INVALID_KERNEL:
 -			return "CLFFT_INVALID_KERNEL";
 -		case CLFFT_INVALID_KERNEL_DEFINITION:
 -			return "CLFFT_INVALID_KERNEL_DEFINITION";
 -		case CLFFT_INVALID_KERNEL_NAME:
 -			return "CLFFT_INVALID_KERNEL_NAME";
 -		case CLFFT_INVALID_PROGRAM_EXECUTABLE:
 -			return "CLFFT_INVALID_PROGRAM_EXECUTABLE";
 -		case CLFFT_INVALID_PROGRAM:
 -			return "CLFFT_INVALID_PROGRAM";
 -		case CLFFT_INVALID_BUILD_OPTIONS:
 -			return "CLFFT_INVALID_BUILD_OPTIONS";
 -		case CLFFT_INVALID_BINARY:
 -			return "CLFFT_INVALID_BINARY";
 -		case CLFFT_INVALID_SAMPLER:
 -			return "CLFFT_INVALID_SAMPLER";
 -		case CLFFT_INVALID_IMAGE_SIZE:
 -			return "CLFFT_INVALID_IMAGE_SIZE";
 -		case CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR:
 -			return "CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR";
 -		case CLFFT_INVALID_MEM_OBJECT:
 -			return "CLFFT_INVALID_MEM_OBJECT";
 -		case CLFFT_INVALID_HOST_PTR:
 -			return "CLFFT_INVALID_HOST_PTR";
 -		case CLFFT_INVALID_COMMAND_QUEUE:
 -			return "CLFFT_INVALID_COMMAND_QUEUE";
 -		case CLFFT_INVALID_QUEUE_PROPERTIES:
 -			return "CLFFT_INVALID_QUEUE_PROPERTIES";
 -		case CLFFT_INVALID_CONTEXT:
 -			return "CLFFT_INVALID_CONTEXT";
 -		case CLFFT_INVALID_DEVICE:
 -			return "CLFFT_INVALID_DEVICE";
 -		case CLFFT_INVALID_PLATFORM:
 -			return "CLFFT_INVALID_PLATFORM";
 -		case CLFFT_INVALID_DEVICE_TYPE:
 -			return "CLFFT_INVALID_DEVICE_TYPE";
 -		case CLFFT_INVALID_VALUE:
 -			return "CLFFT_INVALID_VALUE";
 -		case CLFFT_MAP_FAILURE:
 -			return "CLFFT_MAP_FAILURE";
 -		case CLFFT_BUILD_PROGRAM_FAILURE:
 -			return "CLFFT_BUILD_PROGRAM_FAILURE";
 -		case CLFFT_IMAGE_FORMAT_NOT_SUPPORTED:
 -			return "CLFFT_IMAGE_FORMAT_NOT_SUPPORTED";
 -		case CLFFT_IMAGE_FORMAT_MISMATCH:
 -			return "CLFFT_IMAGE_FORMAT_MISMATCH";
 -		case CLFFT_MEM_COPY_OVERLAP:
 -			return "CLFFT_MEM_COPY_OVERLAP";
 -		case CLFFT_PROFILING_INFO_NOT_AVAILABLE:
 -			return "CLFFT_PROFILING_INFO_NOT_AVAILABLE";
 -		case CLFFT_OUT_OF_HOST_MEMORY:
 -			return "CLFFT_OUT_OF_HOST_MEMORY";
 -		case CLFFT_OUT_OF_RESOURCES:
 -			return "CLFFT_OUT_OF_RESOURCES";
 -		case CLFFT_MEM_OBJECT_ALLOCATION_FAILURE:
 -			return "CLFFT_MEM_OBJECT_ALLOCATION_FAILURE";
 -		case CLFFT_COMPILER_NOT_AVAILABLE:
 -			return "CLFFT_COMPILER_NOT_AVAILABLE";
 -		case CLFFT_DEVICE_NOT_AVAILABLE:
 -			return "CLFFT_DEVICE_NOT_AVAILABLE";
 -		case CLFFT_DEVICE_NOT_FOUND:
 -			return "CLFFT_DEVICE_NOT_FOUND";
 -		case CLFFT_SUCCESS:
 -			return "CLFFT_SUCCESS";
 -		case CLFFT_NOTIMPLEMENTED:
 -			return "CLFFT_NOTIMPLEMENTED";
 -		case CLFFT_FILE_NOT_FOUND:
 -			return "CLFFT_FILE_NOT_FOUND";
 -		case CLFFT_FILE_CREATE_FAILURE:
 -			return "CLFFT_FILE_CREATE_FAILURE";
 -		case CLFFT_VERSION_MISMATCH:
 -			return "CLFFT_VERSION_MISMATCH";
 -		case CLFFT_INVALID_PLAN:
 -			return "CLFFT_INVALID_PLAN";
 -		default:
 -			return "Error code not defined";
 -		break;
 -	}
 +    switch( status )
 +    {
 +        case CLFFT_INVALID_GLOBAL_WORK_SIZE:
 +            return "CLFFT_INVALID_GLOBAL_WORK_SIZE";
 +        case CLFFT_INVALID_MIP_LEVEL:
 +            return "CLFFT_INVALID_MIP_LEVEL";
 +        case CLFFT_INVALID_BUFFER_SIZE:
 +            return "CLFFT_INVALID_BUFFER_SIZE";
 +        case CLFFT_INVALID_GL_OBJECT:
 +            return "CLFFT_INVALID_GL_OBJECT";
 +        case CLFFT_INVALID_OPERATION:
 +            return "CLFFT_INVALID_OPERATION";
 +        case CLFFT_INVALID_EVENT:
 +            return "CLFFT_INVALID_EVENT";
 +        case CLFFT_INVALID_EVENT_WAIT_LIST:
 +            return "CLFFT_INVALID_EVENT_WAIT_LIST";
 +        case CLFFT_INVALID_GLOBAL_OFFSET:
 +            return "CLFFT_INVALID_GLOBAL_OFFSET";
 +        case CLFFT_INVALID_WORK_ITEM_SIZE:
 +            return "CLFFT_INVALID_WORK_ITEM_SIZE";
 +        case CLFFT_INVALID_WORK_GROUP_SIZE:
 +            return "CLFFT_INVALID_WORK_GROUP_SIZE";
 +        case CLFFT_INVALID_WORK_DIMENSION:
 +            return "CLFFT_INVALID_WORK_DIMENSION";
 +        case CLFFT_INVALID_KERNEL_ARGS:
 +            return "CLFFT_INVALID_KERNEL_ARGS";
 +        case CLFFT_INVALID_ARG_SIZE:
 +            return "CLFFT_INVALID_ARG_SIZE";
 +        case CLFFT_INVALID_ARG_VALUE:
 +            return "CLFFT_INVALID_ARG_VALUE";
 +        case CLFFT_INVALID_ARG_INDEX:
 +            return "CLFFT_INVALID_ARG_INDEX";
 +        case CLFFT_INVALID_KERNEL:
 +            return "CLFFT_INVALID_KERNEL";
 +        case CLFFT_INVALID_KERNEL_DEFINITION:
 +            return "CLFFT_INVALID_KERNEL_DEFINITION";
 +        case CLFFT_INVALID_KERNEL_NAME:
 +            return "CLFFT_INVALID_KERNEL_NAME";
 +        case CLFFT_INVALID_PROGRAM_EXECUTABLE:
 +            return "CLFFT_INVALID_PROGRAM_EXECUTABLE";
 +        case CLFFT_INVALID_PROGRAM:
 +            return "CLFFT_INVALID_PROGRAM";
 +        case CLFFT_INVALID_BUILD_OPTIONS:
 +            return "CLFFT_INVALID_BUILD_OPTIONS";
 +        case CLFFT_INVALID_BINARY:
 +            return "CLFFT_INVALID_BINARY";
 +        case CLFFT_INVALID_SAMPLER:
 +            return "CLFFT_INVALID_SAMPLER";
 +        case CLFFT_INVALID_IMAGE_SIZE:
 +            return "CLFFT_INVALID_IMAGE_SIZE";
 +        case CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR:
 +            return "CLFFT_INVALID_IMAGE_FORMAT_DESCRIPTOR";
 +        case CLFFT_INVALID_MEM_OBJECT:
 +            return "CLFFT_INVALID_MEM_OBJECT";
 +        case CLFFT_INVALID_HOST_PTR:
 +            return "CLFFT_INVALID_HOST_PTR";
 +        case CLFFT_INVALID_COMMAND_QUEUE:
 +            return "CLFFT_INVALID_COMMAND_QUEUE";
 +        case CLFFT_INVALID_QUEUE_PROPERTIES:
 +            return "CLFFT_INVALID_QUEUE_PROPERTIES";
 +        case CLFFT_INVALID_CONTEXT:
 +            return "CLFFT_INVALID_CONTEXT";
 +        case CLFFT_INVALID_DEVICE:
 +            return "CLFFT_INVALID_DEVICE";
 +        case CLFFT_INVALID_PLATFORM:
 +            return "CLFFT_INVALID_PLATFORM";
 +        case CLFFT_INVALID_DEVICE_TYPE:
 +            return "CLFFT_INVALID_DEVICE_TYPE";
 +        case CLFFT_INVALID_VALUE:
 +            return "CLFFT_INVALID_VALUE";
 +        case CLFFT_MAP_FAILURE:
 +            return "CLFFT_MAP_FAILURE";
 +        case CLFFT_BUILD_PROGRAM_FAILURE:
 +            return "CLFFT_BUILD_PROGRAM_FAILURE";
 +        case CLFFT_IMAGE_FORMAT_NOT_SUPPORTED:
 +            return "CLFFT_IMAGE_FORMAT_NOT_SUPPORTED";
 +        case CLFFT_IMAGE_FORMAT_MISMATCH:
 +            return "CLFFT_IMAGE_FORMAT_MISMATCH";
 +        case CLFFT_MEM_COPY_OVERLAP:
 +            return "CLFFT_MEM_COPY_OVERLAP";
 +        case CLFFT_PROFILING_INFO_NOT_AVAILABLE:
 +            return "CLFFT_PROFILING_INFO_NOT_AVAILABLE";
 +        case CLFFT_OUT_OF_HOST_MEMORY:
 +            return "CLFFT_OUT_OF_HOST_MEMORY";
 +        case CLFFT_OUT_OF_RESOURCES:
 +            return "CLFFT_OUT_OF_RESOURCES";
 +        case CLFFT_MEM_OBJECT_ALLOCATION_FAILURE:
 +            return "CLFFT_MEM_OBJECT_ALLOCATION_FAILURE";
 +        case CLFFT_COMPILER_NOT_AVAILABLE:
 +            return "CLFFT_COMPILER_NOT_AVAILABLE";
 +        case CLFFT_DEVICE_NOT_AVAILABLE:
 +            return "CLFFT_DEVICE_NOT_AVAILABLE";
 +        case CLFFT_DEVICE_NOT_FOUND:
 +            return "CLFFT_DEVICE_NOT_FOUND";
 +        case CLFFT_SUCCESS:
 +            return "CLFFT_SUCCESS";
 +        case CLFFT_NOTIMPLEMENTED:
 +            return "CLFFT_NOTIMPLEMENTED";
 +        case CLFFT_TRANSPOSED_NOTIMPLEMENTED:
 +            return "CLFFT_TRANSPOSED_NOTIMPLEMENTED";
 +        case CLFFT_FILE_NOT_FOUND:
 +            return "CLFFT_FILE_NOT_FOUND";
 +        case CLFFT_FILE_CREATE_FAILURE:
 +            return "CLFFT_FILE_CREATE_FAILURE";
 +        case CLFFT_VERSION_MISMATCH:
 +            return "CLFFT_VERSION_MISMATCH";
 +        case CLFFT_INVALID_PLAN:
 +            return "CLFFT_INVALID_PLAN";
 +        default:
 +            return "Error code not defined";
 +        break;
 +    }
  }
  
- std::vector< cl_device_id > initializeCL( cl_device_type deviceType,
-                                           cl_uint deviceGpuList,
-                                           cl_context& context,
-                                           bool printclInfo )
- {
-     cl_int status = 0;
- 
-     /*
-         * Have a look at the available platforms and pick either
-         * the AMD one if available or a reasonable default.
-         */
- 
-     cl_uint numPlatforms	= 0;
-     cl_platform_id platform = NULL;
-     OPENCL_V_THROW( ::clGetPlatformIDs( 0, NULL, &numPlatforms ),
-             "Getting number of platforms( ::clGetPlatformsIDs() )" );
- 
-     if( numPlatforms > 0 )
-     {
-         std::vector< cl_platform_id > platforms( numPlatforms );
-         OPENCL_V_THROW( ::clGetPlatformIDs( numPlatforms, &platforms[ 0 ], NULL ),
-             "Getting Platform Id's ( ::clGetPlatformsIDs() )" );
- 
-         //	TODO: How should we determine what platform to choose?  We are just defaulting to the last one reported, as we
-         //	print out the info
-         for( unsigned int i=0; i < numPlatforms; ++i )
-         {
-             if( printclInfo )
-             {
-                 std::cout << "OpenCL platform [ " << i << " ]:" << std::endl;
-                 prettyPrintPlatformInfo( platforms[i] );
-             }
- 
-             platform = platforms[i];
-         }
-     }
- 
-     if( NULL == platform )
-     {
-         throw std::runtime_error( "No appropriate OpenCL platform could be found" );
-     }
- 
-     /*
-      * If we could find our platform, use it. Otherwise use just available platform.
-      */
 +
-     //	Get the device list for this type.
-     //
-     cl_uint num_devices = 0;
-     OPENCL_V_THROW( ::clGetDeviceIDs( platform, deviceType, 0, NULL, &num_devices ),
-         "Getting OpenCL devices ( ::clGetDeviceIDs() )" );
-     if( 0 == num_devices )
-     {
-         OPENCL_V_THROW( CLFFT_DEVICE_NOT_AVAILABLE, "No devices available");
-     }
- 
-     std::vector< cl_device_id > deviceIDs( num_devices );
-     OPENCL_V_THROW( ::clGetDeviceIDs( platform, deviceType, num_devices, &deviceIDs[0], NULL),
-         "Getting OpenCL deviceIDs ( ::clGetDeviceIDs() )" );
- 
-     if( (CL_DEVICE_TYPE_GPU == deviceType) && (~cl_uint(0) != deviceGpuList) )
-     {
-         //	The command line options specify to user certain gpu(s)
-         //
-         for( unsigned u = (unsigned) deviceIDs.size(); u-- > 0; )
-         {
-             if( 0 != (deviceGpuList & (1<<u) ) )
-                 continue;
- 
-             //  Remove this GPU from the list
-             deviceIDs[u] = deviceIDs.back();
-             deviceIDs.pop_back();
-         }
-     }
- 
-     if( 0 == deviceIDs.size( ) )
-     {
-         OPENCL_V_THROW( CLFFT_DEVICE_NOT_AVAILABLE, "No devices available");
-     }
- 
-     cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 0 };
- 
-     /////////////////////////////////////////////////////////////////
-     // Create an OpenCL context
-     /////////////////////////////////////////////////////////////////
-     context = clCreateContext( cps,
-                                (cl_uint) deviceIDs.size(),
-                                & deviceIDs[0],
-                                NULL,
-                                NULL,
-                                &status);
-     OPENCL_V_THROW( status, "Creating Context ( ::clCreateContextFromType() )" );
- 
-     /* First, get the size of device list data */
-     size_t deviceListSize;
-     OPENCL_V_THROW( ::clGetContextInfo( context, CL_CONTEXT_DEVICES, 0, NULL, &deviceListSize ),
-         "Getting device array size ( ::clGetContextInfo() )" );
- 
-     /////////////////////////////////////////////////////////////////
-     // Detect OpenCL devices
-     /////////////////////////////////////////////////////////////////
-     std::vector< cl_device_id > devices( deviceListSize/sizeof( cl_device_id ) );
- 
-     /* Now, get the device list data */
-     OPENCL_V_THROW( ::clGetContextInfo( context, CL_CONTEXT_DEVICES, deviceListSize, &devices[ 0 ], NULL ),
-         "Getting device array ( ::clGetContextInfo() )" );
- 
-     if( printclInfo )
-     {
-         cl_uint cContextDevices	= 0;
- 
-         size_t deviceVersionSize	= 0;
-         OPENCL_V_THROW( ::clGetDeviceInfo( devices[0], CL_DEVICE_VERSION, 0, NULL, &deviceVersionSize ),
-             "Getting CL_DEVICE_VERSION Platform Info string size ( ::clGetDeviceInfo() )" );
- 
-         std::vector< char > szDeviceVersion( deviceVersionSize );
-         OPENCL_V_THROW( ::clGetDeviceInfo( devices[0], CL_DEVICE_VERSION, deviceVersionSize, &szDeviceVersion[ 0 ], NULL ),
-             "Getting CL_DEVICE_VERSION Platform Info string ( ::clGetDeviceInfo() )" );
- 
-         char openclstr[11]="OpenCL 1.0";
- 
-         if (!strncmp((const char*)&szDeviceVersion[ 0 ], openclstr, 10))
-         {
-             cContextDevices	= 1;
-         }
-         else
-         {
-             OPENCL_V_THROW( ::clGetContextInfo( context, CL_CONTEXT_NUM_DEVICES, sizeof( cContextDevices ), &cContextDevices, NULL ),
-                 "Getting number of context devices ( ::clGetContextInfo() )" );
-         }
- 
-         for( cl_uint i = 0; i < cContextDevices; ++i )
-         {
-             std::cout << "OpenCL devices [ " << i << " ]:" << std::endl;
-             prettyPrintDeviceInfo( devices[i] );
-         }
-     }
+ int discoverCLPlatforms( cl_device_type deviceType,
+ 						 std::vector< cl_platform_id >& platforms,
+ 						 std::vector< std::vector< cl_device_id > >& devices )
+ {
+ 	cl_int status = 0;
+ 
+ 	/*
+ 	* Find all OpenCL platforms this system has to offer.
+ 	*/
+ 
+ 	cl_uint numPlatforms = 0;
+ 	cl_platform_id platform = NULL;
+ 	OPENCL_V_THROW(::clGetPlatformIDs(0, NULL, &numPlatforms),
+ 		"Getting number of platforms( ::clGetPlatformsIDs() )");
+ 
+ 	if (numPlatforms > 0)
+ 	{
+ 		platforms.resize( numPlatforms );
+ 		devices.resize( numPlatforms );
+ 		OPENCL_V_THROW(::clGetPlatformIDs(numPlatforms, &platforms[0], NULL),
+ 			"Getting Platform Id's ( ::clGetPlatformsIDs() )");
+ 
+ 		if (NULL == platforms[0])
+ 		{
+ 			throw std::runtime_error("No appropriate OpenCL platform could be found");
+ 		}
+ 		
+ 		/*
+ 		* Now, for each platform get all available devices matching deviceType.
+ 		*/
+ 		for (unsigned int i = 0; i < numPlatforms; ++i)
+ 		{
+ 			//	Get the device list for deviceType.
+ 			//
+ 			cl_uint numDevices = 0;
+ 			OPENCL_V_WARN(::clGetDeviceIDs(platforms[i], deviceType, 0, NULL, &numDevices),
+ 				"Getting OpenCL devices ( ::clGetDeviceIDs() )");
+ 			if (0 == numDevices)
+ 			{
+ 				// OPENCL_V_WARN(CLFFT_DEVICE_NOT_AVAILABLE, "No devices available");
+ 				continue;
+ 			}
+ 
+ 			devices[i].resize(numDevices);
+ 			OPENCL_V_THROW(::clGetDeviceIDs(platforms[i], deviceType, numDevices, &(devices[i])[0], NULL),
+ 				"Getting OpenCL deviceIDs ( ::clGetDeviceIDs() )");
+ 		}
+ 	}
+ 
+ 	return 0;
+ }
  
-     return devices;
+ std::vector< cl_device_id > initializeCL( cl_device_type deviceType,
+ 										  cl_int deviceId,
+ 										  cl_int platformId,
+ 										  cl_context& context,
+ 										  bool printclInfo )
+ {
+ 	cl_int status = 0;
+ 	cl_platform_id platform = NULL;
+ 	std::vector< cl_device_id > devices(1);
+ 	devices[0] = NULL;
+ 	
+ 	// Have a look at all the available platforms on this system
+ 	std::vector< cl_platform_id > platformInfos;
+ 	std::vector< std::vector< cl_device_id > > deviceInfos;
+ 	discoverCLPlatforms( deviceType, platformInfos, deviceInfos );
+ 
+ 
+ 	for (unsigned int i = 0; i < platformInfos.size(); ++i)
+ 	{
+ 		if(i == platformId)
+ 		{
+ 			for (unsigned int n = 0; n < deviceInfos[i].size(); ++n)
+ 			{
+ 				if (n == deviceId)
+ 				{
+ 					platform = platformInfos[i];
+ 					devices[0] = deviceInfos[i][n];
+ 
+ 					if(printclInfo)
+ 					{
+ 						prettyPrintPlatformInfo(platform);
+ 						prettyPrintDeviceInfo(devices[0]);
+ 					}
+ 
+ 					break;
+ 				}
+ 			}
+ 
+ 			break;
+ 		}
+ 	}
+ 
+ 
+ 
+ 	// Do some error checking if we really selected a valid platform and a valid device
+ 	if (NULL == devices[0])
+ 	{
+ 		OPENCL_V_THROW(CLFFT_DEVICE_NOT_AVAILABLE, "No devices available");
+ 	}
+ 
+ 	if (NULL == platform)
+ 	{
+ 		throw std::runtime_error("No appropriate OpenCL platform could be found");
+ 	}	
+ 		
+ 	// Create an OpenCL context
+ 	cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties) platform, 0 };
+ 	context = clCreateContext(cps,
+ 		(cl_uint)devices.size(),
+ 		&devices[0],
+ 		NULL,
+ 		NULL,
+ 		&status);
+ 	OPENCL_V_THROW(status, "Creating Context ( ::clCreateContextFromType() )");
+ 
+ 	return devices;
  }
  
  int cleanupCL( cl_context* context, cl_command_queue* commandQueue,

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/clfft.git



More information about the debian-science-commits mailing list