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

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

?? simplestreams.cu.bak

?? md5_cuda編程
?? BAK
字號:
/*
 * This sample illustrates the usage of CUDA streams for overlapping
 * kernel execution with device/host memcopies.  The kernel is used to 
 * initialize an array to a specific value, after which the array is 
 * copied to the host (CPU) memory.  To increase performance, multiple 
 * kernel/memcopy pairs are launched asynchronously, each pair in its 
 * own stream.  Devices with Compute Capability 1.1 can overlap a kernel
 * and a memcopy as long as they are issued in different streams.  Kernels
 * are serialized.  Thus, if n pairs are launched, streamed approach
 * can reduce the memcopy cost to the (1/n)th of a single copy of the entire
 * data set.
 *
 * Additionally, this sample uses CUDA events to measure elapsed time for
 * CUDA calls.  Events are a part of CUDA API and provide a system independent
 * way to measure execution times on CUDA devices with approximately 0.5 
 * microsecond precision.
 *
 * Elapsed times are averaged over nreps repetitions (10 by default).
 *
*/

#include <stdio.h>
#include <cutil.h>

#include "include.cu"
#include "string.h"

__host__ void cpy_const_data_from_host_to_device();


extern unsigned char h_md5[16];

char g_input_md5[256];

///////////////////////////////////////////////////////////////////////////////////////////////////////////


