?? marsmacro.h
字號:
/**
*This is the source code for Mars, a MapReduce framework on graphics
*processors.
*Author: Wenbin Fang (HKUST), Bingsheng He (HKUST)
*Mentor: Naga K. Govindaraju (Microsoft Corp.), Qiong Luo (HKUST), Tuyong
*Wang (Sina.com).
*If you have any question on the code, please contact us at {saven,
*wenbin, luo}@cse.ust.hk.
*The copyright is held by HKUST. Mars is provided "as is" without any
*guarantees of any kind.
*/
//Micro difinitions
#ifndef __MARSMACRO_H__
#define __MARSMACRO_H__
//=============================================
//control values
//=============================================
//used for the filed mode in Spec_t
#define USE_FILE 0x01 //0000 0001
#define USE_MEM 0X02 //0000 0010
#define GPU 0x04 //0000 0100
#define CPU 0x08 //0000 1000
#define MAP_ONLY 0x10 //0001 0000
#define MAP_SORT 0x20 //0010 0000
#define MAP_SORT_REDUCE 0x40
#define EXTERNAL_SORT 0x80
//used in Schedule* functions
#define MAP 0x00
#define REDUCE 0x01
#define MERGE_INTER 0x02
#define MERGE_OUTPUT 0x03
#define SORT 0x04
//=============================================
//default values
//=============================================
//file names
#define DEFAULT_INPUT_KEY_FILE "inputKeyFile.txt"
#define DEFAULT_INPUT_VAL_FILE "inputValFile.txt"
#define DEFAULT_INPUT_INDEX_FILE "inputIndexFile.txt"
#define DEFAULT_INTER_KEY_FILE "interKeyFile.txt"
#define DEFAULT_INTER_VAL_FILE "interValFile.txt"
#define DEFAULT_INTER_INDEX_FILE "interIndexFile.txt"
#define DEFAULT_INTER_RANGE_FILE "interKeyListFile.txt"
#define DEFAULT_OUTPUT_KEY_FILE "outputKeyFile.txt"
#define DEFAULT_OUTPUT_VAL_FILE "outputValFile.txt"
#define DEFAULT_OUTPUT_INDEX_FILE "outputIndexFile.txt"
#define DEFAULT_OUTPUT_RANGE_FILE "outputRangeFile.txt"
#define DEFAULT_TMP_KEY_FILE "tmpKeyFile.txt"
#define DEFAULT_TMP_VAL_FILE "tmpValFile.txt"
#define DEFAULT_TMP_INDEX_FILE "tmpIndexFile.txt"
#define DEFAULT_TMP_RANGE_FILE "tmpRangeFile.txt"
//thread number
#define DEFAULT_CPU_THREAD_NUM 4
#define DEFAULT_GPU_DIM 128
//chunk parameters
#define DEFAULT_SMALL_REC_COUNT 1000000
#define DEFAULT_BIG_REC_COUNT 10000000
#define DEFAULT_SMALL_COUNT 16
//GeForce 8800 GTX shared memory size
#define GPU_SHARED_MEM_SIZE 16*1024
//very tiny floating point number
#define FLOAT_TINY 0.000001f
//default gpu input ratio
#define DEFAULT_GPU_RATIO 0.6f
#define DEFAULT_THRESHHOLD 100
//used in SortInfo
#define DEFAULL_FULL_SORT_CHUNK_COUNT 16
#define DEFAULT_SORT_OUTPUT_SIZE 2*1024*1024
#define DEFAULT_MIN_REC_SIZE 128
//=============================================
// Emit scalar data type
//=============================================
#define E_INT 0x00
#define E_INT2 0x01
#define E_INT3 0x02
#define E_INT4 0x03
#define E_INT5 0x04
#define E_INT6 0x05
#define E_INT7 0x06
#define E_INT8 0x07
#define E_CHAR 0x08
#define E_CHAR2 0x09
#define E_CHAR3 0x0a
#define E_CHAR4 0x0b
#define E_FLOAT 0x0c
#define E_FLOAT2 0x0d
#define E_FLOAT3 0x0e
#define E_FLOAT4 0x0f
//=============================================
//macro functions
//=============================================
//---------------------------------------------
//CPU
//---------------------------------------------
#define CPU_GET_VAL(vals, i) \
cpuGetVal(vals, interOffsetSizes, \
valStartIndex,valCount, i)
#define CPU_GET_VALSIZE(vals, i) \
cpuGetValSize(vals, interOffsetSizes, \
valStartIndex,valCount, i)
#define CPU_MAP_COUNT_FUNC \
cpu_map_count(void* key,\
void* val,\
size_t keySize,\
size_t valSize,\
size_t* interKeysSizePerTask,\
size_t* interValsSizePerTask,\
size_t* interCountPerTask,\
int index)
#define CPU_MAP_FUNC \
cpu_map (void* key, \
void* val, \
size_t keySize, \
size_t valSize,\
size_t* psKeySizes, \
size_t* psValSizes, \
size_t* psCounts, \
int2* keyValOffsets, \
char* interKeys,\
char* interVals,\
int4* interOffsetSizes,\
size_t* curIndex, int index)
#define CPU_REDUCE_COUNT_FUNC \
cpu_reduce_count(void *key,\
void *vals,\
size_t keySize,\
size_t valCount,\
int4* interOffsetSizes,\
size_t* outputKeysSizePerTask,\
size_t* outputValsSizePerTask,\
size_t* outputCountPerTask, int index, size_t valStartIndex)
#define CPU_REDUCE_FUNC \
cpu_reduce(void* key, \
void* vals, \
size_t keySize, \
size_t valCount, \
size_t* psKeySizes,\
size_t* psValSizes, \
size_t* psCounts, \
int2* keyValOffsets,\
int4* interOffsetSizes,\
char* outputKeys, \
char* outputVals,\
int4* outputOffsetSizes, \
size_t* curIndex, int index, size_t valStartIndex)
#define CPU_EMIT_INTER_COUNT_FUNC(keySize, valSize)\
cpuEmitInterCount(keySize, valSize, \
interKeysSizePerTask, interValsSizePerTask, interCountPerTask, index)
#define CPU_EMIT_INTER_FUNC(newKey, newVal, newKeySize, newValSize) \
cpuEmitIntermediate((char*)newKey,\
(char*)newVal,\
newKeySize,\
newValSize,\
psKeySizes,\
psValSizes,\
psCounts,\
keyValOffsets,\
interKeys,\
interVals,\
interOffsetSizes,\
curIndex, index)
#define CPU_EMIT_COUNT_FUNC(newKeySize, newValSize) \
cpuEmitCount(newKeySize,\
newValSize,\
outputKeysSizePerTask,\
outputValsSizePerTask,\
outputCountPerTask, index)
#define CPU_EMIT_FUNC(newKey, newVal, newKeySize, newValSize) \
cpuEmit((char*)newKey,\
(char*)newVal,\
newKeySize,\
newValSize,\
psKeySizes,\
psValSizes,\
psCounts, \
keyValOffsets, \
outputKeys,\
outputVals,\
outputOffsetSizes,\
curIndex, index)
//---------------------------------------------
//GPU
//---------------------------------------------
#define GPU_GET_VAL(vals, i) \
gpuGetVal(vals, interOffsetSizes, \
valStartIndex,valCount, i)
#define GPU_GET_VALSIZE(vals, i) \
gpuGetValSize(vals, interOffsetSizes, \
valStartIndex,valCount, i)
#define GPU_MAP_COUNT_FUNC \
gpu_map_count(void* key,\
void* val,\
size_t keySize,\
size_t valSize,\
size_t* interKeysSizePerTask,\
size_t* interValsSizePerTask,\
size_t* interCountPerTask)
#define GPU_MAP_FUNC \
gpu_map (void* key, \
void* val, \
size_t keySize, \
size_t valSize,\
size_t* psKeySizes, \
size_t* psValSizes, \
size_t* psCounts, \
int2* keyValOffsets, \
char* interKeys,\
char* interVals,\
int4* interOffsetSizes,\
size_t* curIndex)
#define GPU_EMIT_INTER_COUNT_FUNC(keySize, valSize)\
gpuEmitInterCount(keySize, valSize, \
interKeysSizePerTask, interValsSizePerTask, interCountPerTask)
#define GPU_REDUCE_COUNT_FUNC \
gpu_reduce_count(void *key,\
void *vals,\
size_t keySize,\
size_t valCount,\
int4* interOffsetSizes,\
size_t* outputKeysSizePerTask,\
size_t* outputValsSizePerTask,\
size_t* outputCountPerTask, \
size_t valStartIndex)
#define GPU_REDUCE_FUNC \
gpu_reduce(void* key, \
void* vals, \
size_t keySize, \
size_t valCount, \
size_t* psKeySizes,\
size_t* psValSizes, \
size_t* psCounts, \
int2* keyValOffsets,\
int4* interOffsetSizes,\
char* outputKeys, \
char* outputVals,\
int4* outputOffsetSizes, \
size_t* curIndex, size_t valStartIndex)
#define GPU_EMIT_COUNT_FUNC(newKeySize, newValSize) \
gpuEmitCount(newKeySize,\
newValSize,\
outputKeysSizePerTask,\
outputValsSizePerTask,\
outputCountPerTask)
#define GPU_EMIT_FUNC(newKey, newVal, newKeySize, newValSize) \
gpuEmit((char*)newKey,\
(char*)newVal,\
newKeySize,\
newValSize,\
psKeySizes,\
psValSizes,\
psCounts, \
keyValOffsets, \
outputKeys,\
outputVals,\
outputOffsetSizes,\
curIndex)
//---------------------------------------------------------------------------------------
//GPU emit
//---------------------------------------------------------------------------------------
#define GPU_EMIT_INTER_KEY_FLOAT(newKey) \
gpuEmitKeyFloat(newKey,sizeof(float), psKeySizes, psCounts, keyValOffsets, interKeys, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_VAL_FLOAT(newVal) \
gpuEmitValFloat(newVal,sizeof(float), psKeySizes, psCounts, keyValOffsets, interVals, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_KEY_FLOAT2(newKey) \
gpuEmitKeyFloat2(newKey,sizeof(float2), psKeySizes, psCounts, keyValOffsets, interKeys, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_VAL_FLOAT2(newVal) \
gpuEmitValFloat2(newVal,sizeof(float2), psKeySizes, psCounts, keyValOffsets, interVals, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_KEY_INT(newKey) \
gpuEmitKeyInt(newKey,sizeof(int), psKeySizes, psCounts, keyValOffsets, interKeys, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_VAL_INT(newVal) \
gpuEmitValInt(newVal,sizeof(int), psKeySizes, psCounts, keyValOffsets, interVals, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_KEY_INT2(newKey) \
gpuEmitKeyInt2(newKey,sizeof(int2), psKeySizes, psCounts, keyValOffsets, interKeys, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_VAL_INT2(newVal) \
gpuEmitValInt2(newVal,sizeof(int2), psKeySizes, psCounts, keyValOffsets, interVals, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_KEY_INT5(newKey) \
gpuEmitKeyInt5(newKey,sizeof(int5), psKeySizes, psCounts, keyValOffsets, interKeys, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_VAL_INT5(newVal) \
gpuEmitValInt5(newVal,sizeof(int5), psKeySizes, psCounts, keyValOffsets, interVals, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_KEY_POINTER(newKey, newKeySize) \
gpuEmitKeyPointer((char*)newKey, newKeySize, psKeySizes, psCounts, keyValOffsets, interKeys, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_VAL_POINTER(newVal, newValSize) \
gpuEmitValPointer((char*)newVal, newValSize, psKeySizes, psCounts, keyValOffsets, interVals, interOffsetSizes,curIndex);\
#define GPU_EMIT_INTER_COMMIT()\
do{\
size_t index = (blockIdx.x * blockDim.x + threadIdx.x);\
curIndex[index]++;\
} while(0)
#define GPU_EMIT_INTER_FUNC(newKey, newVal, newKeySize, newValSize) \
gpuEmitIntermediate((char*)newKey,\
(char*)newVal,\
newKeySize,\
newValSize,\
psKeySizes,\
psValSizes,\
psCounts,\
keyValOffsets,\
interKeys,\
interVals,\
interOffsetSizes,\
curIndex)
#endif //__MARSMACRO_H__
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -