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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? marsutils.cu

?? GPU實現的MapReduce framework,對于學習并行編程和cuda平臺的編程方面有著極好的參考價值
?? CU
?? 第 1 頁 / 共 3 頁
字號:
		d_keyChunkSize = 0;
		d_valChunkSize = 0;
		d_indexChunkSize = 0;
	}
}
//---------------------------------------------------------
//main mapreduce procedure
//---------------------------------------------------------
double map_time = 0.0;
double merge_inter_time = 0.0;
double reduce_time = 0.0;
double merge_output_time = 0.0;
double group_time = 0.0;

void MapReduce(Spec_t *spec)
{
	BEN_ASSERT(spec != NULL);

	if (spec->mode & CPU)
	{
		spec->cpuSched->cpuMapThreadNum = spec->cpuMapThreadNum;
		spec->cpuSched->cpuReduceThreadNum = spec->cpuReduceThreadNum;
	}
	if (spec->mode & GPU)
	{
		spec->gpuSched->gpuMapGridDim = spec->gpuMapGridDim;
		spec->gpuSched->gpuMapBlockDim = spec->gpuMapBlockDim;
		spec->gpuSched->gpuReduceGridDim = spec->gpuReduceGridDim;
		spec->gpuSched->gpuReduceBlockDim = spec->gpuReduceBlockDim;
	}

	if (spec->mode & USE_MEM)
	{
		if (((spec->mode & CPU) &&
			!(spec->mode & GPU)) ||
			(!(spec->mode & CPU) &&
			(spec->mode & GPU)))
		{
			BenSetup(0);
			BenStart(0);
			if(!ScheduleSingleMem(spec, MAP)) return;
			BenStop(0);
			map_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if (!ScheduleSingleMem(spec, SORT)) return;
			BenStop(0);
			group_time += BenGetElapsedTime(0);
			
			BenReset(0);
			BenStart(0);
			if(!ScheduleSingleMem(spec, MERGE_INTER)) return;
			BenStop(0);
			merge_inter_time += BenGetElapsedTime(0);
			
			BenReset(0);
			BenStart(0);
			if(!ScheduleSingleMem(spec, REDUCE)) return;
			BenStop(0);
			reduce_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleSingleMem(spec, MERGE_OUTPUT)) return;
			BenStop(0);
			merge_output_time += BenGetElapsedTime(0);
		}
		else if ((spec->mode & CPU) && 
				(spec->mode & GPU))
		{
			BenSetup(0);
			BenStart(0);
			if(!ScheduleCoprocessMem(spec, MAP)) return;
			BenStop(0);
			map_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleCoprocessMem(spec, MERGE_INTER)) return;
			BenStop(0);
			merge_inter_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleCoprocessMem(spec, REDUCE)) return;
			BenStop(0);
			reduce_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleCoprocessMem(spec, MERGE_OUTPUT)) return;
			BenStop(0);
			merge_output_time += BenGetElapsedTime(0);
		}
	}
	else if (spec->mode & USE_FILE)
	{
		if (((spec->mode & CPU) &&
			!(spec->mode & GPU)) ||
			(!(spec->mode & CPU) &&
			(spec->mode & GPU)))
		{
			BenSetup(0);
			BenStart(0);
			if(!ScheduleSingleFile(spec, MAP)) return;
			BenStop(0);
			map_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleSingleFile(spec, MERGE_INTER)) return;
			BenStop(0);
			merge_inter_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleSingleFile(spec, REDUCE)) return;
			BenStop(0);
			reduce_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleSingleFile(spec, MERGE_OUTPUT)) return;
			BenStop(0);
			merge_output_time += BenGetElapsedTime(0);
		}
		else if ((spec->mode & CPU) && 
				(spec->mode & GPU))
		{
			BenSetup(0);
			BenStart(0);
			if(!ScheduleCoprocessFile(spec, MAP)) return;
			BenStop(0);
			map_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);
			if(!ScheduleCoprocessFile(spec, MERGE_INTER)) return;
			BenStop(0);
			merge_inter_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);			
			if(!ScheduleCoprocessFile(spec, REDUCE)) return;
			BenStop(0);
			reduce_time += BenGetElapsedTime(0);

			BenReset(0);
			BenStart(0);			
			if(!ScheduleCoprocessFile(spec, MERGE_OUTPUT)) return;
			BenStop(0);
			merge_output_time += BenGetElapsedTime(0);
		}
	}
	else 
	{
		BenLog("Error: please specify USE_MEM or USE_FILE\n");
		return ;
	}
}

