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

发布网友 发布时间:2022-04-24 14:41

我来回答

1个回答

热心网友 时间:2022-05-07 16:16

你好,


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


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

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

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);

一般就是这两个问题,


谢谢,望采纳

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com