亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? marsutils.cu

?? GPU實(shí)現(xiàn)的MapReduce framework,對(duì)于學(xué)習(xí)并行編程和cuda平臺(tái)的編程方面有著極好的參考價(jià)值
?? CU
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/**
 *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.
 */

//--------------------------------------------------
//runtime functions which can be called by users
//1, Required
//2, Iterators
//3, Debug tools
//--------------------------------------------------
#include "MarsInc.h"

//========================================================
//Required
//======================================================== 
//--------------------------------------------------------
//factory function, get a default runtime configuration
//--------------------------------------------------------
Spec_t *GetDefaultSpec()
{
	//EnterFunc("GetDefaultSpec");
	Spec_t *spec = (Spec_t*)BenMalloc(sizeof(Spec_t));

	BenMemset(&spec->inputFile, 0, sizeof(FileName_t));
	BenMemset(&spec->interFile, 0, sizeof(FileName_t));
	BenMemset(&spec->outputFile, 0, sizeof(FileName_t));

	spec->inputFile.keyFile = BenStrDup(DEFAULT_INPUT_KEY_FILE);
	spec->inputFile.valFile = BenStrDup(DEFAULT_INPUT_VAL_FILE);
	spec->inputFile.indexFile = BenStrDup(DEFAULT_INPUT_INDEX_FILE);

	spec->inputChunk = (ChunkInfo_t*)BenMalloc(sizeof(ChunkInfo_t));
	spec->interChunk = (ChunkInfo_t*)BenMalloc(sizeof(ChunkInfo_t));
	spec->outputChunk = (ChunkInfo_t*)BenMalloc(sizeof(ChunkInfo_t));
	
	spec->cpuSched = (Schedule_t*)BenMalloc(sizeof(Schedule_t));
	spec->gpuSched = (Schedule_t*)BenMalloc(sizeof(Schedule_t));

	spec->gpuSched->gpuMapSharedMemSize = 0;
	spec->gpuSched->gpuReduceSharedMemSize = 0;

	spec->sortInfo = (SortInfo_t*)BenMalloc(sizeof(SortInfo_t));
	spec->sortInfo->fullChunkCount = DEFAULL_FULL_SORT_CHUNK_COUNT;
	spec->sortInfo->chunks = (SortChunk_t*)BenMalloc(sizeof(SortChunk_t)*spec->sortInfo->fullChunkCount);

	spec->flushThreshhold = DEFAULT_THRESHHOLD;

	//LeaveFunc("GetDefaultSpec");
	return spec;
}

//------------------------------------------------
//Add input records
//------------------------------------------------
size_t d_keyChunkSize = 0;
size_t d_valChunkSize = 0;
size_t d_indexChunkSize = 0;

