热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CUDA使用Event进行程序计时

GPGPU是众核设备,包含大量的计算单元,实现超高速的并行。使用CUDA在nvidia显卡上面编程时,可以使用CUDA提供的Event进行

GPGPU是众核设备,包含大量的计算单元,实现超高速的并行。

使用CUDA在nvidia显卡上面编程时,可以使用CUDA提供的Event进行程序计时。

当然,每种编程语言基本都提供了获取系统时间的函数,如C/C++/Java 程序计时功能函数

Event可以统计GPU上面某一个任务或者代码段的精确运行时间。

如下面的程序实例(CalTime.cu):

1 #include
2 #include
3
4 //__global__声明的函数,告诉编译器这段代码交由CPU调用,由GPU执行
5 __global__ void mul(int *dev_a,const int NUM)
6 {
7 int idx = blockIdx.x * blockDim.x + threadIdx.x;
8 int dis=blockDim.x * gridDim.x;
9 while(idx<NUM)
10 {
11 dev_a[idx]&#61;dev_a[idx]%23*dev_a[idx]*5%9;
12 idx&#43;&#61;dis;
13 }
14 }
15
16 int main(void)
17 {
18 const int thread_pre_block &#61; 64; //每个block的线程数量
19 const int block_pre_grid &#61; 8; //grid中的block数量
20 const int NUM &#61; 45056;
21
22 //申请主机内存&#xff0c;并进行初始化
23 int host_a[NUM];
24 for(int i&#61;0;i)
25 host_a[i]&#61;i;
26
27 //定义cudaError&#xff0c;默认为cudaSuccess(0)
28 cudaError_t err &#61; cudaSuccess;
29
30 //申请GPU存储空间
31 int *dev_a;
32 err&#61;cudaMalloc((void **)&dev_a, sizeof(int)*NUM);
33 if(err!&#61;cudaSuccess)
34 {
35 perror("the cudaMalloc on GPU is failed");
36 return 1;
37 }
38
39 //将要计算的数据使用cudaMemcpy传送到GPU
40 cudaMemcpy(dev_a,host_a,sizeof(host_a),cudaMemcpyHostToDevice);
41
42 dim3 threads &#61; dim3(thread_pre_block);
43 dim3 blocks &#61; dim3(block_pre_grid);
44
45 //使用event计算时间
46 float time_elapsed&#61;0;
47 cudaEvent_t start,stop;
48 cudaEventCreate(&start); //创建Event
49 cudaEventCreate(&stop);
50
51 cudaEventRecord( start,0); //记录当前时间
52 mul<<0, 0>>>(dev_a,NUM);
53 cudaEventRecord( stop,0); //记录当前时间
54
55 cudaEventSynchronize(start); //Waits for an event to complete.
56 cudaEventSynchronize(stop); //Waits for an event to complete.Record之前的任务
57 cudaEventElapsedTime(&time_elapsed,start,stop); //计算时间差
58
59 cudaMemcpy(&host_a,dev_a,sizeof(host_a),cudaMemcpyDeviceToHost); //计算结果回传到CPU
60
61 cudaEventDestroy(start); //destory the event
62 cudaEventDestroy(stop);
63 cudaFree(dev_a);//释放GPU内存
64 printf("执行时间&#xff1a;%f(ms)\n",time_elapsed);
65 return 0 ;
66 }

编译执行代码&#xff1a;

  



推荐阅读
author-avatar
张浩杰_Hh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有