Abstract: 本文介绍CUDA核函数计时方法Keywords: gettimeofday,nvprof

开篇废话

继续更新CUDA,同时概率和数学分析也在更新,欢迎大家访问www.face2ai.com
昨天晚上开始折腾ubuntu,上一篇用腾讯云搭建服务器来调试CUDA,现在有机器了,所以装个ubuntu准备调试cuda,但是出现了下面的纠结问题,搞了将近五个多小时,才解决,首先我的笔记本是联想R720 1050Ti的显卡,安装ubuntu 16.04 发现源中的驱动安装好后,安装CUDA 9.1 local版本出现问题,没办法安装成功,以为是驱动问题,安装新的驱动也不行,于是想起来之前用的是17.04,打开镜像网站发现17.04已经不再支持了,找了old版本中,找到下载安装,发现没有源可以用,放弃,安装17.10,开机就出错,于是又退回16.04,安装自带的驱动,安装了cuda 9.0 run版,成功了,安装cmake,ssh-server,于是我们成功了:

编程模型中我们介绍了内存,线程相关的知识,接着我们启动了我们的核函数,这些只是大概的勾勒出CUDA编程的外貌,通过前几篇可以写出一般的可运行程序,但是想获得最高的效率,需要反复的优化,以及对硬件和编程细节的详细了解,怎么评估效率,时间是个很直观的测量方式。

用CPU计时

使用cpu计时的方法是测试时间的一个常用办法,我记得很有趣的一件事时,我们在写C程序的时候最多使用的计时方法是:

clock_t start, finish;
start = clock();
// 要测试的部分
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;

其中clock()是个关键的函数,“clock函数测出来的时间为进程运行时间,单位为滴答数(ticks)”;字面上理解CLOCKS_PER_SEC这个宏,就是没秒中多少clocks,在不同的系统中值可能不同。必须注意的是,并行程序这种计时方式有严重问题!如果想知道具体原因,可以查询clock的源代码(c语言标准函数)
这里我们使用gettimeofday() 函数

#include <sys/time.h>
double cpuSecond()
{struct timeval tp;gettimeofday(&tp,NULL);return((double)tp.tv_sec+(double)tp.tv_usec*1e-6);
}

gettimeofday是linux下的一个库函数,创建一个cpu计时器,从1970年1月1日0点以来到现在的秒数,需要头文件sys/time.h
那么我们使用这个函数测试核函数运行时间:

我把代码部分贴出来,完整的访问代码库:https://github.com/Tony-Tan/CUDA_Freshman

#include <cuda_runtime.h>
#include <stdio.h>
#include "freshman.h"__global__ void sumArraysGPU(float*a,float*b,float*res,int N)
{int i=blockIdx.x*blockDim.x+threadIdx.x;if(i < N)res[i]=a[i]+b[i];
}
int main(int argc,char **argv)
{// set up device.....// init data ......//timerdouble iStart,iElaps;iStart=cpuSecond();sumArraysGPU<<<grid,block>>>(a_d,b_d,res_d,nElem);cudaDeviceSynchronize();iElaps=cpuSecond()-iStart;// ......
}

完整内容参考https://face2ai.com/CUDA-F-2-2-核函数计时/

clock函数的时间单位_【CUDA 基础】2.2 核函数计时相关推荐

  1. clock函数的时间单位_PAT B1026:程序运行时间

    题目描述: 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间.这个时间单位是 ...

  2. Python time 模块time 函数的时间单位

    Python 中time 模块下的time 常用于计算函数运行的时间 import time starttime = time.time() xxx endtime = time.time() pri ...

  3. pwm一个时间单位_时间的换算单位是怎么换算的啊,秒,毫秒,微妙,纳秒等

    展开全部 常见时间单位换算: 1秒=1000毫秒(ms) 1秒=1,000,000 微秒62616964757a686964616fe58685e5aeb931333366303836(μs) 1秒= ...

  4. pwm一个时间单位_详解PWM原理、频率与占空比

    来源:csdn,作者:Z小旋 链接:https://blog.csdn.net/as480133937 什么是PWM 脉冲宽度调制(PWM),是英文"Pulse Width Modulati ...

  5. pwm一个时间单位_脉冲的单位是什么

    展开全部 脉冲是没有单位的. 脉冲是相对于连续信号在整个信号周期内短时间发生的e69da5e887aa3231313335323631343130323136353331333366306465信号, ...

  6. pwm一个时间单位_详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!...

    一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并 ...

  7. pwm一个时间单位_解读:什么是PWM“死区”?

    PWM是脉宽调制,在电力电子中,最常用的就是整流和逆变.这就需要用到整流桥和逆变桥.对三相电来说,就需要三个桥臂.以两电平为例,每个桥臂上有两个电力电子器件,比如IGBT.这两个IGBT不能同时导通, ...

  8. pwm一个时间单位_「硬见小百科」什么是PWM“死区”?

    原标题:「硬见小百科」什么是PWM"死区"? PWM是脉宽调制,在电力电子中,最常用的就是整流和逆变.这就需要用到整流桥和逆变桥.对三相电来说,就需要三个桥臂.以两电平为例,每个桥 ...

  9. python matlab 多条曲线 单位_【基础篇】MATLAB科研制图常用代码命令

    最近更新了不少关于数学建模算法与机器学习的博客,今天我来写写关于科研制图的MATLAB常用命令,众所周知,在未来的科研生涯中,只要是学工科的同学们,MATLAB都是大家必学的工具之一,而发paper中 ...

最新文章

  1. 【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)
  2. 单轴步进驱动模块SH-20403
  3. eclipse生成java项目出错,Java项目使用了HttpClients相关包,用eclipse导出jar包就不能正常运行Error: A JNI error has occurred...
  4. 使用IDEA界面或者命令行进行git cherry-pick
  5. 列表ListView和列表选择框的使用编写步骤
  6. 记一次 Vue 移动端活动倒计时优化
  7. 让所有IE支持HTML5
  8. oracle比较两个表数据的差异
  9. 构造方法与对象的创建 java 1614780813
  10. 一文详解opencv摄像头数字识别
  11. 关于WM下创建和删除GPRS接入点
  12. 【Android】Android底层开发实战
  13. 字节跳动面试问题及答案java,字节跳动面试题+答案,全答对的30K以上
  14. ADI公司与B-Secur携手开发面向汽车工业的生物特征识别技术
  15. win10键锁定计算机,win10笔记本键盘win键被锁怎么解锁
  16. CSS flex属性深入理解
  17. 怎么美化Typora的标题格式
  18. 虚拟机的安装以及红帽子企业版5安装
  19. 高德地图marker标点数据量太大造成卡顿的解决方案
  20. 激光测距仪全国产化电子元件推荐方案

热门文章

  1. Unity3D的四种坐标系
  2. 201503-2-数字排序
  3. Linux命令解释之groupadd,groupdel,groupmod,groupmems
  4. 【python】一道LeetCode搞懂递归算法!#131分割回文串 #以及刷LeetCode的一点点小心得 [数据结构与算法基础]
  5. 【数据结构笔记37】表排序与物理排序
  6. 基于Verilog-HDL实现会呼吸的流水灯
  7. 前端 JavaScript 实现一个简易计算器
  8. linux启动找不到,pxe启动的时候找不到pxelinux.0的原因
  9. 微型计算机原理王道生,微型计算机电路基础大纲2010年
  10. JavaWeb——Mybatis逆向工程