07.给核函数计时

  在内核的性能转换过程中,了解核函数的执行需要多长时间是很有帮助并且十分关键的。衡量核函数性能的方法有很多。最简单的方法是在主机端使用一个CPU或GPU计时器来计算内核的执行时间。

1.用CPU计时器计时

  计时我们使用gettimeofday() 函数,是linux下的一个库函数,创建一个cpu计时器,从1970年1月1日0点以来到现在的秒数,需要头文件sys/time.h。

完整代码:https://github.com/dive-into-cuda

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

  接着使用cpuSecond函数来测试你的核函数,由于核函数调用与主机端程序是异步的,你需要用cudaDeviceSynchronize函数来等待所有的GPU线程运行结束。为了更好的测试,需要修改一下之前的程序。

  • 设置数据集大小来对一个有16M个元素的大向量进行测试
    int nElem = 1 <<24;
    
  • 由于GPU的可扩展性,你需要借助块和线程的索引来计算一个按行优先的数组索引i,并对核函数进行修改,添加限定条件(i<N)来检验索引值是否越界
    __global__ void sumArraysOnGPU(float *A, float *B, float *C, const int N)
    {
         
         
        int i = blockId.x * blockDim.x + threadIdx.x;
        if(i < N) 
        {
         
         
            C[i] = A[i] + B[i];
        }  
    }
    

在开始写计时代码之前,我们先来写一个头文件,放我们整个项目代码中常用的函数声明、宏定义、结构体定义等。文件名:include/utils.h

#ifndef _UTILS_H
#define _UTILS_H
#define CHECK(call)                                                             \
{
     
                                                                                    \
    const cudaError_t error = call;                                             \
    if (error != cudaSuccess)                                                   \
    {
     
                                                                                \
        printf("Error: %s:%d, ", __FILE__, __LINE__);                           \
        printf("code: %d, reason: %s\n", error, cudaGetErrorString(error));     \
        exit(1);                                                                \
    }                                                                           \
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值