//---------------------------------------------------------
//Clear buffer
//---------------------------------------------------------
void FinishMapReduce(Spec_t *spec)
{
	//EnterFunc("FinishMapReduce");
	BEN_ASSERT(spec != NULL);

	BenFree((char**)&(spec->inputFile.keyFile), BenStrLen(spec->inputFile.keyFile)+1);
	BenFree((char**)&(spec->inputFile.valFile), BenStrLen(spec->inputFile.valFile)+1);
	BenFree((char**)&(spec->inputFile.indexFile), BenStrLen(spec->inputFile.indexFile)+1);

	BenFree((char**)&(spec->interFile.keyFile), BenStrLen(spec->interFile.keyFile)+1);
	BenFree((char**)&(spec->interFile.valFile), BenStrLen(spec->interFile.valFile)+1);
	BenFree((char**)&(spec->interFile.indexFile), BenStrLen(spec->interFile.indexFile)+1);
	BenFree((char**)&(spec->interFile.rangeFile), BenStrLen(spec->interFile.rangeFile)+1);
	
	BenFree((char**)&(spec->outputFile.keyFile), BenStrLen(spec->outputFile.keyFile)+1);
	BenFree((char**)&(spec->outputFile.valFile), BenStrLen(spec->outputFile.valFile)+1);
	BenFree((char**)&(spec->outputFile.indexFile), BenStrLen(spec->outputFile.indexFile)+1);
	BenFree((char**)&(spec->outputFile.rangeFile), BenStrLen(spec->outputFile.rangeFile)+1);

	BenFree((char**)&(spec->tmpFile.keyFile), BenStrLen(spec->tmpFile.keyFile)+1);
	BenFree((char**)&(spec->tmpFile.valFile), BenStrLen(spec->tmpFile.valFile)+1);
	BenFree((char**)&(spec->tmpFile.indexFile), BenStrLen(spec->tmpFile.indexFile)+1);
	BenFree((char**)&(spec->tmpFile.rangeFile), BenStrLen(spec->tmpFile.rangeFile)+1);
	 	
	BenFree((char**)&(spec->inputChunk->keys), d_keyChunkSize);
	BenFree((char**)&(spec->inputChunk->vals), d_valChunkSize);
	BenFree((char**)&(spec->inputChunk->index), d_indexChunkSize);
	
	if (spec->mode & MAP_SORT)
	{
		BenFree((char**)&(spec->outputChunk->keyListRange), sizeof(int2)*spec->outputChunk->diffKeyCount);
	//	BenFree((char**)&(spec->outputChunk->groupInfo), sizeof(int4)*spec->outputChunk->recCount);
	}
	else if (spec->mode & MAP_SORT_REDUCE)
	{
		BenFree((char**)&(spec->interChunk->keyListRange), sizeof(int2)*spec->interChunk->diffKeyCount);	
//		BenFree((char**)&(spec->interChunk->groupInfo), sizeof(int4)*spec->outputChunk->recCount);	
	}
	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->interChunk->keys), spec->interChunk->keySize);
	BenFree((char**)&(spec->interChunk->vals), spec->interChunk->valSize);
	BenFree((char**)&(spec->interChunk->index), spec->interChunk->indexSize);
	
	BenFree((char**)&(spec->inputChunk), sizeof(ChunkInfo_t));
	BenFree((char**)&(spec->interChunk), sizeof(ChunkInfo_t));
	BenFree((char**)&(spec->outputChunk), sizeof(ChunkInfo_t));

	BenFree((char**)&spec->sortInfo->chunks, sizeof(SortChunk_t)*spec->sortInfo->fullChunkCount);
	BenFree((char**)&spec->sortInfo, sizeof(SortInfo_t));

	BenFree((char**)&spec->cpuSched, sizeof(Schedule_t));
	BenFree((char**)&spec->gpuSched, sizeof(Schedule_t));
	BenFree((char**)&spec, sizeof(Spec_t));

	d_keyChunkSize = 0;
	d_valChunkSize = 0;
	d_indexChunkSize = 0;

	//LeaveFunc("FinishMapReduce");
}

