gpt4 book ai didi

c++ - CUDA 内核在第二次运行时运行得更快 - 为什么?

转载 作者:行者123 更新时间:2023-11-30 04:44:31 25 4
gpt4 key购买 nike

我正在用 CUDA 编写我的第一个真正的应用程序,我已经到了需要知道内核执行需要多长时间的地步。但是,如标题所述,我不明白为什么在多次运行内核的应用程序中,第二次 启动内核所花费的时间比再次启动所花费的时间短得多第一个。

例如,在下面的代码中:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <chrono>
#include <iostream>
#include <stdio.h>

void runCuda(unsigned int size);

__global__ void addKernel(const int arraySize)
{
1 + 1;
}

void doStuff(int arraySize)
{
auto t1 = std::chrono::high_resolution_clock::now();
addKernel <<<(arraySize + 31) / 32, 32 >>> (arraySize);
cudaDeviceSynchronize();
auto t2 = std::chrono::high_resolution_clock::now();

std::cout << "Duration: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << '\n';
cudaDeviceReset();
}

int main()
{
doStuff(1e6);
doStuff(1e6);

return 0;
}

内核只做了一些基本的加法,调用了一百万次。上面程序的输出通常是这样的:

Duration: 1072
Duration: 97

这两个数字发生变化,但始终保持在 1000 和 100 左右。事实上,同一个内核第二次运行得如此之快对我来说毫无意义。

最佳答案

程序启动第一个 Cuda 内核时会产生开销。当你检查内核的运行时间时,你应该首先启动一个空白内核

关于c++ - CUDA 内核在第二次运行时运行得更快 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57709333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com