统计C++程序运行时间

统计C++程序运行时间,第1张

前言

为了分析C++程序的效率,一个非常重要的指标就是其算法的运行时间,我们C++11提供了chrono库专门进行时间的测量,具体使用方法如下

chrono

首先我们要说明chrono库中有自己的chrono命名空间,且这个命名空间包含在std中,所以我们要使用他先指定在std命名空间中,再指定在chrono命名空间中,比如我们计算现在的时间是多少

#include 
std::chrono::high_resoulution_clock::now();

我们测算的基本思想是先统计当前时间,再在算法执行完毕后再统计一下当前时间,最后用chrono的内置转换函数,将其转换成我们想要的单位返回,最后输出,例子如下

#include 
#include 

using namespace std;

int main()
{
    auto start = chrono::high_resolution_clock::now();
   // do somthine 
    auto end = chrono::high_resolution_clock::now();
    auto ms = chrono::duration_cast< std::chrono::milliseconds>(start - end);
    
    cout << ms.count() << endl;

    return 0;

具体例子如下,我们写一个矩阵相乘算法, 矩阵相乘算法具体放到device(GPU)上执行

#include 
#include 
#include 

void
__global__
matrix_miltiple(int *a, int *b, int *c, int n){
    int row = blockIdx.y * blockDim.y + threadIdx.y; //每个block中的thread_id都是从0开始
    int col = blockIdx.x * blockDim.x + threadIdx.x;

    int temp = 0;

    if((row < n) && (col < n)){ //one thread iterate over matrix a's row and matrix b'x column
        for(int i = 0; i < n; i++) temp += a[row * n + i] * b[i * n + col];
    }

    c[row * n + col] = temp;
}

void
init_matrix(int *a, int n){
    for(int i = 0; i < n; i++){
        a[n] = rand() % 100;
    }
}

int
main(){
    //matrix size of row or col (1024)
    int n = 1 << 10;

    // size of matrix n * n (1024*1024)
    size_t bytes = n * n * sizeof(int);

    //host pointer
    int *h_a, *h_b, *h_c;

    //malloc host
    h_a = (int*)malloc(bytes);
    h_b = (int*)malloc(bytes);
    h_c = (int*)malloc(bytes);

    //device pointer 
    int *d_a, *d_b, *d_c;

    //alloc device mem
    cudaMalloc(&d_a, bytes);
    cudaMalloc(&d_b, bytes);
    cudaMalloc(&d_c, bytes);

    //init martrix
    init_matrix(h_a, n);
    init_matrix(h_b, n);

    //memcopy from host to device
    cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);
    cudaMemcpy(d_b, h_b, bytes, cudaMemcpyHostToDevice);

    //thread pre block
    int BLOCK_SIZE = 16;

    //how many block in each demension
    int GRID_SIZE = (int)ceil(n / BLOCK_SIZE);

    //开启二维
    dim3 grid(GRID_SIZE, GRID_SIZE);
    dim3 threads(BLOCK_SIZE, BLOCK_SIZE);

    //计时
    auto start = std::chrono::high_resolution_clock::now();

    matrix_miltiple<<<grid, threads>>>(d_a, d_b, d_c, n);

    //wait 
    cudaDeviceSynchronize();

    //copy back to host
    cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);

    //计时
    auto end = std::chrono::high_resolution_clock::now();

    //转换
    auto ms = std::chrono::duration_cast< std::chrono::milliseconds>(end - start);

    std::cout << ms.count() << "ms" << std::endl; 
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://outofmemory.cn/web/2990440.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-09-23
下一篇2022-09-23

随机推荐

  • 滑溜鱼片的做法

    原料:青鱼1尾(约500克),冬笋适量,鸡蛋2个,葱25克,植物油500克(约耗60克),姜、蒜各5克,精盐3克,料酒15克,淀粉30克,胡椒面1克,香油3克。一、鱼肉切片,冬笋切片,麻椒切块,小红辣椒切段。二、鱼片加入料酒,盐少许,蛋

    2023-02-03
    000
  • 阜字怎么读

    阜拼音:fù1、土山。2、(物资)多3、姓。详细释义:1、同本义阜陵(丘陵)、阜陆(高地)、阜丘(土山)、阜垤(小土丘)、土阜(土山)2、泛指山阜颠(山顶)、阜积(堆积如山)3、丰富富有阜财(财富殷盛)、阜康(富庶安康)

    2023-02-03
    100
  • 社保卡一卡通有什么功能

    社保一卡通有什么用功能一、查询信息社保卡是录入了用户的个人信息、社会保障关系等重要信息的,因此手持社保卡即可查询到自己的很多信息,也可用作身份证明,因此如果用户在高铁乘车等需要身份证的场合忘记携带身份证携带了自己的社保卡让伏纯也可进行使用。

    2023-02-03
    000
  • “禾”的组词有哪些?

    禾的组词有禾苗、 禾场、 霜禾、 禾晾、 禾草、 禾子、 禾麦、 禾桶、 禾主、 禾易、 禾娘、 禾髎、 禾乃、 命禾等。一、禾苗[hé miáo] 谷类作物的幼苗:一场春雨过后,田地里的禾苗长得绿油油的。二、禾场[hé cháng] 打稻

  • 孜怎么读?

    孜拼音:zī基本信息:部首:子、四角码:18440、仓颉:ndok86五笔:bty、98五笔:bty、郑码:YAMO统一码:5B5C、总笔画数:7基本解释:〔孜孜〕勤谨,不懈怠,如“孜孜不倦”、“孜孜以求”。扩展资料:常见组

  • “二”字的组词有哪些?

    一、二字的组词有二老、第二、二意、封二、二战、二线、二话、二婚、二胡、二房、二流、二毛、二黄、二审等。二、基本释义1、数目。一加一的 和。2、序数:一穷二白。3、两样:不二价。三、二字只有一个读音就是èr。扩展资料一、字形演变

    2023-02-03
    100
  • 巡特警是做什么的?

    一、巡特警主要的工作:1、为公安机关提供其他警种不具备的自动火力。2、参与处置严重暴力性犯罪事件。3、参与处置暴乱骚乱事件。4、参与重大活动的安全保卫任务。5、担负特定的巡逻执勤任务。6、为危难群众提供紧急救助服务。7、其他应

    2023-02-03
    100
  • 发票有什么作用?

    普通发票是相对于专用发票而言的,除了不能用于抵扣税金以外,普通发票和专用发票所起的作用是一样的。x0dx0ax0dx0a一、专用发票一般用于一般纳税人之间从事生产经营增值税应税项目使用;而普通发票则可以用于所有纳税人的所有经营活动,

    2023-02-03
    100
  • “邂逅”是什么意思啊!

    “邂逅”的意思是:没有相约而遇见【拼音】[ xiè hòu ]【出处】战国·孔子《诗·唐风·绸缪》:“今夕何夕,见此邂逅。”今天是个什么样的日子呀,让我看见如此的良辰美景呀【例子】我在街上跟一位分别了十多年的老同学邂逅相遇,两人都非

    2023-02-03
    100

发表评论

登录后才能评论

评论列表(0条)

    保存