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

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

?? marsschedfile.cu

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

//-------------------------------------------------------
//for gpu only or cpu only
//-------------------------------------------------------
static void FillSortInfo(SortInfo_t *sortInfo, ChunkInfo_t *chunk)
{
	BEN_ASSERT(sortInfo != NULL);
	BEN_ASSERT(chunk != NULL);

	if (chunk->recCount <= 0 || chunk->diffKeyCount <= 0) return;

	size_t cur = sortInfo->realChunkCount;
	static size_t cursorOffset = 0;

	if (cur != 0) 
		sortInfo->chunks[cur].keyOffset = sortInfo->chunks[cur-1].keyOffset +
			sortInfo->chunks[cur-1].keySize;
	else
		sortInfo->chunks[cur].keyOffset = 0;
	sortInfo->chunks[cur].keySize = chunk->keySize;

	if (cur != 0) 
		sortInfo->chunks[cur].valOffset = sortInfo->chunks[cur-1].valOffset +
			sortInfo->chunks[cur-1].valSize;
	else
		sortInfo->chunks[cur].valOffset = 0;
	sortInfo->chunks[cur].valSize = chunk->valSize;

	if (cur != 0) 
		sortInfo->chunks[cur].indexOffset = sortInfo->chunks[cur-1].indexOffset +
			sortInfo->chunks[cur-1].indexSize;
	else
		sortInfo->chunks[cur].indexOffset = 0;
	sortInfo->chunks[cur].indexSize = chunk->indexSize;
	sortInfo->chunks[cur].recCount = chunk->recCount;

	if (cur != 0) 
		sortInfo->chunks[cur].rangeOffset = sortInfo->chunks[cur-1].rangeOffset +
			sortInfo->chunks[cur-1].rangeSize;
	else
		sortInfo->chunks[cur].rangeOffset = 0;
	sortInfo->chunks[cur].rangeSize = chunk->rangeSize;
	sortInfo->chunks[cur].diffKeyCount = chunk->diffKeyCount;
	sortInfo->chunks[cur].cursor = cursorOffset;
	cursorOffset += chunk->diffKeyCount;

	sortInfo->realChunkCount++;
	if (sortInfo->realChunkCount >= sortInfo->fullChunkCount)
	{
		sortInfo->chunks = (SortChunk_t*)BenRealloc(sortInfo->chunks, 
			sortInfo->fullChunkCount*sizeof(SortChunk_t),
			(sortInfo->fullChunkCount*2)*sizeof(SortChunk_t));
		sortInfo->fullChunkCount *= 2;
	}
}

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

	Schedule_t *sched = NULL;
	if ((spec->mode & GPU) &&
		!(spec->mode & CPU))
	{
		sched = spec->gpuSched;
		BenMemset(sched, 0, sizeof(Schedule_t));
		sched->gpuMapGridDim = spec->gpuMapGridDim;
		sched->gpuMapBlockDim = spec->gpuMapBlockDim;
		sched->gpuMapSharedMemSize = spec->gpuMapSharedMemSize;
	}
	else if (!(spec->mode & GPU) &&
			 (spec->mode & CPU))
	{
		sched = spec->cpuSched;
		BenMemset(sched, 0, sizeof(Schedule_t));
		sched->cpuMapThreadNum = spec->cpuMapThreadNum;
	}
	else
	{
		BenLog("Error: please use single processor!\n");
		return ;
	}

	while(spec->inputChunk->fileCursor < spec->totalInputRecCount)
	{
		ReadChunkFromFile(spec->inputChunk, &spec->inputFile, spec->totalInputRecCount,
			spec->inputChunk->fileCursor, spec->flushThreshhold);
		BenMemcpy(&(sched->inputSmallChunk), spec->inputChunk, sizeof(ChunkInfo_t));
		if (spec->mode & GPU)	
			StartGPUMap(sched, spec->mode);
		else
			StartCPUMap(sched, spec->mode);

		spec->inputChunk->fileCursor += spec->flushThreshhold;//spec->inputChunk->recCount;
		spec->inputChunk->keyOffset += spec->inputChunk->keySize;
		spec->inputChunk->valOffset += spec->inputChunk->valSize;

		if (!(spec->mode & MAP_ONLY))
		{
			RearrangeKeyVal(&(sched->outputSmallChunk));
			FillSortInfo(spec->sortInfo, &sched->outputSmallChunk);
			WriteChunkToFile(&(sched->outputSmallChunk), 
				&spec->interFile, &spec->totalInterRecCount, spec->mode);
		}
		else
		{
			WriteChunkToFile(&(sched->outputSmallChunk), 
				&spec->outputFile, &spec->totalOutputRecCount, spec->mode);
		}

		FreeChunk(&(sched->inputSmallChunk));
		sched->outputSmallChunk.recCount = 0;
	}
}

