TAPs 0.7.7.3
TAPsOpenCL.cpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsOpenCL.cpp
00003 ******************************************************************************/
00007 /******************************************************************************
00008 SUKITTI PUNAK   (03/23/2011)
00009 UPDATE          (07/07/2011)
00010 ******************************************************************************/
00011 #include "TAPsOpenCL.hpp"
00012 // Using Inclusion Model (i.e. definitions are included in declarations)
00013 //                       (this name.cpp is included in name.hpp)
00014 // Each friend is defined directly inside its declaration.
00015 
00016 BEGIN_NAMESPACE_TAPs__OpenCL
00017 
00018 //=============================================================================
00019 // START CLASS: OpenCL_Util
00020 //-----------------------------------------------------------------------------
00021 std::string OpenCL_Util::StrOpenCLErrorCode ( cl_int errCode )
00022 {
00023     switch ( errCode )
00024     {
00025     case CL_SUCCESS:                                    //  0
00026         return "CL_SUCCESS";
00027         break;
00028     case CL_DEVICE_NOT_FOUND:                           //  -1
00029         return "CL_DEVICE_NOT_FOUND";
00030         break;
00031     case CL_DEVICE_NOT_AVAILABLE:                       //  -2
00032         return "CL_DEVICE_NOT_AVAILABLE";
00033         break;
00034     case CL_COMPILER_NOT_AVAILABLE:                     //  -3
00035         return "CL_COMPILER_NOT_AVAILABLE";
00036         break;
00037     case CL_MEM_OBJECT_ALLOCATION_FAILURE:              //  -4
00038         return "CL_MEM_OBJECT_ALLOCATION_FAILURE";
00039         break;
00040     case CL_OUT_OF_RESOURCES:                           //  -5
00041         return "CL_OUT_OF_RESOURCES";
00042         break;
00043     case CL_OUT_OF_HOST_MEMORY:                         //  -6
00044         return "CL_OUT_OF_HOST_MEMORY";
00045         break;
00046     case CL_PROFILING_INFO_NOT_AVAILABLE:               //  -7
00047         return "CL_PROFILING_INFO_NOT_AVAILABLE";
00048         break;
00049     case CL_MEM_COPY_OVERLAP:                           //  -8
00050         return "CL_MEM_COPY_OVERLAP";
00051         break;
00052     case CL_IMAGE_FORMAT_MISMATCH:                      //  -9
00053         return "CL_IMAGE_FORMAT_MISMATCH";
00054         break;
00055     case CL_IMAGE_FORMAT_NOT_SUPPORTED:                 //  -10
00056         return "CL_IMAGE_FORMAT_NOT_SUPPORTED";
00057         break;
00058     case CL_BUILD_PROGRAM_FAILURE:                      //  -11
00059         return "CL_BUILD_PROGRAM_FAILURE";
00060         break;
00061     case CL_MAP_FAILURE:                                //  -12
00062         return "CL_MAP_FAILURE";
00063         break;
00064     case CL_MISALIGNED_SUB_BUFFER_OFFSET:               //  -13
00065         return "CL_MISALIGNED_SUB_BUFFER_OFFSET";
00066         break;
00067     case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST:  //  -14
00068         return "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST";
00069         break;
00070     case CL_INVALID_VALUE:                              //  -30
00071         return "CL_INVALID_VALUE";
00072         break;
00073     case CL_INVALID_DEVICE_TYPE:                        //  -31
00074         return "CL_INVALID_DEVICE_TYPE";
00075         break;
00076     case CL_INVALID_PLATFORM:                           //  -32
00077         return "CL_INVALID_PLATFORM";
00078         break;
00079     case CL_INVALID_DEVICE:                             //  -33
00080         return "CL_INVALID_DEVICE";
00081         break;
00082     case CL_INVALID_CONTEXT:                            //  -34
00083         return "CL_INVALID_CONTEXT";
00084         break;
00085     case CL_INVALID_QUEUE_PROPERTIES:                   //  -35
00086         return "CL_INVALID_QUEUE_PROPERTIES";
00087         break;
00088     case CL_INVALID_COMMAND_QUEUE:                      //  -36
00089         return "CL_INVALID_COMMAND_QUEUE";
00090         break;
00091     case CL_INVALID_HOST_PTR:                           //  -37
00092         return "CL_INVALID_HOST_PTR";
00093         break;
00094     case CL_INVALID_MEM_OBJECT:                         //  -38
00095         return "CL_INVALID_MEM_OBJECT";
00096         break;
00097     case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR:            //  -39
00098         return "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR";
00099         break;
00100     case CL_INVALID_IMAGE_SIZE:                         //  -40
00101         return "CL_INVALID_IMAGE_SIZE";
00102         break;
00103     case CL_INVALID_SAMPLER:                            //  -41
00104         return "CL_INVALID_SAMPLER";
00105         break;
00106     case CL_INVALID_BINARY:                             //  -42
00107         return "CL_INVALID_BINARY";
00108         break;
00109     case CL_INVALID_BUILD_OPTIONS:                      //  -43
00110         return "CL_INVALID_BUILD_OPTIONS";
00111         break;
00112     case CL_INVALID_PROGRAM:                            //  -44
00113         return "CL_INVALID_PROGRAM";
00114         break;
00115     case CL_INVALID_PROGRAM_EXECUTABLE:                 //  -45
00116         return "CL_INVALID_PROGRAM_EXECUTABLE";
00117         break;
00118     case CL_INVALID_KERNEL_NAME:                        //  -46
00119         return "CL_INVALID_KERNEL_NAME";
00120         break;
00121     case CL_INVALID_KERNEL_DEFINITION:                  //  -47
00122         return "CL_INVALID_KERNEL_DEFINITION";
00123         break;
00124     case CL_INVALID_KERNEL:                             //  -48
00125         return "CL_INVALID_KERNEL";
00126         break;
00127     case CL_INVALID_ARG_INDEX:                          //  -49
00128         return "CL_INVALID_ARG_INDEX";
00129         break;
00130     case CL_INVALID_ARG_VALUE:                          //  -50
00131         return "CL_INVALID_ARG_VALUE";
00132         break;
00133     case CL_INVALID_ARG_SIZE:                           //  -51
00134         return "CL_INVALID_ARG_SIZE";
00135         break;
00136     case CL_INVALID_KERNEL_ARGS:                        //  -52
00137         return "CL_INVALID_KERNEL_ARGS";
00138         break;
00139     case CL_INVALID_WORK_DIMENSION:                     //  -53
00140         return "CL_INVALID_WORK_DIMENSION";
00141         break;
00142     case CL_INVALID_WORK_GROUP_SIZE:                    //  -54
00143         return "CL_INVALID_WORK_GROUP_SIZE";
00144         break;
00145     case CL_INVALID_WORK_ITEM_SIZE:                     //  -55
00146         return "CL_INVALID_WORK_ITEM_SIZE";
00147         break;
00148     case CL_INVALID_GLOBAL_OFFSET:                      //  -56
00149         return "CL_INVALID_GLOBAL_OFFSET";
00150         break;
00151     case CL_INVALID_EVENT_WAIT_LIST:                    //  -57
00152         return "CL_INVALID_EVENT_WAIT_LIST";
00153         break;
00154     case CL_INVALID_EVENT:                              //  -58
00155         return "CL_INVALID_EVENT";
00156         break;
00157     case CL_INVALID_OPERATION:                          //  -59
00158         return "CL_INVALID_OPERATION";
00159         break;
00160     case CL_INVALID_GL_OBJECT:                          //  -60
00161         return "CL_INVALID_GL_OBJECT";
00162         break;
00163     case CL_INVALID_BUFFER_SIZE:                        //  -61
00164         return "CL_INVALID_BUFFER_SIZE";
00165         break;
00166     case CL_INVALID_MIP_LEVEL:                          //  -62
00167         return "CL_INVALID_MIP_LEVEL";
00168         break;
00169     case CL_INVALID_GLOBAL_WORK_SIZE:                   //  -63
00170         return "CL_INVALID_GLOBAL_WORK_SIZE";
00171         break;
00172     case CL_INVALID_PROPERTY:                           //  -64
00173         return "CL_INVALID_PROPERTY";
00174         break;
00175     default:
00176         return "AN UNKNOWN OpenCL ERROR CODE";
00177         break;
00178     }
00179 }
00180 //-----------------------------------------------------------------------------
00181 std::string OpenCL_Util::StrOpenCLDeviceTypeCode ( cl_device_type deviceType )
00182 {
00183     switch ( deviceType )
00184     {
00185     case CL_DEVICE_TYPE_DEFAULT:                // (1 << 0)
00186         return "CL_DEVICE_TYPE_DEFAULT";
00187         break;
00188     case CL_DEVICE_TYPE_CPU:                    // (1 << 1)
00189         return "CL_DEVICE_TYPE_CPU";
00190         break;
00191     case CL_DEVICE_TYPE_GPU:                    // (1 << 2)
00192         return "CL_DEVICE_TYPE_GPU";
00193         break;
00194     case CL_DEVICE_TYPE_ACCELERATOR:            // (1 << 3)
00195         return "CL_DEVICE_TYPE_ACCELERATOR";
00196         break;
00197     case CL_DEVICE_TYPE_ALL:                    // 0xFFFFFFFF
00198         return "CL_DEVICE_TYPE_ALL";
00199         break;
00200     default:
00201         return "AN UNKNOWN OpenCL DEVICE TYPE";
00202         break;
00203     }
00204 }
00205 //-----------------------------------------------------------------------------
00206 // END CLASS: OpenCL_Util
00207 //=============================================================================
00208 
00209 
00210 
00211 
00212 //=============================================================================
00213 // START CLASS: OpenCL_Device
00214 //-----------------------------------------------------------------------------
00215 OpenCL_Device::OpenCL_Device ( cl_device_id id )
00216     : m_DeviceID( id )
00217 {
00218     GetOpenCLDeviceInfo();
00219 }
00220 //-----------------------------------------------------------------------------
00221 OpenCL_Device::~OpenCL_Device ()
00222 {}
00223 //-----------------------------------------------------------------------------
00224 std::string OpenCL_Device::StrInfo () const
00225 {
00226     std::stringstream ss;
00227     size_t val;
00228     cl_uint ui_val;
00229 
00230     ss <<   "OpenCL Device ID: " << m_DeviceID << "\t(associated with OpenCL Platform ID: " << m_PlatformID << ")";
00231     ss << "\n  OpenCL Device Available: " << (DeviceAvailable() ? "true" : "false");
00232     ss << "\n  OpenCL Device Name:      " << m_DeviceName;
00233     ss << "\n  OpenCL Device Vendor:    " << m_DeviceVendor;
00234     ss << "\n  OpenCL Device Type:      " << OpenCL_Util::StrOpenCLDeviceTypeCode( m_DeviceType );
00235     ss << "\n  OpenCL Device Profile:   " << m_DeviceProfile;
00236     ss << "\n  OpenCL Device Version:   " << m_DeviceVersion;
00237     ss << "\n  OpenCL Device OpenCL C Version:  " << m_DeviceOpenCL_C_Version;
00238     ss << "\n  OpenCL Device Max Compute Units:         " << m_DeviceMaxComputeUnits;
00239     ss << "\n  OpenCL Device Max Work-Item Dimensions:  " << m_DeviceMaxWorkItemDimensions;
00240     ss << "\n  OpenCL Device Max Work-Item Sizes:        (";
00241     for ( unsigned int i = 0; i < m_DeviceMaxWorkItemSizes.size()-1; ++i ) {
00242         ss << m_DeviceMaxWorkItemSizes[i] << ", ";
00243     }
00244     ss << m_DeviceMaxWorkItemSizes.back() << ")";
00245     ss << "\n  OpenCL Device Max Work-Group Size:   " << m_DeviceMaxWorkGroupSize;
00246     val = DeviceMaxParameterSize();
00247     ss << "\n  OpenCL Device Max Parameter Size:    " << val << " bytes <==> " << val/8 << " arguments";
00248     ss << "\n  OpenCL Device Single FP Config:      " << StrOfDeviceSingleFPConfig();
00249     ss << "\n  OpenCL Device Max Const Buffer Size: " << DeviceMaxConstBufferSize()/1024 << " KB";
00250     ss << "\n  OpenCL Device Max Const Args:        " << DeviceMaxConstArgs();
00251     ss << "\n  OpenCL Device Queue Properties:      " << StrOfDeviceQueueProperties();
00252 
00253     ss << "\n  Image Info:";
00254     ss << "\n    OpenCL Device Image Support: " << (DeviceImageSupport() ? "true" : "false");
00255     if ( DeviceImageSupport() ) {
00256         ss << "\n    OpenCL Device Max Samplers: " << DeviceMaxSamplers() << " samplers";
00257         ss << "\n    OpenCL Device Max Read Image Arguments:  " << DeviceMaxReadImageArguments() << " image objects";
00258         ss << "\n    OpenCL Device Max Write Image Arguments: " << DeviceMaxWriteImageArguments() << " image objects";
00259         ss << "\n    OpenCL Device Image2D Max Width and Height: " << DeviceImage2DMaxWidth() << "x" << DeviceImage2DMaxHeight() << " pixels";
00260         ss << "\n    OpenCL Device Image3D Max Width, Height, and Depth: " << DeviceImage3DMaxWidth() << "x" << DeviceImage3DMaxHeight() << "x" << DeviceImage3DMaxDepth() << " pixels";
00261     }
00262 
00263     ss << "\n  Mem Info:";
00264     ss << "\n    OpenCL Device Max Clock Frequency: " << DeviceMaxClockFrequency() << " MHz";
00265     ss << "\n    OpenCL Device Address Bits:        " << DeviceAddressBits() << " bits";
00266     ss << "\n    OpenCL Device Global Mem Size:     " << DeviceGlobalMemSize() / 1024 / 1024 << " MB";
00267     ss << "\n    OpenCL Device Local Mem Size:      " << DeviceLocalMemSize() / 1024 << " KB";
00268     ss << "\n    OpenCL Device Max Mem Alloc Size:  " << DeviceMaxMemAllocSize() / 1024 / 1024 << " MB";
00269     ui_val = DeviceMemBaseAddrAlign();
00270     ss << "\n    OpenCL Device Mem Base Addr Align:      " << ui_val << " bits <==> " << ui_val/8 << " bytes";
00271     ss << "\n    OpenCL Device Min Data Type Align Size: " << DeviceMinDataAlignSize() << " bytes";
00272     ss << "\n    OpenCL Device Min Data Type Align Size: " << DeviceMinDataAlignSize() << " bytes";
00273     ss << "\n    OpenCL Device Global Memory Cache Type: " << StrOfDeviceGlobalMemCacheType();
00274     ss << "\n    OpenCL Device Global Memory Cache Size: " << DeviceGlobalMemCacheSize() << " bytes";
00275     ss << "\n    OpenCL Device Global Memory Cacheline Size: " << DeviceGlobalMemCachelineSize() << " bytes";
00276     ss << "\n    OpenCL Device Global Memory Local Type: " << StrOfDeviceLocalMemType();
00277     ss << "\n    OpenCL Device Global Err Correction Support: " << (DeviceErrCorrectionSupport() ? "true" : "false");
00278     //ss << "\n  OpenCL Device Global Host Unified Mem:       " << (DeviceHostUnifiedMem() ? "true" : "false");
00279      
00280     ss << "\n  Misc Info:";
00281     ss << "\n    OpenCL Device Vendor ID: "  << DeviceVendorID();
00282     ss << "\n    OpenCL Device Preferred Vector Width Sizes: "  << StrOfOpenCLDevicePreferredVectorWidthSizes();
00283     ss << "\n    OpenCL Device Native Vector Width Sizes:    "  << StrOfOpenCLDeviceNativeVectorWidthSizes();
00284     ss << "\n    OpenCL Device Endian Little: "  << (DeviceEndainLittle() ? "true" : "false");
00285     ss << "\n    OpenCL Device Profiling Timer Resolution: "  << DeviceProfilingTimerResolution() << " ns";
00286     ss << "\n    OpenCL Device Compiler Available: "  << (DeviceCompilerAvailable() ? "true" : "false");
00287     ss << "\n    OpenCL Device Exec Capabilities:  "  << StrOfDeviceExecCapabilities();
00288     ss << "\n    OpenCL Device Extensions:";
00289     std::string extensions = DeviceExtensions();
00290     std::string delimit( "\t\n " );
00291     size_t start = 0, end = 0;
00292     while ( extensions.size() > 0 && end < 1024 )
00293     {
00294         start = extensions.find_first_not_of( delimit, 0 );
00295         end   = extensions.find_first_of( delimit, start );
00296         if ( end == std::string::npos ) {
00297             if ( start != std::string::npos ) {
00298                 ss << "\n      " << extensions.substr( start, extensions.size()-start );
00299             }
00300             break;
00301         }
00302         else {
00303             ss << "\n      " << extensions.substr( start, end-start );
00304         }
00305         //start = end;
00306         //end   = extensions.find_first_of( delimit, start );
00307         extensions = extensions.substr( end );
00308     }
00309     ss << "\n";
00310 
00311     return ss.str();
00312 }
00313 //-----------------------------------------------------------------------------
00314 void OpenCL_Device::GetOpenCLDeviceInfo ()
00315 {
00316     char cBuffer[1024];
00317     size_t param_value_size_ret;
00318 
00319     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PLATFORM, sizeof(m_PlatformID), &m_PlatformID, &param_value_size_ret ) );
00320 
00321     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NAME, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00322     m_DeviceName = cBuffer;
00323     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_VENDOR, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00324     m_DeviceVendor = cBuffer;
00325     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PROFILE, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00326     m_DeviceProfile = cBuffer;
00327     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_VERSION, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00328     m_DeviceVersion = cBuffer;
00329     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_OPENCL_C_VERSION, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00330     //m_DeviceOpenCL_C_Version = cBuffer;
00331 
00332     size_t dimensions[16];
00333 
00334     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_TYPE, sizeof(m_DeviceType), &m_DeviceType, &param_value_size_ret ) );
00335     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(m_DeviceMaxComputeUnits), &m_DeviceMaxComputeUnits, &param_value_size_ret ) );
00336     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(m_DeviceMaxWorkItemDimensions), &m_DeviceMaxWorkItemDimensions, &param_value_size_ret ) );
00337     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(dimensions), dimensions, &param_value_size_ret ) );
00338     for ( unsigned int i = 0; i < param_value_size_ret/sizeof(size_t); ++i ) {
00339         m_DeviceMaxWorkItemSizes.push_back( dimensions[i] );
00340     }
00341     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(m_DeviceMaxWorkGroupSize), &m_DeviceMaxWorkGroupSize, &param_value_size_ret ) );
00342 
00343 
00344 
00345     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_TYPE, sizeof(m_DeviceType), &m_DeviceType, &param_value_size_ret ) );
00346     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_TYPE, sizeof(m_DeviceType), &m_DeviceType, &param_value_size_ret ) );
00347     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_VENDOR_ID, sizeof(m_DeviceVendorID), &m_DeviceVendorID, &param_value_size_ret ) );
00348 }
00349 //-----------------------------------------------------------------------------
00350 cl_uint OpenCL_Device::DeviceVendorID () const
00351 {
00352     cl_uint id;
00353     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_VENDOR_ID, sizeof(id), &id, NULL ) );
00354     return id;
00355 }
00356 //-----------------------------------------------------------------------------
00357 std::vector< cl_uint > OpenCL_Device::DevicePreferredVectorWidthSizes () const
00358 {
00359     std::vector< cl_uint > info;
00360     cl_uint data;
00361     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, sizeof(data), &data, NULL ) );
00362     info.push_back( data );
00363     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, sizeof(data), &data, NULL ) );
00364     info.push_back( data );
00365     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(data), &data, NULL ) );
00366     info.push_back( data );
00367     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, sizeof(data), &data, NULL ) );
00368     info.push_back( data );
00369     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, sizeof(data), &data, NULL ) );
00370     info.push_back( data );
00371     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, sizeof(data), &data, NULL ) );
00372     info.push_back( data );
00373     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, sizeof(data), &data, NULL ) );
00374     info.push_back( data );
00375 
00376     return info;
00377 }
00378 //-----------------------------------------------------------------------------
00379 std::vector< cl_uint > OpenCL_Device::DeviceNativeVectorWidthSizes () const
00380 {
00381     std::vector< cl_uint > info;
00382     //cl_uint data;
00383     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, sizeof(data), &data, NULL ) );
00384     //info.push_back( data );
00385     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, sizeof(data), &data, NULL ) );
00386     //info.push_back( data );
00387     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, sizeof(data), &data, NULL ) );
00388     //info.push_back( data );
00389     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, sizeof(data), &data, NULL ) );
00390     //info.push_back( data );
00391     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, sizeof(data), &data, NULL ) );
00392     //info.push_back( data );
00393     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, sizeof(data), &data, NULL ) );
00394     //info.push_back( data );
00395     //OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, sizeof(data), &data, NULL ) );
00396     //info.push_back( data );
00397 
00398     return info;
00399 }
00400 //-----------------------------------------------------------------------------
00401 std::string OpenCL_Device::StrOfOpenCLDevicePreferredVectorWidthSizes () const
00402 {
00403     std::stringstream ss;
00404     std::vector< cl_uint > info = DevicePreferredVectorWidthSizes();
00405     ss << info[0] << " char, ";
00406     ss << info[1] << " short, ";
00407     ss << info[2] << " int, ";
00408     ss << info[3] << " long, ";
00409     ss << info[4] << " float, ";
00410     ss << info[5] << " double, ";
00411     ss << info[6] << " half";
00412     return ss.str();
00413 }
00414 //-----------------------------------------------------------------------------
00415 std::string OpenCL_Device::StrOfOpenCLDeviceNativeVectorWidthSizes () const
00416 {
00417     std::stringstream ss;
00418     std::vector< cl_uint > info = DeviceNativeVectorWidthSizes();
00419     //ss << info[0] << " char, ";
00420     //ss << info[1] << " short, ";
00421     //ss << info[2] << " int, ";
00422     //ss << info[3] << " long, ";
00423     //ss << info[4] << " float, ";
00424     //ss << info[5] << " double, ";
00425     //ss << info[6] << " half";
00426     return ss.str();
00427 }
00428 //-----------------------------------------------------------------------------
00429 cl_bool OpenCL_Device::DeviceImageSupport () const
00430 {
00431     cl_bool id;
00432     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_IMAGE_SUPPORT, sizeof(id), &id, NULL ) );
00433     return id;
00434 }
00435 //-----------------------------------------------------------------------------
00436 cl_uint OpenCL_Device::DeviceMaxReadImageArguments () const
00437 {
00438     cl_uint id;
00439     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_READ_IMAGE_ARGS, sizeof(id), &id, NULL ) );
00440     return id;
00441 }
00442 //-----------------------------------------------------------------------------
00443 cl_uint OpenCL_Device::DeviceMaxWriteImageArguments () const
00444 {
00445     cl_uint id;
00446     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, sizeof(id), &id, NULL ) );
00447     return id;
00448 }
00449 //-----------------------------------------------------------------------------
00450 size_t OpenCL_Device::DeviceImage2DMaxWidth () const
00451 {
00452     size_t id;
00453     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_IMAGE2D_MAX_WIDTH, sizeof(id), &id, NULL ) );
00454     return id;
00455 }
00456 //-----------------------------------------------------------------------------
00457 size_t OpenCL_Device::DeviceImage2DMaxHeight () const
00458 {
00459     size_t id;
00460     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_IMAGE2D_MAX_HEIGHT, sizeof(id), &id, NULL ) );
00461     return id;
00462 }
00463 //-----------------------------------------------------------------------------
00464 size_t OpenCL_Device::DeviceImage3DMaxWidth () const
00465 {
00466     size_t id;
00467     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_IMAGE3D_MAX_WIDTH, sizeof(id), &id, NULL ) );
00468     return id;
00469 }
00470 //-----------------------------------------------------------------------------
00471 size_t OpenCL_Device::DeviceImage3DMaxHeight () const
00472 {
00473     size_t id;
00474     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_IMAGE3D_MAX_HEIGHT, sizeof(id), &id, NULL ) );
00475     return id;
00476 }
00477 //-----------------------------------------------------------------------------
00478 size_t OpenCL_Device::DeviceImage3DMaxDepth () const
00479 {
00480     size_t id;
00481     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_IMAGE3D_MAX_DEPTH, sizeof(id), &id, NULL ) );
00482     return id;
00483 }
00484 //-----------------------------------------------------------------------------
00485 size_t OpenCL_Device::DeviceMaxSamplers () const
00486 {
00487     size_t id;
00488     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_SAMPLERS, sizeof(id), &id, NULL ) );
00489     return id;
00490 }
00491 //-----------------------------------------------------------------------------
00492 size_t OpenCL_Device::DeviceMaxParameterSize () const
00493 {
00494     size_t id;
00495     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_PARAMETER_SIZE, sizeof(id), &id, NULL ) );
00496     return id;
00497 }
00498 //-----------------------------------------------------------------------------
00499 cl_uint OpenCL_Device::DeviceMaxClockFrequency () const
00500 {
00501     cl_uint id;
00502     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(id), &id, NULL ) );
00503     return id;
00504 }
00505 //-----------------------------------------------------------------------------
00506 cl_uint OpenCL_Device::DeviceAddressBits () const
00507 {
00508     cl_uint id;
00509     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_ADDRESS_BITS, sizeof(id), &id, NULL ) );
00510     return id;
00511 }
00512 //-----------------------------------------------------------------------------
00513 cl_ulong OpenCL_Device::DeviceGlobalMemSize () const
00514 {
00515     cl_ulong id;
00516     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(id), &id, NULL ) );
00517     return id;
00518 }
00519 //-----------------------------------------------------------------------------
00520 cl_ulong OpenCL_Device::DeviceLocalMemSize () const
00521 {
00522     cl_ulong id;
00523     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(id), &id, NULL ) );
00524     return id;
00525 }
00526 //-----------------------------------------------------------------------------
00527 cl_ulong OpenCL_Device::DeviceMaxMemAllocSize () const
00528 {
00529     cl_ulong id;
00530     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(id), &id, NULL ) );
00531     return id;
00532 }
00533 //-----------------------------------------------------------------------------
00534 cl_uint OpenCL_Device::DeviceMemBaseAddrAlign () const
00535 {
00536     cl_uint id;
00537     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MEM_BASE_ADDR_ALIGN, sizeof(id), &id, NULL ) );
00538     return id;
00539 }
00540 //-----------------------------------------------------------------------------
00541 cl_uint OpenCL_Device::DeviceMinDataAlignSize () const
00542 {
00543     cl_uint id;
00544     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, sizeof(id), &id, NULL ) );
00545     return id;
00546 }
00547 //-----------------------------------------------------------------------------
00548 cl_device_fp_config OpenCL_Device::DeviceSingleFPConfig () const
00549 {
00550     cl_device_fp_config id;
00551     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_SINGLE_FP_CONFIG, sizeof(id), &id, NULL ) );
00552     return id;
00553 }
00554 //-----------------------------------------------------------------------------
00555 std::string OpenCL_Device::StrOfDeviceSingleFPConfig () const
00556 {
00557     std::stringstream ss;
00558     cl_device_fp_config config = DeviceSingleFPConfig();
00559     if ( config | CL_FP_DENORM )            ss << "CL_FP_DENORM ";
00560     if ( config | CL_FP_INF_NAN )           ss << "CL_FP_INF_NAN ";
00561     if ( config | CL_FP_ROUND_TO_NEAREST )  ss << "CL_FP_ROUND_TO_NEAREST ";
00562     if ( config | CL_FP_ROUND_TO_ZERO )     ss << "CL_FP_ROUND_TO_ZERO ";
00563     if ( config | CL_FP_ROUND_TO_INF )      ss << "CL_FP_ROUND_TO_INF ";
00564     if ( config | CL_FP_FMA )               ss << "CL_FP_FMA ";
00565     if ( config | CL_FP_SOFT_FLOAT )        ss << "CL_FP_SOFT_FLOAT ";
00566     return ss.str();
00567 }
00568 //-----------------------------------------------------------------------------
00569 cl_device_mem_cache_type OpenCL_Device::DeviceGlobalMemCacheType () const
00570 {
00571     cl_device_mem_cache_type id;
00572     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, sizeof(id), &id, NULL ) );
00573     return id;
00574 }
00575 //-----------------------------------------------------------------------------
00576 std::string OpenCL_Device::StrOfDeviceGlobalMemCacheType () const
00577 {
00578     std::stringstream ss;
00579     switch ( DeviceGlobalMemCacheType() )
00580     {
00581     case CL_NONE:
00582         ss << "CL_NONE";
00583         break;
00584     case CL_READ_ONLY_CACHE:
00585         ss << "CL_READ_ONLY_CACHE";
00586         break;
00587     case CL_READ_WRITE_CACHE:
00588         ss << "CL_READ_WRITE_CACHE";
00589         break;
00590     default:
00591         ss << "Unknown OpenCL Device Global Mem Cache Type";
00592         break;
00593     }
00594     return ss.str();
00595 }
00596 //-----------------------------------------------------------------------------
00597 cl_ulong OpenCL_Device::DeviceGlobalMemCacheSize () const
00598 {
00599     cl_ulong id;
00600     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, sizeof(id), &id, NULL ) );
00601     return id;
00602 }
00603 //-----------------------------------------------------------------------------
00604 cl_uint OpenCL_Device::DeviceGlobalMemCachelineSize () const
00605 {
00606     cl_uint id;
00607     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, sizeof(id), &id, NULL ) );
00608     return id;
00609 }
00610 //-----------------------------------------------------------------------------
00611 cl_ulong OpenCL_Device::DeviceMaxConstBufferSize () const
00612 {
00613     cl_ulong id;
00614     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(id), &id, NULL ) );
00615     return id;
00616 }
00617 //-----------------------------------------------------------------------------
00618 cl_uint OpenCL_Device::DeviceMaxConstArgs () const
00619 {
00620     cl_uint id;
00621     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_MAX_CONSTANT_ARGS, sizeof(id), &id, NULL ) );
00622     return id;
00623 }
00624 //-----------------------------------------------------------------------------
00625 cl_device_local_mem_type OpenCL_Device::DeviceLocalMemType () const
00626 {
00627     cl_device_local_mem_type id;
00628     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(id), &id, NULL ) );
00629     return id;
00630 }
00631 //-----------------------------------------------------------------------------
00632 std::string OpenCL_Device::StrOfDeviceLocalMemType () const
00633 {
00634     std::stringstream ss;
00635     switch ( DeviceLocalMemType() )
00636     {
00637     case CL_LOCAL:
00638         ss << "CL_LOCAL";
00639         break;
00640     case CL_GLOBAL:
00641         ss << "CL_GLOBAL";
00642         break;
00643     default:
00644         ss << "Unknown OpenCL Device Local Mem Type";
00645         break;
00646     }
00647     return ss.str();
00648 }
00649 //-----------------------------------------------------------------------------
00650 cl_bool OpenCL_Device::DeviceErrCorrectionSupport () const
00651 {
00652     cl_bool id;
00653     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(id), &id, NULL ) );
00654     return id;
00655 }
00656 //-----------------------------------------------------------------------------
00657 cl_bool OpenCL_Device::DeviceHostUnifiedMem () const
00658 {
00659     cl_bool id;
00660     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(id), &id, NULL ) );
00661     return id;
00662 }
00663 //-----------------------------------------------------------------------------
00664 cl_bool OpenCL_Device::DeviceAvailable () const
00665 {
00666     cl_bool id;
00667     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_AVAILABLE, sizeof(id), &id, NULL ) );
00668     return id;
00669 }
00670 //-----------------------------------------------------------------------------
00671 cl_bool OpenCL_Device::DeviceEndainLittle () const
00672 {
00673     cl_bool id;
00674     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_ENDIAN_LITTLE, sizeof(id), &id, NULL ) );
00675     return id;
00676 }
00677 //-----------------------------------------------------------------------------
00678 size_t OpenCL_Device::DeviceProfilingTimerResolution () const
00679 {
00680     size_t id;
00681     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_PROFILING_TIMER_RESOLUTION, sizeof(id), &id, NULL ) );
00682     return id;
00683 }
00684 //-----------------------------------------------------------------------------
00685 cl_bool OpenCL_Device::DeviceCompilerAvailable () const
00686 {
00687     cl_bool id;
00688     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_COMPILER_AVAILABLE, sizeof(id), &id, NULL ) );
00689     return id;
00690 }
00691 //-----------------------------------------------------------------------------
00692 cl_device_exec_capabilities OpenCL_Device::DeviceExecCapabilities () const
00693 {
00694     cl_device_exec_capabilities id;
00695     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_EXECUTION_CAPABILITIES, sizeof(id), &id, NULL ) );
00696     return id;
00697 }
00698 //-----------------------------------------------------------------------------
00699 std::string OpenCL_Device::StrOfDeviceExecCapabilities () const
00700 {
00701     std::stringstream ss;
00702     cl_device_exec_capabilities cap = DeviceExecCapabilities();
00703     if ( cap | CL_EXEC_KERNEL )         ss << "CL_EXEC_KERNEL ";
00704     if ( cap | CL_EXEC_NATIVE_KERNEL )  ss << "CL_EXEC_NATIVE_KERNEL ";
00705     return ss.str();
00706 }
00707 //-----------------------------------------------------------------------------
00708 cl_command_queue_properties OpenCL_Device::DeviceQueueProperties () const
00709 {
00710     cl_command_queue_properties id;
00711     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_QUEUE_PROPERTIES, sizeof(id), &id, NULL ) );
00712     return id;
00713 }
00714 //-----------------------------------------------------------------------------
00715 std::string OpenCL_Device::StrOfDeviceQueueProperties () const
00716 {
00717     std::stringstream ss;
00718     cl_command_queue_properties prop = DeviceQueueProperties();
00719     if ( prop | CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE )    ss << "CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ";
00720     if ( prop | CL_QUEUE_PROFILING_ENABLE )                 ss << "CL_QUEUE_PROFILING_ENABLE ";
00721     return ss.str();
00722 }
00723 //-----------------------------------------------------------------------------
00724 std::string OpenCL_Device::DeviceExtensions () const
00725 {
00726     char cBuffer[1024];
00727     size_t param_value_size_ret;
00728     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceInfo( m_DeviceID, CL_DEVICE_EXTENSIONS, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00729     return std::string( cBuffer );
00730 }
00731 //-----------------------------------------------------------------------------
00732 // OpenGL
00733 #if defined(__gl_h_) || defined(__GL_H__)
00734 //template <typename T>
00735 //void OpenCL_Device<T>::Draw () const
00736 //{
00737 //}
00738 //-----------------------------------------------------------------------------
00739 #endif  // OpenGL
00740 //-----------------------------------------------------------------------------
00741 // END CLASS: OpenCL_Device
00742 //=============================================================================
00743 
00744 
00745 
00746 
00747 //=============================================================================
00748 // START CLASS: OpenCL_Platform
00749 //-----------------------------------------------------------------------------
00750 OpenCL_Platform::OpenCL_Platform ( cl_platform_id id )
00751     : m_PlatformID( id )
00752 {
00753     GetOpenCLPlatformInfo();
00754     GetListOfOpenCLDevices();
00755 }
00756 //-----------------------------------------------------------------------------
00757 OpenCL_Platform::~OpenCL_Platform ()
00758 {}
00759 //-----------------------------------------------------------------------------
00760 std::string OpenCL_Platform::StrInfo () const
00761 {
00762     std::stringstream ss;
00763     ss <<   "OpenCL Platform ID: " << m_PlatformID;
00764     ss << "\n  OpenCL Platform Name:       " << m_PlatformName;
00765     ss << "\n  OpenCL Platform Version:    " << m_PlatformVersion;
00766     ss << "\n  OpenCL Platform Profile:    " << m_PlatformProfile;
00767     ss << "\n  OpenCL Platform Vendor:     " << m_PlatformVendor;
00768     ss << "\n  OpenCL Platform Extensions:";
00769     std::string extensions = PlatformExtensions();
00770     std::string delimit( "\t\n " );
00771     size_t start = 0, end = 0;
00772     while ( extensions.size() > 0 && end < 1024 )
00773     {
00774         start = extensions.find_first_not_of( delimit, 0 );
00775         end   = extensions.find_first_of( delimit, start );
00776         if ( end == std::string::npos ) {
00777             if ( start != std::string::npos ) {
00778                 ss << "\n    " << extensions.substr( start, extensions.size()-start );
00779             }
00780             break;
00781         }
00782         else {
00783             ss << "\n    " << extensions.substr( start, end-start );
00784         }
00785         extensions = extensions.substr( end );
00786     }
00787     ss << "\n  Number of OpenCL devices: " << NumOfOpenCLDevices();
00788     ss << "\n";
00789     for ( unsigned int i = 0; i < NumOfOpenCLDevices(); ++i ) {
00790         ss << "\nOpenCL Device #" << i << "\n";
00791         ss << m_OpenCLDevices[i] << "\n";
00792     }
00793     ss << "\n";
00794     return ss.str();
00795 }
00796 //-----------------------------------------------------------------------------
00797 void OpenCL_Platform::GetOpenCLPlatformInfo ()
00798 {
00799     char cBuffer[1024];
00800     size_t param_value_size_ret;
00801 
00802     OpenCL_Util::CheckOpenCLErrorCode( clGetPlatformInfo( m_PlatformID, CL_PLATFORM_NAME, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00803     m_PlatformName = cBuffer;
00804     OpenCL_Util::CheckOpenCLErrorCode( clGetPlatformInfo( m_PlatformID, CL_PLATFORM_VERSION, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00805     m_PlatformVersion = cBuffer;
00806     OpenCL_Util::CheckOpenCLErrorCode( clGetPlatformInfo( m_PlatformID, CL_PLATFORM_PROFILE, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00807     m_PlatformProfile = cBuffer;
00808     OpenCL_Util::CheckOpenCLErrorCode( clGetPlatformInfo( m_PlatformID, CL_PLATFORM_VENDOR, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00809     m_PlatformVendor = cBuffer;
00810 }
00811 //-----------------------------------------------------------------------------
00812 std::string OpenCL_Platform::PlatformExtensions () const
00813 {
00814     char cBuffer[1024];
00815     size_t param_value_size_ret;
00816     OpenCL_Util::CheckOpenCLErrorCode( clGetPlatformInfo( m_PlatformID, CL_PLATFORM_EXTENSIONS, sizeof(cBuffer), cBuffer, &param_value_size_ret ) );
00817     return std::string( cBuffer );  
00818 }
00819 //-----------------------------------------------------------------------------
00820 void OpenCL_Platform::GetListOfOpenCLDevices ()
00821 {
00822     const cl_uint   num_entries = 1024;
00823     cl_device_id    devices[num_entries];
00824     cl_uint         num_devices;
00825     OpenCL_Util::CheckOpenCLErrorCode( clGetDeviceIDs( m_PlatformID, CL_DEVICE_TYPE_ALL, num_entries, devices, &num_devices ) );
00826     for ( unsigned int i = 0; i < num_devices; ++i ) {
00827         m_OpenCLDeviceIDs.push_back( devices[i] );
00828         m_OpenCLDevices.push_back( OpenCL_Device( devices[i] ) );
00829     }
00830 }
00831 //-----------------------------------------------------------------------------
00832 // OpenGL
00833 #if defined(__gl_h_) || defined(__GL_H__)
00834 //template <typename T>
00835 //void OpenCL_Platform<T>::Draw () const
00836 //{
00837 //}
00838 //-----------------------------------------------------------------------------
00839 #endif  // OpenGL
00840 //-----------------------------------------------------------------------------
00841 // END CLASS: OpenCL_Platform
00842 //=============================================================================
00843 
00844 
00845 //=============================================================================
00846 END_NAMESPACE_TAPs__OpenCL
00847 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00848 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines