用cuda写循环反而速度变慢了

为什么我用cuda写for循环运行反而变慢了,不如直接用C语言快
2025-05-11 02:16:10
推荐回答(1个)
回答1:

你好,


出现这种问题通常有两个原因:


  1. 你的问题的规模不足以体现GPU的并行运算性能。

    GPU用成千上万个线程的吞吐量来(throughput)来进行速度的提升,但是其中每一个线程的运算功能要比CPU差很多。所以,如果你的for循环的次数很少的话,CUDA是不会有CPU快的,CPU很擅长处理循环。你可以试着增多循环次数来测量加速比。

  2. CUDA在第一次运行的时候是需要消耗一定的时间做初始化。

    CUDA是一个runtime的库,你的第一条CUDA语句所消耗的时间要远大于后面的语句,因为第一条语句调用的同时也初始化了CUDA的运行环境。所以你在测试间的时候需要出去第一条语句。一般统计时间只统计kernel的运行时间,也就是说所有的初始化和内存分配时间都不算进去。而且,统计CUDA的时间一般用cudaEvent_t,

    cudaEvent_t start,stop;
    cudaEventCreate(&start);
    cudaEventCreate(&stop);
    
    cudaEventRecord(start);
    //你要测试的kernel
    cudaEventRecord(stop);
    
    float time;
    cudaEventElapsedTime(&time, start, stop);

一般就是这两个问题,


谢谢,望采纳