static void SwapFileName(FileName_t *file1, FileName_t *file2)
{
	char *tmp = NULL;

	tmp = file1->keyFile;
	file1->keyFile = file2->keyFile;
	file2->keyFile = tmp;

	tmp = file1->valFile;
	file1->valFile = file2->valFile;
	file2->valFile = tmp;

	tmp = file1->indexFile;
	file1->indexFile = file2->indexFile;
	file2->indexFile = tmp;

	tmp = file1->rangeFile;
	file1->rangeFile = file2->rangeFile;
	file2->rangeFile = tmp;
}

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

	if (spec->mode & MAP_SORT)
	{
		SwapFileName(&spec->interFile, &spec->outputFile);
		spec->totalOutputRecCount = spec->totalInterRecCount;
		MergeSortFile(&spec->outputFile, &spec->tmpFile, spec->sortInfo, 
			spec->flushThreshhold, &spec->totalOutputRecCount, &spec->totalDiffKeyCount);
		SwapFileName(&spec->outputFile, &spec->tmpFile);
		//!!!
		//delete tmpFile
		//!!!
	}
	else if (spec->mode & MAP_SORT_REDUCE)
	{
		MergeSortFile(&spec->interFile, &spec->tmpFile, spec->sortInfo, 
			spec->flushThreshhold, &spec->totalInterRecCount, &spec->totalDiffKeyCount);
		SwapFileName(&spec->interFile, &spec->tmpFile);
		//!!!
		//delete tmpFile
		//!!!
	}
}

static void SingleReduceFile(Spec_t *spec)
{
	BEN_ASSERT(spec);
	Schedule_t *sched = NULL;
	if ((spec->mode & GPU) &&
		!(spec->mode & CPU))
	{
		sched = spec->gpuSched;
		BenMemset(sched, 0, sizeof(Schedule_t));
		sched->gpuReduceGridDim = spec->gpuReduceGridDim;
		sched->gpuReduceBlockDim = spec->gpuReduceBlockDim;
		sched->gpuReduceSharedMemSize = spec->gpuReduceSharedMemSize;
	}
	else if (!(spec->mode & GPU) &&
			 (spec->mode & CPU))
	{
		sched = spec->cpuSched;
		BenMemset(sched, 0, sizeof(Schedule_t));
		sched->cpuReduceThreadNum = spec->cpuReduceThreadNum;
	}
	else
	{
		BenLog("Error: please use single processor!\n");
		return ;
	}

	while(spec->interChunk->fileCursor < spec->totalDiffKeyCount)
	{
		ReadGroupChunkFromFile(spec->interChunk, &spec->interFile, spec->totalDiffKeyCount,
			spec->interChunk->fileCursor, spec->flushThreshhold);
		
		BenMemcpy(&(sched->inputSmallChunk), spec->interChunk, sizeof(ChunkInfo_t));
		if (spec->mode & GPU)	
			StartGPUReduce(sched, spec->mode);
		else
			StartCPUReduce(sched, spec->mode);

		spec->interChunk->fileCursor += spec->flushThreshhold;//spec->inputChunk->recCount;
		spec->interChunk->keyOffset += spec->interChunk->keySize;
		spec->interChunk->valOffset += spec->interChunk->valSize;

		if (!(spec->mode & MAP_ONLY))
		{
			RearrangeKeyVal(&(sched->outputSmallChunk));
			//FillSortInfo(spec->sortInfo, &sched->outputSmallChunk);
		}
		WriteChunkToFile(&(sched->outputSmallChunk), 
			&spec->outputFile, &spec->totalOutputRecCount, spec->mode);

		FreeChunk(spec->interChunk);
		sched->outputSmallChunk.recCount = 0;
	}
}

static void SingleMergeOutputFile(Spec_t *spec)
{
	BEN_ASSERT(spec);
}

