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; };