gpt4 book ai didi

timer - 我们应该使用 cuda Event 来计时推力函数(例如排序)还是应该使用 cpu 计时器

转载 作者:行者123 更新时间:2023-12-02 06:21:16 25 4
gpt4 key购买 nike

我正在尝试对推力排序功能进行计时。目前,我正在使用 cuda 事件。但我很好奇 cuda 事件是否会给我错误的值(value)。这是因为,在我的电脑上,推力在 34 毫秒内对 GPU 中的 200 万个 float 进行排序。但这似乎太快了

我尝试了 CPU 和 GPU 时间并得到以下信息:

CPU(大约需要 36 毫秒)

__int64 ctr1 = 0 , ctr2 = 0 , freq = 0 ;
QueryPerformanceFrequency((LARGE_INTEGER *) &freq);
QueryPerformanceCounter((LARGE_INTEGER *) &ctr1);
thrust::sort(D.begin(),D.end());
// transfer data back to host
thrust::copy(D.begin(), D.end(), H.begin());
cudaThreadSynchronize(); // block until kernel is finished

QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);
double ans = ((ctr2 - ctr1) * 1.0 / freq);
printf("The time elapsed in milliseconds is %f\n",(ans*1000));

图形处理器

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
thrust::sort(D.begin(),D.end());

thrust::copy(D.begin(), D.end(), H.begin());
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime;
cudaEventElapsedTime(&elapsedTime , start, stop);
printf("time is %f ms", elapsedTime);

请告诉我哪个时间是正确的

谢谢

最佳答案

这两个时间从不同方面来说都是正确的。 CPU 计时将包括由 API 调用和同步引起的开销。如果您对这种开销感兴趣,您应该使用 CPU 定时器。

基于事件的计时隔离了 GPU 上的计时,并为您提供了 GPU 执行的时间。

CPU 和事件计时之间的其他区别是,如果 thrust::sort() 是从当前线程对 GPU 的第一次调用,则调用将需要设置 CUDA 上下文并为您提供包含上下文的计时设置。如果您使用基于事件的计时,您将不会遇到此问题,因为上下文将在调用 cudaEventCreate() 时设置。

如果您想为 GPU 算法计时以获得性能数据,最好的方法是使用基于事件的计时,同时在循环中多次运行算法。

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
for(int i=0; i < 100; i++){
thrust::sort(D.begin(),D.end());

thrust::copy(D.begin(), D.end(), H.begin());
}
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime;
cudaEventElapsedTime(&elapsedTime , start, stop);
printf("Avg. time is %f ms", elapsedTime/100);

关于timer - 我们应该使用 cuda Event 来计时推力函数(例如排序)还是应该使用 cpu 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937529/

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