⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bencudamem.cu

📁 GPU实现的MapReduce framework,对于学习并行编程和cuda平台的编程方面有着极好的参考价值
💻 CU
字号:
/*
 *System-independent library.
 *Written by Wenbin FANG (wenbin@cse.ust.hk)
 *
 *COMPILE MACROS:
 *1, __UNIX__ or __WIN32__
 *2, __TIMER__
 *3, __DEBUG__
 *4, __CUDA__
 *5, __MEM__
 *6, __ALLOC__
 */

#include "BenLib.h"

#ifdef __CUDA__

#ifdef __DEBUG__
size_t d_dmemUsage = 0;
#endif //__DEBUG__
 
//---------------------------------------------
//GPU memory operations
//---------------------------------------------
char *D_MALLOC(size_t size)
{	
	char *buf = NULL;
	CUDA_SAFE_CALL(cudaMalloc((void**)&buf, size));
	CUDA_SAFE_CALL(cudaMemset(buf, 0, size));
#ifdef __DEBUG__
#	ifdef __ALLOC__
	BenLog("+d%d bytes\n", size);
#	endif //__ALLOC__
	d_dmemUsage += size;
#endif
	return buf;
}

//------------------------------------------------
//free memory on device and set the pointer to NULL
//
//param	: buf
//------------------------------------------------
void D_FREE(void *buf, size_t size)
{
	CUDA_SAFE_CALL(cudaFree(buf));
	buf = NULL;
#ifdef __DEBUG__
#	ifdef __ALLOC__
	BenLog("-d%d bytes\n", size);
#	endif //__ALLOC__
	d_dmemUsage -= size;
#endif
}

//-------------------------------------------------------
//copy a buffer from host memory to device memory
//
//param	: des
//param	: src
//param	: size
//-------------------------------------------------------
void D_MEMCPY_H2D(void *des, void *src, size_t size)
{
	CUDA_SAFE_CALL(cudaMemcpy(des, src, size, cudaMemcpyHostToDevice));
}

//-------------------------------------------------------
//copy a buffer from device memory to host memory
//
//param	: des
//param	: src
//param	: size
//-------------------------------------------------------
void D_MEMCPY_D2H(void *des, void *src, size_t size)
{
	CUDA_SAFE_CALL(cudaMemcpy(des, src, size, cudaMemcpyDeviceToHost));
}

void D_ENTER_FUNC(char *func)
{
#ifdef __DEBUG__
	BenLog("=====GPU Enter %s=====\n", func);
#endif
}

void D_LEAVE_FUNC(char *func)
{
#ifdef __DEBUG__
	BenLog("=====GPU Leave %s: %d bytes=====\n\n", func, d_dmemUsage);
#endif// __DEBUG__
}

void D_ANYDEVICE()
{
 /*   int deviceCount;                                                         \
    CUDA_SAFE_CALL_NO_SYNC(cudaGetDeviceCount(&deviceCount));                \
    if (deviceCount == 0) {                                                  \
        fprintf(stderr, "There is no device.\n");                            \
        exit(EXIT_FAILURE);                                                  \
    }                                                                        \
    int dev;                                                                 \
    for (dev = 0; dev < deviceCount; ++dev) {                                \
        cudaDeviceProp deviceProp;                                           \
        CUDA_SAFE_CALL_NO_SYNC(cudaGetDeviceProperties(&deviceProp, dev));   \
        if (deviceProp.major >= 1)                                           \
            break;                                                           \
    }                                                                        \
    if (dev == deviceCount) {                                                \
        fprintf(stderr, "There is no device supporting CUDA.\n");            \
        exit(EXIT_FAILURE);                                                  \
    }                                                                        \
    else                                                                     \
        CUDA_SAFE_CALL(cudaSetDevice(dev)); */
}
#endif //__CUDA__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -