+#ifndef DEVICE_H\r
+#define DEVICE_H\r
+\r
+#include "cuda_runtime.h"\r
+#include <string>\r
+\r
+using std::string;\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* Declaration *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/**\r
+ * idDevice in [0,nbDevice-1]\r
+ *\r
+ * dim3.x\r
+ * dim3.y\r
+ * dim3.z\r
+ *\r
+ * sm=1.2 major=1 minor=2\r
+ */\r
+class Device\r
+ {\r
+ /*--------------------------------------*\\r
+ |* Constructor *|\r
+ \*-------------------------------------*/\r
+ public:\r
+\r
+ /*--------------------------------------*\\r
+ |* Methodes *|\r
+ \*-------------------------------------*/\r
+\r
+ public:\r
+\r
+ /*--------------*\\r
+ |* Wrapper *|\r
+ \*-------------*/\r
+\r
+ /**\r
+ * wrapper for cudaDeviceSynchronize()\r
+ */\r
+ static void synchronize(void);\r
+\r
+ /*--------------*\\r
+ |* Tools *|\r
+ \*-------------*/\r
+\r
+ /**\r
+ * message = nameKernel by example\r
+ */\r
+ static void checkKernelError(const char *message = NULL);\r
+\r
+ /**\r
+ * Booth:\r
+ * assertDim(dg, db);\r
+ * checkDimOPtimiser(dg, db);\r
+ */\r
+ static void checkDimError(const dim3& dg, const dim3& db);\r
+\r
+ static void checkDimOptimiser(const dim3& dg, const dim3& db);\r
+ static void assertDim(const dim3& dg, const dim3& db);\r
+\r
+ static int dim(const dim3& dim);\r
+ static int nbThread(const dim3& dg, const dim3& db);\r
+\r
+ static void print(const dim3& dg, const dim3& db);\r
+\r
+ /*--------------*\\r
+ |* get *|\r
+ \*-------------*/\r
+\r
+ static int getRuntimeVersion(void);\r
+ static int getDriverVersion(void);\r
+\r
+ static int getDeviceCount(void);\r
+ static int getDeviceId(void);\r
+\r
+ static cudaDeviceProp getDeviceProp(int idDevice);\r
+ static cudaDeviceProp getDeviceProp(void);\r
+\r
+ static string getNameSimple(int idDevice);\r
+ static string getNameSimple(void);\r
+\r
+ static string getName(int idDevice);\r
+ static string getName(void);\r
+\r
+ static dim3 getMaxGridDim(int idDevice);\r
+ static dim3 getMaxGridDim(void);\r
+\r
+ static dim3 getMaxBlockDim(int idDevice);\r
+ static dim3 getMaxBlockDim(void);\r
+\r
+ static int getWarpSize(int idDevice);\r
+ static int getWarpSize(void);\r
+\r
+ static int getMaxThreadPerBlock(int idDevice);\r
+ static int getMaxThreadPerBlock(void);\r
+\r
+ static int getMPCount(void);\r
+ static int getMPCount(int idDevice);\r
+\r
+ static int getCapacityMajor(int idDevice);\r
+ static int getCapacityMajor(void);\r
+\r
+ static int getCapacityMinor(int idDevice);\r
+ static int getCapacityMinor(void);\r
+\r
+ static int getAsyncEngineCount(int idDevice);\r
+ static int getAsyncEngineCount(void);\r
+\r
+ /*--------------*\\r
+ |* print *|\r
+ \*-------------*/\r
+\r
+ static void printAll(void);\r
+ static void printAllSimple(void);\r
+\r
+ static void print(int idDevice);\r
+ static void print(void);\r
+\r
+ static void printCurrent(void);\r
+\r
+ /*--------------*\\r
+ |* Is *|\r
+ \*-------------*/\r
+\r
+ static bool isCuda(void);\r
+\r
+ static bool isFermi(int idDevice);\r
+ static bool isFermi(void);\r
+\r
+ static bool isKepler(int idDevice);\r
+ static bool isKepler(void);\r
+\r
+ static bool isUVAEnable(int idDevice);\r
+ static bool isUVAEnable(void);\r
+\r
+ static bool isAtomicShareMemoryEnable(int idDevice);\r
+ static bool isAtomicShareMemoryEnable(void);\r
+\r
+ static bool isHostMapMemoryEnable(int idDevice);\r
+ static bool isHostMapMemoryEnable(void);\r
+\r
+ static bool isECCEnable(int idDevice);\r
+ static bool isECCEnable(void);\r
+\r
+ static bool isAsyncEngine(int idDevice);\r
+ static bool isAsyncEngine(void);\r
+\r
+ /*--------------*\\r
+ |* load *|\r
+ \*-------------*/\r
+\r
+ /**\r
+ * Force load\r
+ */\r
+ static void loadCudaDriver(int deviceID, bool isMapMemoryEnable = true);\r
+ /**\r
+ * Force load\r
+ */\r
+ static void loadCudaDriver(bool isMapMemoryEnable = true);\r
+ /**\r
+ * Force load\r
+ */\r
+ static void loadCudaDriverAll(bool isMapMemoryEnable = true);\r
+\r
+ /*--------------*\\r
+ |* p2p *|\r
+ \*-------------*/\r
+\r
+ /**\r
+ * use delete[] ptrMatrixP2PCompatibility after usage\r
+ * raw major vectoriser\r
+ */\r
+ static int* p2pMatrixCompatibility(void);\r
+\r
+ /**\r
+ * to be used after HANDLE_ERROR(cudaGLSetGLDevice(deviceId));\r
+ */\r
+ static void p2pEnableALL(void);\r
+\r
+ static void printP2PmatrixCompatibility(void);\r
+\r
+ /*--------------------------------------*\\r
+ |* Attributs *|\r
+ \*-------------------------------------*/\r
+\r
+ private:\r
+\r
+ };\r
+\r
+#endif\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* End *|\r
+ \*---------------------------------------------------------------------*/\r
+\r