37# pragma warning( disable : 4996 )
47# define DLL_MAPPING __declspec(dllexport)
49# define DLL_MAPPING __declspec(dllimport)
56 #define CUTIL_API __stdcall
96 unsigned int bdimx,
unsigned int bdimy,
97 unsigned int bdimz,
const char* file,
const int line,
98 const char* aname,
const int index);
124 bool verbose =
false);
140 bool verbose =
false);
155 cutReadFilei(
const char* filename,
int** data,
unsigned int* len,
bool verbose =
false);
171 unsigned int* len,
bool verbose =
false);
187 bool verbose =
false);
203 unsigned int* len,
bool verbose =
false);
217 const float epsilon,
bool verbose =
false);
231 const double epsilon,
bool verbose =
false);
243 bool verbose =
false);
255 unsigned int len,
bool verbose =
false);
267 bool verbose =
false);
279 unsigned int len,
bool verbose =
false);
295 unsigned int *w,
unsigned int *h);
308 unsigned int *w,
unsigned int *h);
322 unsigned int *w,
unsigned int *h);
338 unsigned int* w,
unsigned int* h);
354 unsigned int* w,
unsigned int* h);
369 unsigned int* w,
unsigned int* h);
381 unsigned int w,
unsigned int h);
393 unsigned int w,
unsigned int h);
406 unsigned int w,
unsigned int h);
418 unsigned int w,
unsigned int h);
430 unsigned int w,
unsigned int h);
442 unsigned int w,
unsigned int h);
463 const char* flag_name);
477 const char* arg_name,
int* val);
491 const char* arg_name,
float* val);
505 const char* arg_name,
char** val);
520 const char* arg_name,
char** val,
546 const unsigned int len);
559 const unsigned int len );
571 cutCompareub(
const unsigned char* reference,
const unsigned char* data,
572 const unsigned int len );
586 const unsigned int len,
const int epsilon );
600 const unsigned int len,
const float epsilon );
615 const unsigned int len,
const float epsilon );
687#if __DEVICE_EMULATION__
689#define CUT_BANK_CHECKER( array, index) \
690 (cutCheckBankAccess( threadIdx.x, threadIdx.y, threadIdx.z, blockDim.x, \
691 blockDim.y, blockDim.z, \
692 __FILE__, __LINE__, #array, index ), \
695#define CUT_BANK_CHECKER( array, index) array[index]
698# define CU_SAFE_CALL_NO_SYNC( call ) do { \
699 CUresult err = call; \
700 if( CUDA_SUCCESS != err) { \
701 fprintf(stderr, "Cuda driver error %x in file '%s' in line %i.\n", \
702 err, __FILE__, __LINE__ ); \
703 exit(EXIT_FAILURE); \
706# define CU_SAFE_CALL( call ) do { \
707 CU_SAFE_CALL_NO_SYNC(call); \
708 CUresult err = cuCtxSynchronize(); \
709 if( CUDA_SUCCESS != err) { \
710 fprintf(stderr, "Cuda driver error %x in file '%s' in line %i.\n", \
711 err, __FILE__, __LINE__ ); \
712 exit(EXIT_FAILURE); \
715# define CUDA_SAFE_CALL_NO_SYNC( call) do { \
716 cudaError err = call; \
717 if( cudaSuccess != err) { \
718 fprintf(stderr, "Cuda error in file '%s' in line %i : %s.\n", \
719 __FILE__, __LINE__, cudaGetErrorString( err) ); \
720 exit(EXIT_FAILURE); \
723# define CUDA_SAFE_CALL( call) do { \
724 CUDA_SAFE_CALL_NO_SYNC(call); \
725 cudaError err = cudaThreadSynchronize(); \
726 if( cudaSuccess != err) { \
727 fprintf(stderr, "Cuda error in file '%s' in line %i : %s.\n", \
728 __FILE__, __LINE__, cudaGetErrorString( err) ); \
729 exit(EXIT_FAILURE); \
732# define CUFFT_SAFE_CALL( call) do { \
733 cufftResult err = call; \
734 if( CUFFT_SUCCESS != err) { \
735 fprintf(stderr, "CUFFT error in file '%s' in line %i.\n", \
736 __FILE__, __LINE__); \
737 exit(EXIT_FAILURE); \
740# define CUT_SAFE_CALL( call) \
741 if( CUTTrue != call) { \
742 fprintf(stderr, "Cut error in file '%s' in line %i.\n", \
743 __FILE__, __LINE__); \
744 exit(EXIT_FAILURE); \
748# define CUT_CHECK_ERROR(errorMessage) do { \
749 cudaError_t err = cudaGetLastError(); \
750 if( cudaSuccess != err) { \
751 fprintf(stderr, "Cuda error: %s in file '%s' in line %i : %s.\n", \
752 errorMessage, __FILE__, __LINE__, cudaGetErrorString( err) );\
753 exit(EXIT_FAILURE); \
755 err = cudaThreadSynchronize(); \
756 if( cudaSuccess != err) { \
757 fprintf(stderr, "Cuda error: %s in file '%s' in line %i : %s.\n", \
758 errorMessage, __FILE__, __LINE__, cudaGetErrorString( err) );\
759 exit(EXIT_FAILURE); \
763# define CUT_SAFE_MALLOC( mallocCall ) do{ \
764 if( !(mallocCall)) { \
765 fprintf(stderr, "Host malloc failure in file '%s' in line %i\n", \
766 __FILE__, __LINE__); \
767 exit(EXIT_FAILURE); \
771# define CUT_CONDITION( val) \
772 if( CUTFalse == cutCheckCondition( val, __FILE__, __LINE__)) { \
773 exit(EXIT_FAILURE); \
778#define CUT_BANK_CHECKER( array, index) array[index]
781# define CUT_CHECK_ERROR(errorMessage)
782# define CUT_CHECK_ERROR_GL()
783# define CUT_CONDITION( val)
784# define CU_SAFE_CALL_NO_SYNC( call) call
785# define CU_SAFE_CALL( call) call
786# define CUDA_SAFE_CALL_NO_SYNC( call) call
787# define CUDA_SAFE_CALL( call) call
788# define CUT_SAFE_CALL( call) call
789# define CUFFT_SAFE_CALL( call) call
790# define CUT_SAFE_MALLOC( mallocCall ) mallocCall
794#if __DEVICE_EMULATION__
796# define CUT_DEVICE_INIT(ARGC, ARGV)
800# define CUT_DEVICE_INIT(ARGC, ARGV) { \
802 CUDA_SAFE_CALL_NO_SYNC(cudaGetDeviceCount(&deviceCount)); \
803 if (deviceCount == 0) { \
804 fprintf(stderr, "cutil error: no devices supporting CUDA.\n"); \
805 exit(EXIT_FAILURE); \
808 cutGetCmdLineArgumenti(ARGC, (const char **) ARGV, "device", &dev); \
809 if (dev > deviceCount-1) dev = deviceCount - 1; \
810 cudaDeviceProp deviceProp; \
811 CUDA_SAFE_CALL_NO_SYNC(cudaGetDeviceProperties(&deviceProp, dev)); \
812 if (deviceProp.major < 1) { \
813 fprintf(stderr, "cutil error: device does not support CUDA.\n"); \
814 exit(EXIT_FAILURE); \
816 if (cutCheckCmdLineFlag(ARGC, (const char **) ARGV, "quiet") == CUTFalse) \
817 fprintf(stderr, "Using device %d: %s\n", dev, deviceProp.name); \
818 CUDA_SAFE_CALL(cudaSetDevice(dev)); \
823# define CUT_DEVICE_INIT_DRV(cuDevice, ARGC, ARGV) { \
825 int deviceCount = 0; \
826 CUresult err = cuInit(0); \
827 if (CUDA_SUCCESS == err) \
828 CU_SAFE_CALL_NO_SYNC(cuDeviceGetCount(&deviceCount)); \
829 if (deviceCount == 0) { \
830 fprintf(stderr, "cutil error: no devices supporting CUDA\n"); \
831 exit(EXIT_FAILURE); \
834 cutGetCmdLineArgumenti(ARGC, (const char **) ARGV, "device", &dev); \
835 if (dev > deviceCount-1) dev = deviceCount - 1; \
836 CU_SAFE_CALL_NO_SYNC(cuDeviceGet(&cuDevice, dev)); \
838 cuDeviceGetName(name, 100, cuDevice); \
839 if (cutCheckCmdLineFlag(ARGC, (const char **) ARGV, "quiet") == CUTFalse) \
840 fprintf(stderr, "Using device %d: %s\n", dev, name); \
843#define CUT_EXIT(argc, argv) \
844 if (!cutCheckCmdLineFlag(argc, (const char**)argv, "noprompt")) { \
845 printf("\nPress ENTER to exit...\n"); \
DLL_MAPPING CUTBoolean CUTIL_API cutDeleteTimer(unsigned int name)
Delete a timer.
DLL_MAPPING CUTBoolean CUTIL_API cutReadFilef(const char *filename, float **data, unsigned int *len, bool verbose=false)
Read file \filename containing single precision floating point data.
DLL_MAPPING CUTBoolean CUTIL_API cutCheckCmdLineFlag(const int argc, const char **argv, const char *flag_name)
Check if command line argument flag-name is given.
DLL_MAPPING void CUTIL_API cutFree(void *ptr)
Deallocate memory allocated within Cutil.
DLL_MAPPING CUTBoolean CUTIL_API cutLoadPPM4ub(const char *file, unsigned char **data, unsigned int *w, unsigned int *h)
Load PPM image file (with unsigned char as data element type), padding 4th component.
DLL_MAPPING CUTBoolean CUTIL_API cutLoadPGMf(const char *file, float **data, unsigned int *w, unsigned int *h)
Load PGM image file (with float as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutGetCmdLineArgumentf(const int argc, const char **argv, const char *arg_name, float *val)
Get the value of a command line argument of type float.
DLL_MAPPING CUTBoolean CUTIL_API cutStartTimer(const unsigned int name)
Start the time with name name.
DLL_MAPPING CUTBoolean CUTIL_API cutComparei(const int *reference, const int *data, const unsigned int len)
Compare two integer arrays.
DLL_MAPPING CUTBoolean CUTIL_API cutCreateTimer(unsigned int *name)
Timer functionality.
DLL_MAPPING CUTBoolean CUTIL_API cutComparef(const float *reference, const float *data, const unsigned int len)
Compare two float arrays.
DLL_MAPPING CUTBoolean CUTIL_API cutSavePGMi(const char *file, unsigned int *data, unsigned int w, unsigned int h)
Save PGM image file (with unsigned int as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutGetCmdLineArgumentListstr(const int argc, const char **argv, const char *arg_name, char **val, unsigned int *len)
Get the value of a command line argument list those element are strings.
DLL_MAPPING void CUTIL_API cutCheckBankAccess(unsigned int tidx, unsigned int tidy, unsigned int tidz, unsigned int bdimx, unsigned int bdimy, unsigned int bdimz, const char *file, const int line, const char *aname, const int index)
Helper for bank conflict checking (should only be used with the CUT_BANK_CHECKER macro)
DLL_MAPPING CUTBoolean CUTIL_API cutSavePGMub(const char *file, unsigned char *data, unsigned int w, unsigned int h)
Save PGM image file (with unsigned char as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutStopTimer(const unsigned int name)
Stop the time with name name.
DLL_MAPPING CUTBoolean CUTIL_API cutWriteFileui(const char *filename, const unsigned int *data, unsigned int len, bool verbose=false)
Write a data file \filename containing unsigned integer data.
DLL_MAPPING CUTBoolean CUTIL_API cutReadFiled(const char *filename, double **data, unsigned int *len, bool verbose=false)
Read file \filename containing double precision floating point data.
DLL_MAPPING CUTBoolean CUTIL_API cutWriteFiled(const char *filename, const float *data, unsigned int len, const double epsilon, bool verbose=false)
Write a data file \filename containing double precision floating point data.
DLL_MAPPING CUTBoolean CUTIL_API cutWriteFilef(const char *filename, const float *data, unsigned int len, const float epsilon, bool verbose=false)
Write a data file \filename containing single precision floating point data.
DLL_MAPPING CUTBoolean CUTIL_API cutCompareube(const unsigned char *reference, const unsigned char *data, const unsigned int len, const int epsilon)
Compare two integer arrays witha n epsilon tolerance for equality.
DLL_MAPPING CUTBoolean CUTIL_API cutComparefe(const float *reference, const float *data, const unsigned int len, const float epsilon)
Compare two float arrays with an epsilon tolerance for equality.
DLL_MAPPING CUTBoolean CUTIL_API cutCompareub(const unsigned char *reference, const unsigned char *data, const unsigned int len)
Compare two unsigned char arrays.
DLL_MAPPING CUTBoolean CUTIL_API cutWriteFilei(const char *filename, const int *data, unsigned int len, bool verbose=false)
Write a data file \filename containing integer data.
DLL_MAPPING char *CUTIL_API cutFindFilePath(const char *filename, const char *executablePath)
Find the path for a filename.
DLL_MAPPING CUTBoolean CUTIL_API cutReadFilei(const char *filename, int **data, unsigned int *len, bool verbose=false)
Read file \filename containing integer data.
DLL_MAPPING CUTBoolean CUTIL_API cutLoadPGMub(const char *file, unsigned char **data, unsigned int *w, unsigned int *h)
Load PGM image file (with unsigned char as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutLoadPPMub(const char *file, unsigned char **data, unsigned int *w, unsigned int *h)
Load PPM image file (with unsigned char as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutWriteFileub(const char *filename, const unsigned char *data, unsigned int len, bool verbose=false)
Write a data file \filename containing unsigned char / byte data.
DLL_MAPPING CUTBoolean CUTIL_API cutWriteFileb(const char *filename, const char *data, unsigned int len, bool verbose=false)
Write a data file \filename containing char / byte data.
DLL_MAPPING CUTBoolean CUTIL_API cutSavePGMf(const char *file, float *data, unsigned int w, unsigned int h)
Save PGM image file (with float as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutGetCmdLineArgumentstr(const int argc, const char **argv, const char *arg_name, char **val)
Get the value of a command line argument of type string.
DLL_MAPPING CUTBoolean CUTIL_API cutSavePGMs(const char *file, unsigned short *data, unsigned int w, unsigned int h)
Save PGM image file (with unsigned short as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutLoadPGMi(const char *file, unsigned int **data, unsigned int *w, unsigned int *h)
Load PGM image file (with unsigned int as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutCheckCondition(int val, const char *file, const int line)
Extended assert.
DLL_MAPPING CUTBoolean CUTIL_API cutSavePPMub(const char *file, unsigned char *data, unsigned int w, unsigned int h)
Save PPM image file (with unsigned char as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutSavePPM4ub(const char *file, unsigned char *data, unsigned int w, unsigned int h)
Save PPM image file (with unsigned char as data element type, padded to 4 bytes)
DLL_MAPPING CUTBoolean CUTIL_API cutGetCmdLineArgumenti(const int argc, const char **argv, const char *arg_name, int *val)
Get the value of a command line argument of type int.
DLL_MAPPING CUTBoolean CUTIL_API cutResetTimer(const unsigned int name)
Resets the timer's counter.
DLL_MAPPING CUTBoolean CUTIL_API cutReadFileui(const char *filename, unsigned int **data, unsigned int *len, bool verbose=false)
Read file \filename containing unsigned integer data.
DLL_MAPPING CUTBoolean CUTIL_API cutReadFileb(const char *filename, char **data, unsigned int *len, bool verbose=false)
Read file \filename containing char / byte data.
DLL_MAPPING CUTBoolean CUTIL_API cutCompareL2fe(const float *reference, const float *data, const unsigned int len, const float epsilon)
Compare two float arrays using L2-norm with an epsilon tolerance for equality.
DLL_MAPPING float CUTIL_API cutGetAverageTimerValue(const unsigned int name)
Return the average time in milliseconds for timer execution as the total time for the timer dividied ...
DLL_MAPPING CUTBoolean CUTIL_API cutLoadPGMs(const char *file, unsigned short **data, unsigned int *w, unsigned int *h)
Load PGM image file (with unsigned short as data element type)
DLL_MAPPING CUTBoolean CUTIL_API cutReadFileub(const char *filename, unsigned char **data, unsigned int *len, bool verbose=false)
Read file \filename containing unsigned char / byte data.
DLL_MAPPING float CUTIL_API cutGetTimerValue(const unsigned int name)
Returns total execution time in milliseconds for the timer over all runs since the last reset or time...