//-------------------------------------------------------
//for gpu and cpu co-processing
//-------------------------------------------------------
static void CoprocessMapFile(Spec_t *spec)
{
	BEN_ASSERT(spec != NULL);

	while(spec->inputChunk->fileCursor < spec->totalInputRecCount)
	{
		//read from file
		ReadChunkFromFile(spec->inputChunk, &spec->inputFile, spec->totalInputRecCount,
			spec->inputChunk->fileCursor, spec->flushThreshhold);

		//set up gpu schedule configuration
		BenMemset(spec->gpuSched, 0, sizeof(Schedule_t));
		spec->gpuSched->gpuMapGridDim = spec->gpuMapGridDim;
		spec->gpuSched->gpuMapBlockDim = spec->gpuMapBlockDim;
		spec->gpuSched->gpuMapSharedMemSize = spec->gpuMapSharedMemSize;
		BenMemcpy(&(spec->gpuSched->inputSmallChunk), spec->inputChunk, sizeof(ChunkInfo_t));
		spec->gpuSched->inputSmallChunk.recCount *= spec->gpuInputRatio;

		//set up cpu schedule configuration
		BenMemset(spec->cpuSched, 0, sizeof(Schedule_t));
		spec->cpuSched->cpuMapThreadNum = spec->cpuMapThreadNum;
		BenMemcpy(&(spec->cpuSched->inputSmallChunk), spec->inputChunk, sizeof(ChunkInfo_t));
		spec->cpuSched->inputSmallChunk.index += spec->gpuSched->inputSmallChunk.recCount;
		spec->cpuSched->inputSmallChunk.recCount -= spec->gpuSched->inputSmallChunk.recCount;

		//launch gpu and cpu processing
		BenThread_t tp[2];
		tp[0] = BenNewThread(gpuMapWorkerMem, (void*)spec);
		tp[1] = BenNewThread(cpuMapWorkerMem, (void*)spec);
		BenWaitForMul(tp, 2);
	
		//adjust cursors
		spec->inputChunk->fileCursor += spec->flushThreshhold;//spec->inputChunk->recCount;
		spec->inputChunk->keyOffset += spec->inputChunk->keySize;
		spec->inputChunk->valOffset += spec->inputChunk->valSize;

		PrintRecords(&(spec->gpuSched->outputSmallChunk), NULL,
				(spec->gpuSched->outputSmallChunk.recCount), spec, INT, INT, 100);

		PrintRecords(&(spec->cpuSched->outputSmallChunk), NULL,
				(spec->cpuSched->outputSmallChunk.recCount), spec, INT, INT, 100);
		//in memory merge to interChunk
		//unsorted
		if (spec->mode & MAP_ONLY)
		{
			MergeUnsortMem(spec->interChunk, 
				&spec->gpuSched->outputSmallChunk,
				&spec->cpuSched->outputSmallChunk);
		
			//write interChunk to output file
			WriteChunkToFile(spec->interChunk, 
				&spec->outputFile, &spec->totalOutputRecCount, spec->mode);	
		}
		//sorted
		else  if (spec->mode & MAP_SORT ||
				spec->mode & MAP_SORT_REDUCE)
		{
			MergeSortMem(spec->interChunk, 
				&spec->gpuSched->outputSmallChunk,
				&spec->cpuSched->outputSmallChunk);
			spec->interChunk->rangeSize = spec->interChunk->diffKeyCount*sizeof(int2);

			RearrangeKeyVal(spec->interChunk);
			FillSortInfo(spec->sortInfo, spec->interChunk);

			size_t bk = spec->interChunk->keyOffset;
			size_t bv = spec->interChunk->valOffset;
			spec->interChunk->keyOffset = 0;
			spec->interChunk->valOffset = 0;
			PrintRecords(spec->interChunk, NULL,
				spec->interChunk->recCount, spec, INT, INT, 100);
			spec->interChunk->keyOffset = bk;
			spec->interChunk->valOffset = bv;

			if (spec->mode & MAP_SORT_REDUCE)
			{
				WriteChunkToFile(spec->interChunk, 
					&spec->interFile, &spec->totalInterRecCount, spec->mode);
			}
			else if (spec->mode & MAP_SORT)
			{
				WriteChunkToFile(spec->interChunk, 
					&spec->outputFile, &spec->totalOutputRecCount, spec->mode);
			}
		}

		FreeChunk(spec->inputChunk);
		spec->inputChunk->recCount = 0;
		spec->gpuSched->outputSmallChunk.recCount = 0;
		spec->cpuSched->outputSmallChunk.recCount = 0;
	}//while*/
}

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

	if (spec->mode & MAP_SORT)
	{
		MergeSortFile(&spec->outputFile, &spec->tmpFile, spec->sortInfo, 
			spec->flushThreshhold, &spec->totalOutputRecCount, &spec->totalDiffKeyCount);
		SwapFileName(&spec->outputFile, &spec->tmpFile);
	}
	else if (spec->mode & MAP_SORT_REDUCE)
	{
		MergeSortFile(&spec->interFile, &spec->tmpFile, spec->sortInfo, 
			spec->flushThreshhold, &spec->totalInterRecCount, &spec->totalDiffKeyCount);
		SwapFileName(&spec->interFile, &spec->tmpFile);
	}
}

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

	//set up gpu schedule configuration
	while(spec->interChunk->fileCursor < spec->totalDiffKeyCount)
	{
		ReadGroupChunkFromFile(spec->interChunk, &spec->interFile, spec->totalDiffKeyCount,
			spec->interChunk->fileCursor, spec->flushThreshhold);

		BenMemset(spec->gpuSched, 0, sizeof(Schedule_t));
		spec->gpuSched->gpuReduceGridDim = spec->gpuReduceGridDim;
		spec->gpuSched->gpuReduceBlockDim = spec->gpuReduceBlockDim;
		spec->gpuSched->gpuReduceSharedMemSize = spec->gpuReduceSharedMemSize;
		BenMemcpy(&(spec->gpuSched->inputSmallChunk), spec->interChunk, sizeof(ChunkInfo_t));
		spec->gpuSched->inputSmallChunk.diffKeyCount *= spec->gpuInputRatio;
			
		//set up cpu schedule configuration
		BenMemset(spec->cpuSched, 0, sizeof(Schedule_t));
		spec->cpuSched->cpuReduceThreadNum = spec->cpuReduceThreadNum;
		BenMemcpy(&(spec->cpuSched->inputSmallChunk), spec->interChunk, sizeof(ChunkInfo_t));
		spec->cpuSched->inputSmallChunk.keyListRange += spec->gpuSched->inputSmallChunk.diffKeyCount;
		spec->cpuSched->inputSmallChunk.diffKeyCount -= spec->gpuSched->inputSmallChunk.diffKeyCount;

		//launch gpu and cpu processing
		BenThread_t tp[2];
		tp[0] = BenNewThread(gpuReduceWorkerMem, (void*)spec);
		tp[1] = BenNewThread(cpuReduceWorkerMem, (void*)spec);
		BenWaitForMul(tp, 2);

//		gpuReduceWorkerMem(spec);
//		cpuReduceWorkerMem(spec);

		spec->interChunk->fileCursor += spec->flushThreshhold;//spec->inputChunk->recCount;
		spec->interChunk->keyOffset += spec->interChunk->keySize;
		spec->interChunk->valOffset += spec->interChunk->valSize;

		MergeUnsortMem(spec->outputChunk, 
			&spec->gpuSched->outputSmallChunk,
			&spec->cpuSched->outputSmallChunk);

		WriteChunkToFile(spec->outputChunk, 
			&spec->outputFile, &spec->totalOutputRecCount, spec->mode);
		
		FreeChunk(spec->interChunk);
	}//while
}