//-------------------------------------------------------
//for the ease to free key/val/index buffers in a chunk
//-------------------------------------------------------
void FreeChunk(ChunkInfo_t *chunk)
{
	BEN_ASSERT(chunk != NULL);
	BenFree((char**)&chunk->keys, chunk->keySize);
	BenFree((char**)&chunk->vals, chunk->valSize);
	BenFree((char**)&chunk->index, chunk->indexSize);
	BenFree((char**)&chunk->keyListRange, chunk->rangeSize);
	chunk->keySize = 0;
	chunk->valSize = 0;
	chunk->indexSize = 0;
	chunk->rangeSize = 0;
	chunk->diffKeyCount = 0;
	chunk->recCount = 0;
}

//========================================================
//Iterators
//========================================================
//--------------------------------------------------------
//input iterator
//--------------------------------------------------------
RecIterator_t *InitIterator(ChunkInfo_t *chunk, FileName_t *file, size_t totalRec, Spec_t *spec)
{
	RecIterator_t *it = (RecIterator_t*)BenMalloc(sizeof(RecIterator_t));
	
	//read from file
	if (spec->mode & USE_FILE)
	{
		it->file = file;
		it->chunk = chunk;
		it->totalRecCount = totalRec;
		it->chunkSize = spec->flushThreshhold;
	}
	//read from main memory
	else
	{
		it->chunk = chunk;
		it->totalRecCount = totalRec;
	}
	return it;
}

GroupIterator_t *InitGroupIterator(ChunkInfo_t *chunk, FileName_t *file, size_t totalGroup, Spec_t *spec)
{
	GroupIterator_t *it = (GroupIterator_t*)BenMalloc(sizeof(GroupIterator_t));
	//read from file
	if (spec->mode & USE_FILE)
	{
		it->file = file;
		it->chunk = chunk;
		it->chunkSize = spec->flushThreshhold;
		it->totalGroup = totalGroup;
	}
	//read from main memory
	else
	{
		it->chunk = chunk;
	}
	return it;
}

//---------------------------------------------------------
//get small chunk from file
//@param: totalRec -- total number of records in file
//@param: cursor -- current record cursor in index file
//@param: chunkSize -- the number of records to read
//---------------------------------------------------------
bool ReadChunkFromFile(ChunkInfo_t *chunk, FileName_t *file, 
					  size_t totalRec, size_t cursor, size_t chunkSize)
{
	BEN_ASSERT(file != NULL);

	if (cursor >= totalRec) return false;

	//get indexSize
	size_t recCount = chunkSize;
	if (recCount + cursor >= totalRec)
		recCount = totalRec - cursor;
	chunk->recCount = recCount;

	//read from index file
	size_t indexOffset = cursor * sizeof(int4);
	size_t indexSize = recCount * sizeof(int4);
	//chunk->index = (int4*)BenMalloc(indexSize);
	chunk->index = (int4*)BenReadFile(file->indexFile, indexOffset, indexSize);
	chunk->indexSize = indexSize;

	//get keySize & keyOffset & allocate key buffer
	size_t keyOffset = chunk->index[0].x;
	size_t keySize = chunk->index[recCount-1].x + 
		chunk->index[recCount-1].y - chunk->index[0].x;
	//chunk->keys = (char*)BenMalloc(keySize);
	chunk->keys = BenReadFile(file->keyFile, keyOffset, keySize);
	chunk->keySize = keySize;
	chunk->keyOffset = keyOffset;

	//get valSize & valOffset & allocate val buffer
	size_t valOffset = chunk->index[0].z;
	size_t valSize = chunk->index[recCount-1].z +
		chunk->index[recCount-1].w - chunk->index[0].z;
	//chunk->vals = (char*)BenMalloc(valSize);
	chunk->vals = BenReadFile(file->valFile, valOffset, valSize);
	chunk->valSize = valSize;
	chunk->valOffset = valOffset;

	return true;
}