int main(int argc, unsigned char *argv[])
{
    int nstreams = STREAM_NUM;               // number of streams for CUDA calls
    int nbytes = sizeof(int) *STREAM_NUM*THREAD_NUM*THREAD_BLK_NUM*OUTPUT_INT_NUM;   // number of data bytes
    dim3 threads, blocks;           // kernel launch configuration
    float elapsed_time=0;   // timing variables

    // check the compute capability of the device
    int num_devices=0;
    CUDA_SAFE_CALL( cudaGetDeviceCount(&num_devices) );
    if(0==num_devices)
    {
        printf("your system does not have a CUDA capable device\n");
        return 1;
	}
    cudaDeviceProp device_properties;
    CUDA_SAFE_CALL( cudaGetDeviceProperties(&device_properties, 0) );
    if( (1 == device_properties.major) && (device_properties.minor < 1))
        printf("%s does not have compute capability 1.1 or later\n\n", device_properties.name);
	
	printf("//////////////////// MD5 Crack by GPU ////////////////////////////\n");

	printf("Input 16-byte MD5 data array on a 5-char password ranging from 'A~Z,a~z,^-{\\}' : \n");
	memset(g_input_md5,0,sizeof(g_input_md5));

	/*
	
	do {
		int correct=1;
		//scanf_s("%32s", g_input_md5,32);
		scanf("%s", g_input_md5);
		if (strlen(g_input_md5)!=32)
		{
			printf("Wrong input!\n");
			correct=0;
			continue;
		}

		for (int i=0; i<32; i++)
			if (!((g_input_md5[i]>='A' && g_input_md5[i]<='F')
				|| (g_input_md5[i]>='a' && g_input_md5[i]<='f')
				|| (g_input_md5[i]>='0' && g_input_md5[i]<='9')))

			{
				printf("Wrong input!\n");
				correct=0;
				break;
			}

		if (correct)
			break;
	} while (1);

	char *endchar=0;

	for (int i=0; i<16; i++)
	{
		char input[3];
		input[0]=g_input_md5[i*2];
		input[1]=g_input_md5[i*2+1];
		input[2]=0;
		h_md5[i] = strtoul(input,&endchar, 16); 
	}
	*/

	for (int i=0; i<16; i++)
		printf("%02x", h_md5[i]);
	printf("\n");
	printf("ThreadNum=%d, MD5CountPerThread=%d(K)\n", THREAD_NUM, NUM_PER_THREAD/1024); 
	printf("ThreadBlockNum=%d Stream Number=%d\n", THREAD_BLK_NUM, STREAM_NUM);
	printf("ChannelNum(ThreadNum*ThreadBlockNum)=%d(K)\n", THREAD_NUM*THREAD_BLK_NUM/1024);
	printf("TotalNumber(ChannelNum*MD5CountPerThread*StreamNum)=%d(M)\n", (NUM_PER_THREAD/1024)*(THREAD_NUM*THREAD_BLK_NUM/1024)*STREAM_NUM);

    // allocate host
    unsigned char *a = 0;                     // pointer to the array data in host memory
	unsigned char *out=0;
    // allocate host memory (pinned is required for achieve asynchronicity)
    CUDA_SAFE_CALL( cudaMallocHost((void**)&a, nbytes) );
	memset(a,0,nbytes);

    CUDA_SAFE_CALL( cudaMallocHost((void**)&out, nbytes) );
	memset(out,0,nbytes);

    // allocate and initialize an array of stream handles
    cudaStream_t *streams = (cudaStream_t*) malloc(nstreams * sizeof(cudaStream_t));
    for(int i = 0; i < nstreams; i++)
        CUDA_SAFE_CALL( cudaStreamCreate(&(streams[i])) );

    // create CUDA event handles
    cudaEvent_t start_event, stop_event;
    CUDA_SAFE_CALL( cudaEventCreate(&start_event) );
    CUDA_SAFE_CALL( cudaEventCreate(&stop_event) );

    // allocate device memory
    unsigned char *d_a = 0, *d_o = 0;             // pointers to data and init value in the device memory
    CUDA_SAFE_CALL( cudaMalloc((void**)&d_a, nbytes) );
    CUDA_SAFE_CALL( cudaMalloc((void**)&d_o, nbytes) );

	cudaMemset(d_a, 0, nbytes);
	cudaMemset(d_o, 0, nbytes);

	// Generate inputs
	//generate_input(a,nbytes);

	cpy_const_data_from_host_to_device();

    //////////////////////////////////////////////////////////////////////
    // time execution with nstreams streams
    threads=dim3(THREAD_NUM,1);
	blocks=dim3(THREAD_BLK_NUM,1);
    //memset(a, c, nbytes);     // set host memory bits to all 1s, for testing correctness
    //cudaMemset(d_a, 0, nbytes); // set device memory to all 0s, for testing correctness

	//generate_input(a,nbytes);

	clock_t start_clock_gpu, end_clock_gpu;
	start_clock_gpu = clock();

	cpy_const_data_from_host_to_device();

	for (int count=0; count<RUN_COUNT; count++)
	{

	cudaMemset(d_a, 0, nbytes); 
	cudaMemset(d_o, 0, nbytes); 

    cudaEventRecord(start_event, 0);
	// asynchronoously launch nstreams memcopies.  Note that memcopy in stream x will only
    //   commence executing when all previous CUDA calls in stream x have completed
    //for(int i = 0; i < nstreams; i++)
    //    CUDA_SAFE_CALL(cudaMemcpyAsync(d_a + i * nbytes / nstreams, a + i * nbytes / nstreams, nbytes / nstreams, cudaMemcpyHostToDevice, streams[i]));

    // asynchronously launch nstreams kernels, each operating on its own portion of data
    for(int i = 0; i < nstreams; i++)
	{
		MDString<<<blocks, threads, SHARED_MEM_SIZE, streams[i]>>>(count*nstreams+i, (unsigned int*)(d_a + i * nbytes / nstreams), 
			(unsigned int*)(d_o + i * nbytes / nstreams));
	}
    // check for any errors
    CUT_CHECK_ERROR("Kernel execution failed");

    // asynchronoously launch nstreams memcopies.  Note that memcopy in stream x will only
    //   commence executing when all previous CUDA calls in stream x have completed
    for(int i = 0; i < nstreams; i++)
        CUDA_SAFE_CALL(cudaMemcpyAsync(out + i * nbytes / nstreams, d_o + i * nbytes / nstreams, nbytes / nstreams, cudaMemcpyDeviceToHost, streams[i]));

	cudaEventRecord(stop_event, 0);
    cudaEventSynchronize(stop_event);
    CUDA_SAFE_CALL( cudaEventElapsedTime(&elapsed_time, start_event, stop_event) );

	end_clock_gpu = clock();

	unsigned int * output = (unsigned int *)(out);
	for (int i=0; i<STREAM_NUM*THREAD_NUM*THREAD_BLK_NUM*OUTPUT_INT_NUM; i=i+OUTPUT_INT_NUM)
	{
		if (output[i]!=0)
		{
			printf("ChannelID=%d MatchedCount=%d \nOffset=%d \n", i, ((output[i] & 0xFF000000)>>24), 
				(output[i] & 0xFFFFFF)-1);

			printf("Passowrd=%c%c%c%c%c\n", 
				output[i+OUTPUT_INT_NUM/2]&0xFF, (output[i+OUTPUT_INT_NUM/2]&0xFF00)>>8 , (output[i+OUTPUT_INT_NUM/2]&0xFF0000)>>16, 
				(output[i+OUTPUT_INT_NUM/2]&0xFF000000)>>24,
				output[i+1+OUTPUT_INT_NUM/2]&0xFF
				);

			if (((output[i] & 0xFF000000)>>24)>1)
			{
				printf("Offset=%d\n", output[i+1]-1);
				printf("Matched Passowrd=%c%c%c%c%c\n", 
					output[i+2+OUTPUT_INT_NUM/2]&0xFF, (output[i+2+OUTPUT_INT_NUM/2]&0xFF00)>>8 , (output[i+2+OUTPUT_INT_NUM/2]&0xFF0000)>>16, 
					(output[i+2+OUTPUT_INT_NUM/2]&0xFF000000)>>24,
					output[i+3+OUTPUT_INT_NUM/2]&0xFF
					);
			}
		}
	}

	printf("In progress ..., %d %% Completed, Elapsed Time %dms \n", (count+1)*100/RUN_COUNT, end_clock_gpu - start_clock_gpu );

	}; // for count

	//printf("Time calculated by CUDA clock function =%.2fms \n", elapsed_time  );
	//printf("Time calculated gotten by CPU clock function =%dms \n", end_clock_gpu - start_clock_gpu  );
	printf("Total Elapsed Time =%dms \n", end_clock_gpu - start_clock_gpu  );

    // release resources
    for(int i = 0; i < nstreams; i++)
        cudaStreamDestroy(streams[i]);
    cudaEventDestroy(start_event);
    cudaEventDestroy(stop_event);

    cudaFreeHost(a);
    cudaFree(d_a);
    cudaFreeHost(out);
    cudaFree(d_o);

    CUT_EXIT(argc, argv);

    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜电影在线| 丁香激情综合国产| 亚洲久草在线视频| 久久综合中文字幕| 欧美日韩电影在线| 91麻豆视频网站| 亚洲国产精品久久人人爱| 精品久久久久久久久久久久久久久久久 | 午夜精品久久久久久久| 精品乱人伦小说| 717成人午夜免费福利电影| 色94色欧美sute亚洲13| 国产成人啪午夜精品网站男同| 麻豆一区二区三区| 日本成人中文字幕在线视频| 亚洲成国产人片在线观看| 亚洲一区二区三区四区五区中文| 樱桃国产成人精品视频| 《视频一区视频二区| 国产精品久久久久久久久免费樱桃| 国产亚洲午夜高清国产拍精品 | 精品剧情在线观看| 91精品国产一区二区三区蜜臀| 欧洲另类一二三四区| 色婷婷综合五月| 色欧美乱欧美15图片| 91女厕偷拍女厕偷拍高清| 91色婷婷久久久久合中文| www.亚洲免费av| 99精品久久免费看蜜臀剧情介绍| 波多野结衣91| 色婷婷激情一区二区三区| 欧美色倩网站大全免费| 欧美日韩一区久久| 欧美一级电影网站| 久久在线观看免费| 中文字幕一区二区5566日韩| 18欧美亚洲精品| 一区二区三区中文字幕电影| 午夜精品福利视频网站| 五月天欧美精品| 国产尤物一区二区| 不卡在线视频中文字幕| 在线视频国内一区二区| 在线播放国产精品二区一二区四区| 日韩一区二区三区在线视频| 久久久亚洲精华液精华液精华液| 日韩美女视频一区二区| 亚洲第四色夜色| 国产剧情一区在线| 一本一本久久a久久精品综合麻豆| 欧美日韩综合在线免费观看| 精品日韩av一区二区| 国产精品对白交换视频| 国产精品成人在线观看| 国产精品国产馆在线真实露脸| 午夜精品久久一牛影视| 成人激情小说乱人伦| 日韩亚洲欧美在线| 一区二区视频在线看| 久久爱www久久做| 7777精品伊人久久久大香线蕉的| 亚洲综合久久久久| 成人高清免费在线播放| 欧美日韩另类一区| www精品美女久久久tv| 亚洲成人av资源| 成人免费高清在线| 精品国产一区二区三区不卡| 亚洲一区电影777| 91无套直看片红桃| 欧美激情在线一区二区三区| 性做久久久久久| 91小宝寻花一区二区三区| 欧美成人三级在线| 亚洲午夜电影在线观看| 菠萝蜜视频在线观看一区| 精品国产91久久久久久久妲己| 一区二区三区在线视频观看| 成人精品视频一区二区三区| 精品久久人人做人人爰| 日韩成人av影视| 欧日韩精品视频| 亚洲欧洲色图综合| 国产成人精品免费| 久久久综合视频| 国产一区二区按摩在线观看| 5858s免费视频成人| 亚洲五码中文字幕| 91丝袜高跟美女视频| 亚洲国产精品av| 国产成人av影院| 国产网红主播福利一区二区| 免费看日韩a级影片| 欧美日本韩国一区二区三区视频 | 韩国一区二区三区| 91精品国产综合久久精品app| 亚洲成人激情综合网| 91久久精品一区二区| 一区二区视频在线| 欧美亚洲免费在线一区| 夜夜精品视频一区二区| 在线一区二区三区做爰视频网站| 亚洲欧美激情一区二区| 一本一道综合狠狠老| 亚洲国产一区二区视频| 欧美视频精品在线| 日日骚欧美日韩| 日韩一区二区三区三四区视频在线观看| 亚洲一区二区欧美| 欧美精品久久99久久在免费线| 五月天激情综合| 欧美mv日韩mv国产| 国产精品一区二区视频| 国产精品二区一区二区aⅴ污介绍| 91美女精品福利| 免费黄网站欧美| 国产蜜臀97一区二区三区| 91在线看国产| 视频在线在亚洲| 精品国产123| 99久久久久久| 日韩专区中文字幕一区二区| 久久亚洲影视婷婷| 99精品久久久久久| 偷拍一区二区三区四区| 久久综合九色综合97婷婷女人| 成人一级视频在线观看| 一区二区激情小说| 日韩美女视频在线| 99re这里都是精品| 全国精品久久少妇| 国产精品久线观看视频| 欧美巨大另类极品videosbest| 韩国三级电影一区二区| 亚洲欧美日韩在线不卡| 26uuu国产一区二区三区| 92精品国产成人观看免费| 免费日本视频一区| 18欧美亚洲精品| 久久久蜜臀国产一区二区| 欧美三级电影精品| 波多野结衣一区二区三区| 蜜桃久久av一区| 亚洲男人天堂av| 久久精品一区八戒影视| 欧美亚洲另类激情小说| 成人av在线资源| 免费的成人av| 亚洲综合免费观看高清完整版| 国产精品区一区二区三区| 欧美一卡在线观看| 欧美在线播放高清精品| 成人高清免费在线播放| 国产中文字幕精品| 日本最新不卡在线| 洋洋成人永久网站入口| 中文字幕av不卡| 久久女同互慰一区二区三区| 777午夜精品免费视频| 欧美视频完全免费看| 色屁屁一区二区| 成人app在线| 成人一区二区视频| 国产精品亚洲成人| 国产在线精品国自产拍免费| 天天爽夜夜爽夜夜爽精品视频| 一区二区三区四区精品在线视频| 国产精品亲子乱子伦xxxx裸| 久久久亚洲精华液精华液精华液| 精品国产乱码久久久久久久 | 婷婷国产在线综合| 亚瑟在线精品视频| 一区二区三区四区精品在线视频 | 精品不卡在线视频| 欧美tickling网站挠脚心| 欧美一区二区三区免费观看视频 | 欧美亚洲禁片免费| 欧美精品精品一区| 91精品国产综合久久国产大片| 欧美一级日韩免费不卡| 日韩欧美中文字幕公布| 日韩欧美美女一区二区三区| 日韩亚洲欧美综合| 久久新电视剧免费观看| 精品少妇一区二区三区视频免付费| 日韩欧美亚洲一区二区| 久久亚洲综合色一区二区三区| 久久久久久久综合色一本| 国产亚洲欧美日韩在线一区| 国产精品网站导航| 亚洲精品成人悠悠色影视| 一区二区在线观看视频| 日韩主播视频在线| 国内偷窥港台综合视频在线播放| 99精品欧美一区二区蜜桃免费 | 日韩精品三区四区| 成人av免费在线播放| 日韩一区二区精品| 亚洲视频香蕉人妖|