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

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

?? marsscan.cu

?? GPU實現的MapReduce framework,對于學習并行編程和cuda平臺的編程方面有著極好的參考價值
?? CU
?? 第 1 頁 / 共 2 頁
字號:
    unsigned int address = __mul24(blockIdx.x, (blockDim.x << 1)) + baseIndex + threadIdx.x; 

    __syncthreads();
    
    // note two adds per thread
    g_data[address]              += uni;
    g_data[address + blockDim.x] += (threadIdx.x + blockDim.x < n) * uni;
}


inline bool 
isPowerOfTwo(int n)
{
    return ((n&(n-1))==0) ;
}

inline int 
floorPow2(int n)
{
#ifdef WIN32
    // method 2
    return 1 << (int)logb((float)n);
#else
    // method 1
    // int nf = (int)n;
    // return 1 << (((*(int*)&nf) >> 23) - 127); 
    int exp;
    frexp((double)n, &exp);
    return 1 << (exp - 1);
#endif
}

#define BLOCK_SIZE 256

int** g_scanBlockSums;
unsigned int g_numEltsAllocated = 0;
unsigned int g_numLevelsAllocated = 0;



void preallocBlockSums(unsigned int maxNumElements)
{
//    assert(g_numEltsAllocated == 0); // shouldn't be called 

    g_numEltsAllocated = maxNumElements;

    unsigned int blockSize = BLOCK_SIZE; // max size of the thread blocks
    unsigned int numElts = maxNumElements;

    int level = 0;

    do
    {       
        unsigned int numBlocks = 
            max(1, (int)ceil((int)numElts / (2.f * blockSize)));
        if (numBlocks > 1)
        {
            level++;
        }
        numElts = numBlocks;
    } while (numElts > 1);

    g_scanBlockSums = (int**) malloc(level * sizeof(int*));
    g_numLevelsAllocated = level;
    
    numElts = maxNumElements;
    level = 0;
    
    do
    {       
        unsigned int numBlocks = 
            max(1, (int)ceil((int)numElts / (2.f * blockSize)));
        if (numBlocks > 1) 
        {
            CUDA_SAFE_CALL(cudaMalloc((void**) &g_scanBlockSums[level++],  
                                      numBlocks * sizeof(int)));
        }
        numElts = numBlocks;
    } while (numElts > 1);

    CUT_CHECK_ERROR("preallocBlockSums");
}

void deallocBlockSums()
{
    for (int i = 0; i < g_numLevelsAllocated; i++)
    {
        cudaFree(g_scanBlockSums[i]);
    }

    CUT_CHECK_ERROR("deallocBlockSums");
    
    free((void**)g_scanBlockSums);

    g_scanBlockSums = 0;
    g_numEltsAllocated = 0;
    g_numLevelsAllocated = 0;
}

void saven_initialPrefixSum(unsigned int maxNumElements)
{
	if(g_numEltsAllocated == 0)
		preallocBlockSums(maxNumElements);
	else
		if(g_numEltsAllocated>maxNumElements)
		{
			deallocBlockSums();
			preallocBlockSums(maxNumElements);
		}
	
}