//---------------------------------------------------------
//get small group chunk from file
//@param: totalRec -- total number of records in file
//@param: cursor -- current record cursor in index file
//@param: chunkSize -- the number of records to read
//---------------------------------------------------------
bool ReadGroupChunkFromFile(ChunkInfo_t *chunk, FileName_t *file, 
					  size_t totalGroup, size_t cursor, size_t chunkSize)
{
	BEN_ASSERT(file != NULL);

	if (cursor >= totalGroup) return false;

	//get indexSize
	size_t groupCount = chunkSize;
	if (groupCount + cursor >= totalGroup)
		groupCount = totalGroup - cursor;
	chunk->diffKeyCount = groupCount;

	//read from range file
	size_t rangeOffset = cursor * sizeof(int2);
	size_t rangeSize = groupCount * sizeof(int2);
	chunk->keyListRange = (int2*)BenReadFile(file->rangeFile, rangeOffset, rangeSize);
	chunk->rangeSize = rangeSize;

	//read from index file
	size_t recCount = chunk->keyListRange[groupCount-1].y - chunk->keyListRange->x;
	size_t indexOffset = chunk->keyListRange->x * sizeof(int4);
	size_t indexSize = recCount * sizeof(int4);
	chunk->index = (int4*)BenReadFile(file->indexFile, indexOffset, indexSize);
	chunk->indexSize = indexSize;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍视频在线观看一区二区| 精品国产制服丝袜高跟| 欧美一区二区三区喷汁尤物| 欧美日韩国产美女| 国产制服丝袜一区| 一区二区三区在线视频观看58| 欧美日韩一区三区| 国产精品美女久久久久av爽李琼| 成人自拍视频在线观看| 国产福利一区二区三区视频 | 久久久久国产免费免费| 欧美一区二区三区婷婷月色| 欧美成人aa大片| 亚洲图片你懂的| 日本一不卡视频| 国产成人精品综合在线观看| 国产精品妹子av| 精品久久久久久久久久久久久久久久久 | 一级特黄大欧美久久久| 三级久久三级久久| 国产乱子轮精品视频| 色94色欧美sute亚洲线路二| 91麻豆精品国产| 国产精品全国免费观看高清| 洋洋av久久久久久久一区| 久久精品国产99久久6| av中文字幕亚洲| 久久综合九色综合欧美98| 亚洲一区二区三区四区五区黄 | 欧美在线高清视频| 久久久www成人免费无遮挡大片 | 成人app在线观看| 欧美一区二区三区四区五区| 亚洲人成网站精品片在线观看| 麻豆91在线播放免费| 欧美另类高清zo欧美| 亚洲精品少妇30p| 91丨porny丨中文| 欧美国产欧美综合| 国产suv精品一区二区883| 久久久久久亚洲综合影院红桃 | 欧美电影一区二区| 国产欧美一区二区精品忘忧草| 青青草国产精品亚洲专区无| 色婷婷国产精品久久包臀| 亚洲日本中文字幕区| aaa欧美大片| 亚洲视频小说图片| 在线亚洲一区二区| 亚洲日本电影在线| 欧美日韩亚州综合| 久久疯狂做爰流白浆xx| 日韩欧美精品三级| gogogo免费视频观看亚洲一| 国产精品久线在线观看| 99久久久精品| 美女一区二区三区| 国产精品蜜臀av| 欧美日本在线观看| 风间由美性色一区二区三区| 亚洲色图视频网站| 日韩三级精品电影久久久| 国产精品一二三在| 亚洲成人动漫在线观看| 国产亚洲短视频| 91精选在线观看| 色婷婷国产精品| 国产精品一二三四| 日韩成人伦理电影在线观看| 国产色一区二区| 欧美人妇做爰xxxⅹ性高电影| 国产精品一区二区你懂的| 午夜不卡av在线| 一区二区欧美国产| 国产日韩欧美不卡在线| 欧美本精品男人aⅴ天堂| 色偷偷88欧美精品久久久| 狠狠色丁香久久婷婷综合丁香| 一区二区三区国产| 自拍偷拍国产精品| 国产精品电影院| 久久亚区不卡日本| 日韩一二三区视频| 日韩一区二区三区视频在线| 在线观看免费视频综合| 在线一区二区三区| 欧美人与性动xxxx| 欧美精品tushy高清| 在线视频国内自拍亚洲视频| 亚洲国产精品尤物yw在线观看| 国产人成一区二区三区影院| 精品国产三级a在线观看| 日韩欧美国产麻豆| 久久这里都是精品| 国产亚洲精品超碰| 亚洲精品视频在线| 午夜在线电影亚洲一区| 中文字幕一区av| 一区二区三区在线视频播放| 日韩综合一区二区| 国产成人自拍在线| 91黄色免费版| 91捆绑美女网站| 日韩毛片视频在线看| 久久久精品国产免费观看同学| 亚洲你懂的在线视频| 奇米888四色在线精品| 国产69精品一区二区亚洲孕妇| 色诱亚洲精品久久久久久| 日韩一区在线看| 久久成人免费电影| 欧美日韩免费观看一区二区三区 | 国产精品乱码一区二区三区软件| 亚洲另类在线视频| 国产69精品久久777的优势| 91精品午夜视频| 曰韩精品一区二区| 色综合天天综合网天天看片| 精品av久久707| 免费黄网站欧美| 欧美日韩国产成人在线免费| 国产精品电影一区二区| 风间由美一区二区三区在线观看| 日韩欧美一区电影| 免费在线观看日韩欧美| 91精品视频网| 国产中文一区二区三区| 欧美性感一类影片在线播放| 久久一区二区三区国产精品| 亚洲女人****多毛耸耸8| 日产国产高清一区二区三区 | 亚洲欧美日韩成人高清在线一区| 亚洲第一主播视频| 色综合咪咪久久| 国产精品色婷婷久久58| 国产精品中文有码| 久久综合999| 国产v综合v亚洲欧| 亚洲国产精品v| 在线一区二区三区| 亚洲精品视频在线看| 色88888久久久久久影院野外| 国产欧美一区二区三区网站| 成+人+亚洲+综合天堂| 一区二区激情视频| 欧美在线短视频| 亚洲h动漫在线| 国产精品无遮挡| 在线观看国产精品网站| 亚洲欧美日韩中文字幕一区二区三区| 国产一区不卡精品| 中文字幕五月欧美| 欧美成人猛片aaaaaaa| 国产91对白在线观看九色| 亚洲与欧洲av电影| 91 com成人网| 91久久精品国产91性色tv| 狠狠色丁香久久婷婷综| 午夜欧美大尺度福利影院在线看 | 国产精品视频看| 欧美片网站yy| 成人h动漫精品一区二区| 免费在线视频一区| 亚洲成av人影院在线观看网| 国产精品色哟哟| 欧美精彩视频一区二区三区| 欧美亚洲一区三区| av不卡在线播放| 成人黄色一级视频| 国产精品一区二区黑丝| 日韩精品亚洲一区二区三区免费| 久久久久久久网| 国产欧美精品一区| 国产日产欧美一区| 欧美一区二区三区啪啪| 色噜噜夜夜夜综合网| 91亚洲永久精品| 91麻豆福利精品推荐| 91蝌蚪porny九色| 色综合久久99| 欧美一区二区三区男人的天堂| 欧美一区二区三区在线| 精品嫩草影院久久| 日韩欧美aaaaaa| 国产精品美女久久久久久久| 亚洲激情中文1区| 亚洲成av人**亚洲成av**| 亚洲国产精品一区二区www| 午夜精品久久久久久久久久久| 免费看黄色91| 成人毛片视频在线观看| 日本久久电影网| 2020国产精品久久精品美国| 国产精品私人自拍| 一区2区3区在线看| 国产伦精品一区二区三区视频青涩 | 久久久精品影视| 亚洲国产精品久久人人爱| 国产一区二区三区四区五区美女| 91视频在线观看|