CUDA使用Event进行程序计时
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进行程序计时的更多相关文章
- Linux用户态程序计时方式详解
前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序 ...
- C/C++/Java 程序计时功能函数
编写程序肯定要使用计时功能,来判断程序的执行时间.今天Google了一下,自己就梳理总结一下: (1)C/C++程序计时 C/C++中使用的计时函数是clock(). C语言中的头文件对应是#incl ...
- Linux用户态程序计时方式详解[转]
转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确 ...
- CUDA程序计时
之前写的CUDA程序,想测量一下性能,网上很多用的是CPU端计时,很不准确.翻了一下书,发现这里应该使用事件来计时. CUDA中的事件本质上是一个GPU时间戳,这个时间戳是在用户指定的时间点上记录的. ...
- linux 和 windows下的程序计时
Windows 使用<windows.h>中的GetTickCount(),该函数获得从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD. 转自:http://w ...
- matlab程序计时
t1=datetime(); %程序 t2=datetime() totaltime=t2-t1; disp(t2-t1); 或者: tic %代码块 toc disp(['运行时间: ',num2s ...
- Linux下使用clock_gettime给程序计时
http://www.cnblogs.com/daqiwancheng/archive/2010/07/01/1769522.html
- C/C++程序计时函数gettimeofday的使用
linux 环境下 用 clock_t发现不准. 换用 //头文件 #include <sys/time.h> //使用timeval start, end; gettimeofday ...
- 【Python】程序计时
随机推荐
- js_数组对象的浅克隆
如果再考虑更奇葩更复杂的情况,例如我们定义: var obj = [{ "a": { "a1": ["a11", "a12&q ...
- 【WPF】城市级联(XmlDataProvider)
首先在绑定的时候进行转换: public class RegionConverter : IValueConverter { public object Convert(object value, T ...
- 洛谷P3857 [TJOI2008]彩灯 [线性基]
题目传送门 彩灯 题目描述 Peter女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜.已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们.从数学的角度看,这一排彩灯的任何一 ...
- react篇章-React 组件-向组件传递参数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- 修复mysql
REPAIR TABLE TABLENAME 或 REPAIR TABLE TABLENAME USE_FRM
- Lisp em SCU - 4490 (强大的map用法)
Time Limit: 1000 MS Memory Limit: 131072 K Description There are two lists and they may be intersect ...
- 几何:pick定理详解
一.概念 假设P的内部有I(P)个格点,边界上有B(P)个格点,则P的面积A(P)为:A(P)=I(P)+B(P)/2-1. 二.说明 Pick定理主要是计算格点多边形(定点全是格点的不自交图形)P的 ...
- 【UOJ #206】【APIO 2016】Gap
http://uoj.ac/problem/206 对于T=1,直接从两端往中间跳可以遍历所有的点. 对于T=2,先求出最小值a和最大值b,由鸽巢原理,答案一定不小于\(\frac{b-a}{N-1} ...
- 【主席树】BZOJ3524-[Poi2014]Couriers
[题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. [思路 ...
- [CF115E]Linear Kingdom Races
[CF115E]Linear Kingdom Races 题目大意: 有\(n(n\le10^5)\)个物品,编号为\(1\sim n\).选取第\(i\)个物品需要\(c_i\)的代价.另外有\(m ...