static int2 curOffset;
static int3 curChunkNum;
static void AddMapInputRecordSingle(Spec_t*		spec, 
					   void*		key, 
					   void*		val,
					   size_t		keySize, 
					   size_t		valSize)
{
	//EnterFunc("AddMapInputRecord");
	BEN_ASSERT(spec != NULL);

	int index = spec->inputChunk->recCount;

	const size_t dataChunkSize = 1024*1024*16;

	if (spec->totalInputRecCount > 0)
	{
		size_t xAllSize = dataChunkSize*curChunkNum.x;
		if ( xAllSize < (curOffset.x + keySize))
		{
			spec->inputChunk->keys = (char*)BenRealloc(spec->inputChunk->keys, 
					xAllSize, (++curChunkNum.x)*dataChunkSize);

			d_keyChunkSize += dataChunkSize;
		}
		BenMemcpy(spec->inputChunk->keys+curOffset.x, key, keySize);

		size_t yAllSize = dataChunkSize*curChunkNum.y;
		if (yAllSize < (curOffset.y + valSize))
		{
			spec->inputChunk->vals = (char*)BenRealloc(spec->inputChunk->vals,
				yAllSize, (++curChunkNum.y)*dataChunkSize);

			d_valChunkSize += dataChunkSize;
		}
		BenMemcpy(spec->inputChunk->vals+curOffset.y, val, valSize);		

		size_t zAllSize = dataChunkSize*curChunkNum.z;
		if (zAllSize < (spec->inputChunk->recCount+1)*sizeof(int4))
		{
			spec->inputChunk->index = (int4*)BenRealloc((void*)spec->inputChunk->index, 
				zAllSize, (++curChunkNum.z)*dataChunkSize);

			d_indexChunkSize += dataChunkSize;
		}
	}
	else
	{
		spec->inputChunk->keys = (char*)BenMalloc(dataChunkSize);
		if (NULL == spec->inputChunk->keys) exit(-1);
		BenMemcpy(spec->inputChunk->keys, key, keySize);

		spec->inputChunk->vals = (char*)BenMalloc(dataChunkSize);
		if (NULL == spec->inputChunk->vals) exit(-1);
		BenMemcpy(spec->inputChunk->vals, val, valSize);

		spec->inputChunk->index = (int4*)BenMalloc(dataChunkSize);

		curChunkNum.x++;
		curChunkNum.y++;
		curChunkNum.z++;

		d_keyChunkSize += dataChunkSize;
		d_valChunkSize += dataChunkSize;
		d_indexChunkSize += dataChunkSize;
	}

	spec->inputChunk->index[index].x = curOffset.x;
	spec->inputChunk->index[index].y = keySize;
	spec->inputChunk->index[index].z = curOffset.y;
	spec->inputChunk->index[index].w = valSize;

	curOffset.x += keySize;
	curOffset.y += valSize;

	spec->inputChunk->keySize += keySize;
	spec->inputChunk->valSize += valSize;
	spec->inputChunk->indexSize += sizeof(int4);
	spec->inputChunk->recCount++;
	spec->totalInputRecCount++;

	//flush in memory buffer to disk

	//LeaveFunc("AddMapInputRecord");
}
	
static int2 localIndex;
static void AddMapInputRecordMem(Spec_t*		spec, 
					   void*		key, 
					   void*		val,
					   size_t		keySize, 
					   size_t		valSize)
{
	//EnterFunc("AddMapInputRecord");
	BEN_ASSERT(spec != NULL);

	int index = spec->inputChunk->recCount;

	const size_t dataChunkSize = 1024*1024*16;

	if (spec->totalInputRecCount > 0)
	{
		size_t xAllSize = dataChunkSize*curChunkNum.x;
		if ( xAllSize < (curOffset.x + keySize))
		{
			spec->inputChunk->keys = (char*)BenRealloc(spec->inputChunk->keys, 
					xAllSize, (++curChunkNum.x)*dataChunkSize);

			d_keyChunkSize += dataChunkSize;
		}
		BenMemcpy(spec->inputChunk->keys+curOffset.x, key, keySize);

		size_t yAllSize = dataChunkSize*curChunkNum.y;
		if (yAllSize < (curOffset.y + valSize))
		{
			spec->inputChunk->vals = (char*)BenRealloc(spec->inputChunk->vals,
				yAllSize, (++curChunkNum.y)*dataChunkSize);

			d_valChunkSize += dataChunkSize;
		}
		BenMemcpy(spec->inputChunk->vals+curOffset.y, val, valSize);		

		size_t zAllSize = dataChunkSize*curChunkNum.z;
		if (zAllSize < (spec->inputChunk->recCount+1)*sizeof(int4))
		{
			spec->inputChunk->index = (int4*)BenRealloc((void*)spec->inputChunk->index, 
				zAllSize, (++curChunkNum.z)*dataChunkSize);

			d_indexChunkSize += dataChunkSize;
		}
	}
	else
	{
		spec->inputChunk->keys = (char*)BenMalloc(dataChunkSize);
		if (NULL == spec->inputChunk->keys) exit(-1);
		BenMemcpy(spec->inputChunk->keys, key, keySize);

		spec->inputChunk->vals = (char*)BenMalloc(dataChunkSize);
		if (NULL == spec->inputChunk->vals) exit(-1);
		BenMemcpy(spec->inputChunk->vals, val, valSize);

		spec->inputChunk->index = (int4*)BenMalloc(dataChunkSize);

		curChunkNum.x++;
		curChunkNum.y++;
		curChunkNum.z++;

		d_keyChunkSize += dataChunkSize;
		d_valChunkSize += dataChunkSize;
		d_indexChunkSize += dataChunkSize;
	}

	spec->inputChunk->index[index].x = localIndex.x;
	spec->inputChunk->index[index].y = keySize;
	spec->inputChunk->index[index].z = localIndex.x;
	spec->inputChunk->index[index].w = valSize;

	curOffset.x += keySize;
	curOffset.y += valSize;

	localIndex.x += keySize;
	localIndex.y += valSize;

	spec->inputChunk->keySize += keySize;
	spec->inputChunk->valSize += valSize;
	spec->inputChunk->indexSize += sizeof(int4);
	spec->inputChunk->recCount++;
	spec->totalInputRecCount++;

	//flush in memory buffer to disk

	//LeaveFunc("AddMapInputRecord");
}