static void CoprocessMergeOutputFile(Spec_t *spec)
{

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av电影免费在线播放| 日韩午夜三级在线| 97se亚洲国产综合自在线| 国产麻豆日韩欧美久久| 久久黄色级2电影| 久久99久久99| 国内一区二区视频| 国产精品一区二区免费不卡| 国产麻豆精品一区二区| 国产精品一品视频| 国产+成+人+亚洲欧洲自线| 国产999精品久久| eeuss鲁片一区二区三区在线看| 东方欧美亚洲色图在线| 99精品视频在线观看| 大陆成人av片| 91在线国内视频| 欧美色图激情小说| 欧美一区二区三区在线观看 | 亚洲少妇30p| 亚洲欧美另类小说| 亚洲老妇xxxxxx| 亚洲综合成人在线视频| 丝袜美腿亚洲综合| 韩国视频一区二区| fc2成人免费人成在线观看播放| 91精彩视频在线| 欧美一区二区二区| 久久久久久久综合色一本| 中文无字幕一区二区三区| 中文字幕一区二区三区在线观看 | 精品国产乱码久久久久久免费| 精品国产乱码久久久久久夜甘婷婷 | 日日嗨av一区二区三区四区| 麻豆视频一区二区| 成人小视频在线| 欧美性大战久久久久久久| 日韩视频一区二区在线观看| 国产日韩精品一区二区三区在线| 亚洲少妇中出一区| 久久成人羞羞网站| 99免费精品在线观看| 欧美日本韩国一区二区三区视频 | 亚洲乱码日产精品bd| 奇米色一区二区| 成人黄色777网| 欧美一区二区三区思思人| 国产农村妇女精品| 亚洲v日本v欧美v久久精品| 国产大陆a不卡| 欧美酷刑日本凌虐凌虐| 国产午夜精品久久| 午夜国产精品影院在线观看| 国产精品一品视频| 欧美二区三区的天堂| 中文字幕精品—区二区四季| 亚洲成人动漫精品| 成人美女在线观看| 欧美xxxxxxxx| 亚洲一区在线视频观看| 国产成人精品在线看| 91精品久久久久久久99蜜桃| 国产精品久久免费看| 精品一区二区影视| 欧美日韩国产另类一区| 国产精品午夜久久| 久久精品国产第一区二区三区| 色哟哟精品一区| 中文无字幕一区二区三区| 蜜臀av亚洲一区中文字幕| 91免费看`日韩一区二区| www国产精品av| 日韩精品视频网| 在线区一区二视频| 亚洲色图丝袜美腿| 粉嫩av一区二区三区粉嫩| 欧美一级午夜免费电影| 亚洲一二三专区| 9i在线看片成人免费| 久久精品一级爱片| 久久国产精品区| 欧美日韩国产小视频在线观看| 综合av第一页| 成人18视频日本| 国产欧美一区二区精品性色| 久草这里只有精品视频| 88在线观看91蜜桃国自产| 亚洲永久免费视频| 欧美这里有精品| 日韩毛片精品高清免费| 成人黄色av网站在线| 欧美国产丝袜视频| 国产福利一区二区三区在线视频| 精品国产乱码久久久久久蜜臀| 蜜桃视频第一区免费观看| 欧美日韩国产一二三| 亚洲1区2区3区视频| 欧美少妇性性性| 亚洲一二三四区不卡| 欧美视频在线一区二区三区 | 国产精品少妇自拍| 国产91精品精华液一区二区三区| 精品福利一二区| 极品少妇xxxx精品少妇偷拍| 日韩免费在线观看| 奇米色一区二区| www国产成人| 成人黄色软件下载| 亚洲欧洲日产国码二区| 91香蕉视频污| 一区二区三区中文字幕电影| 色偷偷88欧美精品久久久| 一区二区三区在线观看视频| 欧美亚男人的天堂| 日韩成人伦理电影在线观看| 日韩欧美国产一区二区在线播放| 美女国产一区二区| 久久女同精品一区二区| 国产乱人伦精品一区二区在线观看| 久久久五月婷婷| www.亚洲免费av| 亚洲激情一二三区| 欧美久久一区二区| 久久精品噜噜噜成人88aⅴ| 国产人妖乱国产精品人妖| 9色porny自拍视频一区二区| 一二三区精品福利视频| 欧美一区二区在线播放| 国产一区激情在线| 成人免费在线观看入口| 欧美性猛片aaaaaaa做受| 日本不卡在线视频| 久久久久久一级片| 色综合色综合色综合| 婷婷夜色潮精品综合在线| 欧美videos中文字幕| 成人在线综合网| 亚洲成av人片在www色猫咪| 日韩欧美一级片| 成人av影院在线| 亚洲成av人片在www色猫咪| 久久免费电影网| 欧美在线小视频| 国产精品一区久久久久| 亚洲一二三四区| 欧美成人一区二区三区| 99精品久久只有精品| 日韩电影在线一区| 国产精品国产三级国产aⅴ入口 | 精品毛片乱码1区2区3区| thepron国产精品| 日韩电影一区二区三区| 国产精品人人做人人爽人人添| 欧美日韩在线一区二区| 国产精品一区二区无线| 亚洲va欧美va国产va天堂影院| 国产日产欧美一区二区三区| 欧美日韩国产一二三| 成人国产免费视频| 美女在线观看视频一区二区| 亚洲欧美综合网| 欧美精品一区视频| 欧美日韩一区高清| 高清久久久久久| 免费视频最近日韩| 亚洲精品伦理在线| 久久久99精品久久| 欧美高清精品3d| 91麻豆蜜桃一区二区三区| 另类的小说在线视频另类成人小视频在线| 亚洲视频小说图片| 久久嫩草精品久久久精品一| 欧美精品丝袜久久久中文字幕| av亚洲精华国产精华精| 激情五月激情综合网| 亚洲高清三级视频| 亚洲人吸女人奶水| 国产日韩高清在线| 欧美成人伊人久久综合网| 在线电影欧美成精品| 91麻豆国产精品久久| 国产jizzjizz一区二区| 久久99国产精品成人| 日韩avvvv在线播放| 亚洲国产视频直播| 亚洲综合色噜噜狠狠| 亚洲欧洲精品一区二区三区| 久久久久久久久久久久电影| 欧美久久久影院| 欧美亚洲丝袜传媒另类| 91日韩在线专区| 99视频精品在线| 成人性色生活片| 成人黄色一级视频| 成人精品国产福利| 国产91精品入口| 成人18精品视频| 91视频精品在这里| 91麻豆国产自产在线观看| 91免费国产视频网站|