void prescanArrayRecursive(int *outArray, 
                           const int *inArray, 
                           int numElements, 
                           int level)
{
    unsigned int blockSize = BLOCK_SIZE; // max size of the thread blocks
    unsigned int numBlocks = 
        max(1, (int)ceil((int)numElements / (2.f * blockSize)));
    unsigned int numThreads;

    if (numBlocks > 1)
        numThreads = blockSize;
    else if (isPowerOfTwo(numElements))
        numThreads = numElements / 2;
    else
        numThreads = floorPow2(numElements);

    unsigned int numEltsPerBlock = numThreads * 2;

    // if this is a non-power-of-2 array, the last block will be non-full
    // compute the smallest power of 2 able to compute its scan.
    unsigned int numEltsLastBlock = 
        numElements - (numBlocks-1) * numEltsPerBlock;
    unsigned int numThreadsLastBlock = max(1, numEltsLastBlock / 2);
    unsigned int np2LastBlock = 0;
    unsigned int sharedMemLastBlock = 0;
    
    if (numEltsLastBlock != numEltsPerBlock)
    {
        np2LastBlock = 1;

        if(!isPowerOfTwo(numEltsLastBlock))
            numThreadsLastBlock = floorPow2(numEltsLastBlock);    
        
        unsigned int extraSpace = (2 * numThreadsLastBlock) / NUM_BANKS;
        sharedMemLastBlock = 
            sizeof(int) * (2 * numThreadsLastBlock + extraSpace);
    }

    // padding space is used to avoid shared memory bank conflicts
    unsigned int extraSpace = numEltsPerBlock / NUM_BANKS;
    unsigned int sharedMemSize = 
        sizeof(int) * (numEltsPerBlock + extraSpace);

#ifdef DEBUG
    if (numBlocks > 1)
    {
        assert(g_numEltsAllocated >= numElements);
    }
#endif

    // setup execution parameters
    // if NP2, we process the last block separately
    dim3  grid(max(1, numBlocks - np2LastBlock), 1, 1); 
    dim3  threads(numThreads, 1, 1);

    // make sure there are no CUDA errors before we start
    CUT_CHECK_ERROR("prescanArrayRecursive before kernels");

    // execute the scan
    if (numBlocks > 1)
    {
        prescan<true, false><<< grid, threads, sharedMemSize >>>(outArray, 
                                                                 inArray, 
                                                                 g_scanBlockSums[level],
                                                                 numThreads * 2, 0, 0);
        CUT_CHECK_ERROR("prescanWithBlockSums");
        if (np2LastBlock)
        {
            prescan<true, true><<< 1, numThreadsLastBlock, sharedMemLastBlock >>>
                (outArray, inArray, g_scanBlockSums[level], numEltsLastBlock, 
                 numBlocks - 1, numElements - numEltsLastBlock);
            CUT_CHECK_ERROR("prescanNP2WithBlockSums");
        }

        // After scanning all the sub-blocks, we are mostly done.  But now we 
        // need to take all of the last values of the sub-blocks and scan those.  
        // This will give us a new value that must be sdded to each block to 
        // get the final results.
        // recursive (CPU) call
        prescanArrayRecursive(g_scanBlockSums[level], 
                              g_scanBlockSums[level], 
                              numBlocks, 
                              level+1);

        uniformAdd<<< grid, threads >>>(outArray, 
                                        g_scanBlockSums[level], 
                                        numElements - numEltsLastBlock, 
                                        0, 0);
        CUT_CHECK_ERROR("uniformAdd");
        if (np2LastBlock)
        {
            uniformAdd<<< 1, numThreadsLastBlock >>>(outArray, 
                                                     g_scanBlockSums[level], 
                                                     numEltsLastBlock, 
                                                     numBlocks - 1, 
                                                     numElements - numEltsLastBlock);
            CUT_CHECK_ERROR("uniformAdd");
        }
    }
    else if (isPowerOfTwo(numElements))
    {
        prescan<false, false><<< grid, threads, sharedMemSize >>>(outArray, inArray,
                                                                  0, numThreads * 2, 0, 0);
        CUT_CHECK_ERROR("prescan");
    }
    else
    {
         prescan<false, true><<< grid, threads, sharedMemSize >>>(outArray, inArray, 
                                                                  0, numElements, 0, 0);
         CUT_CHECK_ERROR("prescanNP2");
    }
}

void prescanArray(int *outArray, int *inArray, int numElements)
{
    prescanArrayRecursive(outArray, inArray, numElements, 0);
}