static void AddMapInputRecordFile(Spec_t*		spec, 
					   void*		key, 
					   void*		val,
					   size_t		keySize, 
					   size_t		valSize)
{
	//flush buffer to file
	if (spec->inputChunk->recCount >= spec->flushThreshhold)
	{
		/*for (int i = 0; i < spec->inputChunk->recCount; i++)
		{
			spec->inputChunk->index[i].x += spec->inputChunk->keyOffset;
			spec->inputChunk->index[i].z += spec->inputChunk->valOffset;
		}*/
		if (spec->totalInputRecCount > spec->flushThreshhold)
		{
			BenAppendFile(spec->inputFile.keyFile, 
				spec->inputChunk->keys, spec->inputChunk->keySize);
			BenAppendFile(spec->inputFile.valFile, 
				spec->inputChunk->vals, spec->inputChunk->valSize);
			BenAppendFile(spec->inputFile.indexFile, 
				spec->inputChunk->index, spec->inputChunk->indexSize);
		}
		else
		{
			BenWriteFile(spec->inputFile.keyFile, 
				spec->inputChunk->keys, spec->inputChunk->keySize);
			BenWriteFile(spec->inputFile.valFile, 
				spec->inputChunk->vals, spec->inputChunk->valSize);
			BenWriteFile(spec->inputFile.indexFile, 
				spec->inputChunk->index, spec->inputChunk->indexSize);
		}

		spec->inputChunk->keyOffset += spec->inputChunk->keySize;
		spec->inputChunk->valOffset += spec->inputChunk->valSize;
		spec->inputChunk->recCount = 0;
		spec->inputChunk->keySize = 0;
		spec->inputChunk->valSize = 0;
		spec->inputChunk->indexSize = 0;
		curOffset.x = 0;
		curOffset.y = 0;
	}

	//put record temporally in memory
	AddMapInputRecordMem(spec, key, val, keySize, valSize);
}

void AddMapInputRecord(Spec_t*		spec, 
					   void*		key, 
					   void*		val,
					   size_t		keySize, 
					   size_t		valSize)
{
	if (spec->mode & USE_MEM)
		AddMapInputRecordSingle(spec, key, val, keySize, valSize);
	else if (spec->mode & USE_FILE)
		AddMapInputRecordFile(spec, key, val, keySize, valSize);
	else
		return ;
}

void ResetInput(Spec_t *spec)
{
	if (spec->mode & USE_MEM)
	{
		BenFree((char**)&(spec->inputChunk->keys), d_keyChunkSize);
		BenFree((char**)&(spec->inputChunk->vals), d_valChunkSize);
		BenFree((char**)&(spec->inputChunk->index), d_indexChunkSize);

		d_keyChunkSize = 0;
		d_valChunkSize = 0;
		d_indexChunkSize = 0;
		localIndex.x = 0;
		localIndex.y = 0;
		curOffset.x = 0;
		curOffset.y = 0;
		curChunkNum.x = 0;
		curChunkNum.y = 0;
		curChunkNum.z = 0;

		BenMemset(spec->inputChunk, 0, sizeof(ChunkInfo_t));
		spec->totalInputRecCount = 0;
	}
}

void ResetInter(Spec_t *spec)
{
	if (spec->mode & USE_MEM)
	{
		BenFree((char**)&(spec->interChunk->keys), spec->interChunk->keySize);
		BenFree((char**)&(spec->interChunk->vals), spec->interChunk->valSize);
		BenFree((char**)&(spec->interChunk->index), spec->interChunk->indexSize);
		BenFree((char**)&(spec->interChunk->keyListRange), sizeof(int2)*spec->interChunk->diffKeyCount);		
	
		BenMemset(spec->interChunk, 0, sizeof(ChunkInfo_t));
		spec->totalInterRecCount = 0;
		spec->totalDiffKeyCount = 0;
	}
}

