A.3_Driver_API_Facilities

A.3 Driver API Facilities

chDrv.h contains some useful facilities for driver API developers: The chCU-DADDevice class, shown in Listing A.2, simplifies management of devices and contexts. Its loadModuleFromFile method simplifies the creation of a module from a .cubin or .ptx file.

In addition, the chGetErrorString() function passes back a read-only string corresponding to an error value. Besides implementing this function declared in chDrv.h for the driver API's CUresult type, a specialization of chGetErrorString() also wraps the CUDA runtime's CUDAGetErrorString() function.

Listing A.2 chCUDADevicelclass.

class chCUDADevice   
{   
public: chCUDADevice(); virtual \~chCUDADevice(); CUresult Initialize( int ordinal, list<string>& moduleList, unsigned int Flags  $= 0$  unsigned int numOptions  $= 0$  CUjit_option \*options  $=$  NULL, void \*\*optionValues  $=$  NULL); CUresult loadModuleFromFileCUmodule \*pModule, string fileName, unsigned int numOptions  $= 0$  CUjit_option \*options  $=$  NULL, void \*\*optionValues  $=$  NULL);
CUdevice device() const{ return m_device; } CUcontext context() const{ return m_context; } CUmodule module( string s ) const{ return (*m Modules.find(s)).second; } private: CUdevice m_device; CUcontext m_context; map<string, CUmodule> m Modules; };