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

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

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

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

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

 #include<stdio.h>
#include<cuda_runtime.h> //__global__声明的函数,告诉编译器这段代码交由CPU调用,由GPU执行
__global__ void mul(int *dev_a,const int NUM)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
int dis=blockDim.x * gridDim.x;
while(idx<NUM)
{
dev_a[idx]=dev_a[idx]%*dev_a[idx]*%;
idx+=dis;
}
} int main(void)
{
const int thread_pre_block = ; //每个block的线程数量
const int block_pre_grid = ; //grid中的block数量
const int NUM = ; //申请主机内存,并进行初始化
int host_a[NUM];
for(int i=;i<NUM;i++)
host_a[i]=i; //定义cudaError,默认为cudaSuccess(0)
cudaError_t err = cudaSuccess; //申请GPU存储空间
int *dev_a;
err=cudaMalloc((void **)&dev_a, sizeof(int)*NUM);
if(err!=cudaSuccess)
{
perror("the cudaMalloc on GPU is failed");
return ;
} //将要计算的数据使用cudaMemcpy传送到GPU
cudaMemcpy(dev_a,host_a,sizeof(host_a),cudaMemcpyHostToDevice); dim3 threads = dim3(thread_pre_block);
dim3 blocks = dim3(block_pre_grid); //使用event计算时间
float time_elapsed=;
cudaEvent_t start,stop;
cudaEventCreate(&start); //创建Event
cudaEventCreate(&stop); cudaEventRecord( start,); //记录当前时间
mul<<<blocks, threads, , >>>(dev_a,NUM);
cudaEventRecord( stop,); //记录当前时间 cudaEventSynchronize(start); //Waits for an event to complete.
cudaEventSynchronize(stop); //Waits for an event to complete.Record之前的任务
cudaEventElapsedTime(&time_elapsed,start,stop); //计算时间差 cudaMemcpy(&host_a,dev_a,sizeof(host_a),cudaMemcpyDeviceToHost); //计算结果回传到CPU cudaEventDestroy(start); //destory the event
cudaEventDestroy(stop);
cudaFree(dev_a);//释放GPU内存
printf("执行时间:%f(ms)\n",time_elapsed);
return ;
}

编译执行代码:

  

CUDA使用Event进行程序计时的更多相关文章

  1. Linux用户态程序计时方式详解

    前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序 ...

  2. C/C++/Java 程序计时功能函数

    编写程序肯定要使用计时功能,来判断程序的执行时间.今天Google了一下,自己就梳理总结一下: (1)C/C++程序计时 C/C++中使用的计时函数是clock(). C语言中的头文件对应是#incl ...

  3. Linux用户态程序计时方式详解[转]

    转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确 ...

  4. CUDA程序计时

    之前写的CUDA程序,想测量一下性能,网上很多用的是CPU端计时,很不准确.翻了一下书,发现这里应该使用事件来计时. CUDA中的事件本质上是一个GPU时间戳,这个时间戳是在用户指定的时间点上记录的. ...

  5. linux 和 windows下的程序计时

    Windows 使用<windows.h>中的GetTickCount(),该函数获得从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD. 转自:http://w ...

  6. matlab程序计时

    t1=datetime(); %程序 t2=datetime() totaltime=t2-t1; disp(t2-t1); 或者: tic %代码块 toc disp(['运行时间: ',num2s ...

  7. Linux下使用clock_gettime给程序计时

    http://www.cnblogs.com/daqiwancheng/archive/2010/07/01/1769522.html

  8. C/C++程序计时函数gettimeofday的使用

    linux 环境下 用 clock_t发现不准. 换用 //头文件 #include <sys/time.h> //使用timeval start, end;   gettimeofday ...

  9. 【Python】程序计时

随机推荐

  1. Typecho-反序列化漏洞学习

    目录 Typecho-反序列化漏洞学习 0x00 前言 0x01 分析过程 0x02 调试 0x03 总结 0xFF 参考 Typecho-反序列化漏洞学习 0x00 前言 补丁: https://g ...

  2. CentOS7.5 firefox Flash插件更新

    CentOS7自带的firefox没有flash插件,所以是没有办法在网页上看视频的,需要自己手动安装 1.下载 打开flash官网https://get.adobe.com/flashplayer/ ...

  3. Codeforces Round #300 E - Demiurges Play Again

    E - Demiurges Play Again 感觉这种类型的dp以前没遇到过... 不是很好想.. dp[u] 表示的是以u为子树进行游戏得到的值是第几大的. #include<bits/s ...

  4. 【Java】if判断boolean类型

    public class Test { public static void main(String[] args) { boolean i=false; boolean j=true; if(i=j ...

  5. vscode 解决vue emmet不起作用

    现在 vscode 自带的提示已经很好用了,大部分时间自带的提示展示的 emmet 内容已经是所需的了 在首选项 设置中配置 v1.15.1 之后需要这样设置: "emmet.trigger ...

  6. <c:if></c:if>用法-转载

    <c:if test="value ne, eq, lt, gt,...."> 用法 类别 运算符 算术运算符 + . - . * . / (或 div )和 % (或 ...

  7. Lambda演算(一)大道至简

    从选择信息专业开始到回炉读书为止,四舍五入码了八年代码.对于计算机科学的认知仅限于: 1)使用不同语言实现特定功能 2)实现不同算法以增进系统性能 3)搭建不同架构进行组织管理   但从未思考一些本质 ...

  8. AOP的自动代理

    Spring的aop机制提供两类方式实现类代理.一种是单个代理,一种是自动代理. 单个代理通过ProxyFactoryBean来实现(就如上面的配置). 自动代理:自动代理能够让切面定义来决定那个be ...

  9. 【BZOJ 2039】 2039: [2009国家集训队]employ人员雇佣 (最小割)

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1511  Solved: 728 Descri ...

  10. luoguP3750 [六省联考2017]分手是祝愿 概率期望DP + 贪心

    ...........真的神状态了,没办法去想的状态................... 考试的时候选择$50$分贪心+$15$分状压吧,别的点就放弃算了........ 令$f[i]$表示从最小步 ...