void ResetOutput(Spec_t *spec)
{
	if (spec->mode & USE_MEM)
	{
		BenFree((char**)&(spec->outputChunk->keys), spec->outputChunk->keySize);
		BenFree((char**)&spec->outputChunk->vals, spec->outputChunk->valSize);
		BenFree((char**)&spec->outputChunk->index, spec->outputChunk->indexSize);
		BenFree((char**)&(spec->outputChunk->keyListRange), sizeof(int2)*spec->outputChunk->diffKeyCount);
		BenMemset(spec->outputChunk, 0, sizeof(ChunkInfo_t));
	}
}

static void FlushToDisk(ChunkInfo_t *chunk, FileName_t *file)
{
	BenAppendFile(file->keyFile, chunk->keys, chunk->keySize);
	BenAppendFile(file->valFile, chunk->vals, chunk->valSize);
	BenAppendFile(file->indexFile, chunk->index, chunk->indexSize);
}

void FlushInputToDisk(Spec_t *spec)
{
	if (spec->inputChunk->recCount > 0 &&
		spec->mode & USE_FILE)
	{
		FlushToDisk(spec->inputChunk, &(spec->inputFile));

		BenFree((char**)&(spec->inputChunk->keys), d_keyChunkSize);
		BenFree((char**)&(spec->inputChunk->vals), d_valChunkSize);
		BenFree((char**)&(spec->inputChunk->index), d_indexChunkSize);
		
		spec->inputChunk->recCount = 0;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品费精品国产一区二区| 国产精品午夜久久| 99久久精品一区| 成人的网站免费观看| 国产精品一二一区| 国产成人在线色| 国产成人午夜精品5599| 国产激情视频一区二区在线观看 | 欧美午夜宅男影院| 91亚洲大成网污www| 国产成人精品一区二区三区四区| 欧美bbbbb| 亚洲电影第三页| 亚洲五月六月丁香激情| 亚洲自拍偷拍九九九| 亚洲一区二区三区在线| 丝袜亚洲另类欧美综合| 午夜电影一区二区三区| 日韩精品电影一区亚洲| 婷婷丁香激情综合| 青椒成人免费视频| 国产一区二区三区香蕉| www.久久久久久久久| av在线不卡电影| 欧美日韩国产小视频| 精品久久久久久久久久久院品网| 久久九九影视网| 自拍偷在线精品自拍偷无码专区 | 欧美挠脚心视频网站| 欧美一级欧美一级在线播放| 26uuu色噜噜精品一区| 国产亚洲欧洲一区高清在线观看| 国产精品丝袜在线| 亚洲一区二区三区在线播放| 久久国产精品99精品国产| 成人一区二区三区中文字幕| 色94色欧美sute亚洲线路一ni| 777亚洲妇女| 国产三级三级三级精品8ⅰ区| 亚洲欧美经典视频| 天天影视色香欲综合网老头| 国产精品一区二区在线播放| 91丝袜美女网| 欧美一二区视频| 国产精品伦理一区二区| 亚洲成a人在线观看| 国产综合色视频| 欧美少妇xxx| 中文幕一区二区三区久久蜜桃| 亚洲国产sm捆绑调教视频| 国产精品影视网| 欧美日韩高清一区二区| 国产精品免费av| 蜜臂av日日欢夜夜爽一区| 91碰在线视频| 久久精品日产第一区二区三区高清版 | 欧美一区二区三区视频免费| 一级中文字幕一区二区| 国产自产高清不卡| 国产精品丝袜久久久久久app| 精品区一区二区| 日韩精品自拍偷拍| 一区二区久久久久久| 国产精品主播直播| 成人永久aaa| 国产精品成人一区二区三区夜夜夜| 99re热这里只有精品视频| 亚洲国产精品久久不卡毛片| 日韩一区二区三区在线视频| 国产伦精品一区二区三区免费 | 国产精品456| 一区在线中文字幕| 91精品国产欧美一区二区| 韩日av一区二区| 亚洲精品欧美专区| 日韩三级视频在线看| 成人免费毛片a| 午夜精品久久久久久久蜜桃app| 欧美成人在线直播| 91丝袜呻吟高潮美腿白嫩在线观看| 午夜激情综合网| 日韩毛片高清在线播放| 欧美三区免费完整视频在线观看| 国内精品视频666| 一区av在线播放| 久久精品夜色噜噜亚洲a∨| 91麻豆6部合集magnet| 精品一区二区三区免费| 亚洲人成在线观看一区二区| 337p日本欧洲亚洲大胆色噜噜| 日本乱码高清不卡字幕| 精品一区二区三区av| 日韩美女精品在线| 久久免费视频一区| 欧美巨大另类极品videosbest | 韩国精品在线观看| 一级中文字幕一区二区| 国产三级一区二区| 精品久久国产97色综合| 欧美午夜精品一区二区蜜桃| 精品一区二区三区日韩| 日本午夜精品一区二区三区电影 | gogo大胆日本视频一区| 国产一区二区不卡在线| 免费的国产精品| 香蕉久久一区二区不卡无毒影院| 1024成人网色www| 日韩在线a电影| 精品盗摄一区二区三区| 成人精品免费视频| 亚洲成a人在线观看| 欧美大片一区二区| 本田岬高潮一区二区三区| 亚洲一区二区三区四区在线观看 | 亚洲丝袜自拍清纯另类| 欧美久久久久免费| 国产宾馆实践打屁股91| 亚洲激情自拍偷拍| 欧美一区二区三区人| 成人免费观看av| 亚洲日本va在线观看| 国产v综合v亚洲欧| 日本网站在线观看一区二区三区| 亚洲国产精品久久不卡毛片| 亚洲一区二区视频| 亚洲第一福利一区| 五月综合激情网| 日本不卡一区二区三区高清视频| 日韩福利电影在线| 美女高潮久久久| 麻豆精品久久久| 狠狠色丁香婷婷综合久久片| 久久精品999| 久久99精品久久久久| 精品夜夜嗨av一区二区三区| 麻豆精品一二三| 久久se精品一区二区| 青青青伊人色综合久久| 免费人成网站在线观看欧美高清| 一区二区免费看| 日韩vs国产vs欧美| 99久久综合99久久综合网站| 在线视频你懂得一区二区三区| 欧美日韩亚洲高清一区二区| 日韩一级大片在线| 中文字幕免费不卡| 一区二区三区在线免费视频| 天天综合色天天综合色h| 久久99精品国产麻豆婷婷洗澡| 成人禁用看黄a在线| 欧美综合久久久| 日韩欧美国产电影| 国产精品视频一二| 亚洲国产日韩a在线播放性色| 蜜桃一区二区三区四区| 成人深夜福利app| 欧美日韩亚洲综合一区二区三区 | 91精品欧美福利在线观看| 国产亚洲精品7777| 亚洲一区二区偷拍精品| 国产乱子轮精品视频| 欧美在线综合视频| 久久婷婷一区二区三区| 亚洲一级二级三级在线免费观看| 久久99精品久久久久久动态图| 91日韩精品一区| 久久综合国产精品| 亚洲第一久久影院| 高清av一区二区| 欧美一区二区三区影视| 综合激情成人伊人| 国产毛片精品视频| 欧美精品少妇一区二区三区| 国产精品女同一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 成人精品视频.| 久久青草欧美一区二区三区| 亚洲va韩国va欧美va| 不卡的看片网站| 337p日本欧洲亚洲大胆色噜噜| 同产精品九九九| 91视频免费播放| 久久久99久久| 久久99久久99| 欧美一级理论片| 亚洲一区二区高清| 成人av电影在线| 国产亚洲美州欧州综合国| 奇米色一区二区三区四区| 色94色欧美sute亚洲线路一ni | 日韩无一区二区| 亚洲裸体在线观看| 粉嫩蜜臀av国产精品网站| 精品久久一二三区| 天天av天天翘天天综合网| 色偷偷成人一区二区三区91| 欧美国产丝袜视频| 狠狠v欧美v日韩v亚洲ⅴ| 91精品久久久久久久久99蜜臂| 亚洲综合999|