int prefexSum( int* d_inArr, int* d_outArr, int numRecords )
{	
	preallocBlockSums(numRecords);
	prescanArray( d_outArr, d_inArr, numRecords );
	deallocBlockSums();	

	int* h_outLast = ( int* )malloc( sizeof( int ) );
	CUDA_SAFE_CALL( cudaMemcpy( h_outLast, d_outArr+numRecords-1, sizeof(int),
                                cudaMemcpyDeviceToHost) );
	int* h_inLast = ( int* )malloc( sizeof( int ) );
	CUDA_SAFE_CALL( cudaMemcpy( h_inLast, d_inArr+numRecords-1, sizeof(int),
                                cudaMemcpyDeviceToHost) );

	unsigned int sum = *h_outLast + *h_inLast;

	free( h_outLast );
	free( h_inLast );
	
	return sum;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91久久久久久久久| 国v精品久久久网| 欧美亚洲丝袜传媒另类| 亚洲裸体xxx| 欧美在线看片a免费观看| 日本aⅴ免费视频一区二区三区 | 日韩精品中文字幕在线不卡尤物 | 亚洲精品老司机| 555www色欧美视频| 国产成人免费在线视频| 中国色在线观看另类| 精品国产成人在线影院| 欧美亚洲国产一区二区三区va| 男女男精品网站| 亚洲mv大片欧洲mv大片精品| 国产日韩成人精品| 在线成人高清不卡| 在线影视一区二区三区| 顶级嫩模精品视频在线看| 秋霞成人午夜伦在线观看| 亚洲免费电影在线| 制服丝袜成人动漫| 欧美三级视频在线| 国产一区二区网址| 亚洲欧洲精品成人久久奇米网| 93久久精品日日躁夜夜躁欧美| 亚洲猫色日本管| 精品国产一区二区三区久久久蜜月 | 91福利视频在线| 亚洲国产美女搞黄色| 欧美中文一区二区三区| 日本亚洲天堂网| 亚洲第一主播视频| 久久久久国产精品免费免费搜索| 国产一区二区三区黄视频| 国产精品免费av| 久久男人中文字幕资源站| 色欧美日韩亚洲| 一区二区三区精品视频在线| 久久久av毛片精品| 在线亚洲一区二区| 久久av老司机精品网站导航| 中文字幕在线不卡国产视频| 国产aⅴ综合色| 午夜久久久影院| 欧美日韩中文另类| 日本午夜一本久久久综合| 中文字幕精品三区| 欧美精品自拍偷拍动漫精品| 国产风韵犹存在线视精品| 久久久亚洲高清| 欧美酷刑日本凌虐凌虐| 欧美又粗又大又爽| 欧美在线free| 欧美一区二区三区在| 日韩一区二区在线免费观看| 日韩三级av在线播放| 日韩丝袜情趣美女图片| 欧美tickling网站挠脚心| 99久久久精品| 欧美老肥妇做.爰bbww视频| 成人一道本在线| 91麻豆福利精品推荐| 欧美在线观看视频在线| 日韩视频国产视频| 国产精品欧美一区二区三区| 亚洲综合免费观看高清完整版 | 国产欧美中文在线| 一区二区在线电影| 成人av在线资源| 捆绑调教美女网站视频一区| 国产成人精品综合在线观看 | 91毛片在线观看| 欧美一区二区三区视频在线| 成人禁用看黄a在线| 91 com成人网| 亚洲精品欧美二区三区中文字幕| 久久99国产乱子伦精品免费| 91亚洲精品一区二区乱码| 国产98色在线|日韩| 欧美日韩在线观看一区二区 | 日韩一区二区三区四区| 中文字幕在线视频一区| 久久不见久久见中文字幕免费| 亚洲精品久久嫩草网站秘色| 成人黄色网址在线观看| 91精品国产免费| 亚洲人成网站精品片在线观看| 午夜电影久久久| 色婷婷一区二区| 亚洲天堂免费看| 一本到不卡免费一区二区| 9l国产精品久久久久麻豆| 欧美v日韩v国产v| 国产精品一区在线观看乱码| 久久综合色一综合色88| 免费成人在线网站| 精品国产乱码久久久久久久久| 午夜精品免费在线| 欧美高清视频不卡网| 麻豆国产欧美日韩综合精品二区| 91精品国产综合久久久久| 视频在线观看国产精品| 99国产一区二区三精品乱码| 色94色欧美sute亚洲线路二 | 成人av电影在线播放| 亚洲精品水蜜桃| 日韩欧美专区在线| 99久久99久久精品免费看蜜桃| ㊣最新国产の精品bt伙计久久| 99久久久免费精品国产一区二区| 一区二区三区在线观看国产| 欧美日韩国产不卡| 国产麻豆精品一区二区| 亚洲日本免费电影| 精品国产一区二区三区av性色| 不卡一区中文字幕| 男男gaygay亚洲| 自拍偷拍亚洲综合| 久久久久久亚洲综合影院红桃| 欧美亚洲愉拍一区二区| 成人视屏免费看| 午夜精品久久久久久久99樱桃 | 成人永久免费视频| 国产日韩欧美精品综合| 日韩一级视频免费观看在线| 欧美极品少妇xxxxⅹ高跟鞋| 欧美日韩精品是欧美日韩精品| 粉嫩欧美一区二区三区高清影视| 久久久久国产精品麻豆ai换脸 | 福利视频网站一区二区三区| 蜜臀av一区二区| 日本网站在线观看一区二区三区 | 一本久久精品一区二区| 91福利精品第一导航| 91福利视频网站| 99久久免费视频.com| av电影一区二区| 在线一区二区三区做爰视频网站| www.亚洲精品| 91日韩在线专区| 久久久久国产精品麻豆ai换脸| 日韩高清在线一区| 色婷婷久久99综合精品jk白丝| 久久久久久综合| 国产综合久久久久影院| 91精品婷婷国产综合久久竹菊| 中文字幕一区三区| 国产91精品精华液一区二区三区| 欧美一区二区播放| 亚洲成人av福利| 日韩一区二区三区视频| 日韩激情在线观看| 国产日韩欧美麻豆| 成人黄色免费短视频| √…a在线天堂一区| 色综合网站在线| 精品播放一区二区| 国产丶欧美丶日本不卡视频| 国产精品国产三级国产三级人妇| 成人毛片在线观看| 亚洲伊人色欲综合网| 精品精品国产高清a毛片牛牛 | 日韩一级精品视频在线观看| 午夜伊人狠狠久久| 精品国产免费一区二区三区四区| 国产一区二区三区免费观看| 亚洲精品欧美在线| 精品国产一二三| 欧美综合一区二区三区| 亚洲国产高清在线| 欧美日韩一二区| 国产成人午夜精品影院观看视频 | 色综合欧美在线| 黑人巨大精品欧美黑白配亚洲| 国产精品日韩成人| 精品免费视频一区二区| 色偷偷久久一区二区三区| 麻豆视频观看网址久久| 亚洲欧洲av一区二区三区久久| 69av一区二区三区| 91玉足脚交白嫩脚丫在线播放| 国内偷窥港台综合视频在线播放| 一区二区高清视频在线观看| 久久综合资源网| 日韩欧美一区二区免费| 欧美日韩国产综合草草| 欧美主播一区二区三区| 99国产精品久久久久| 国产成人高清在线| 韩国午夜理伦三级不卡影院| 免费看黄色91| 精品一二三四区| 国内久久精品视频| 国产精品一区二区三区乱码| 麻豆成人免费电影| 国产美女一区二区三区| 成人午夜在线播放| 99精品视频在线播放观看| 99精品久久99久久久久|