gpt4 book ai didi

timer - CUDA:cudaEvent_t和cudaThreadSynchronize用法

转载 作者:行者123 更新时间:2023-12-04 13:29:09 24 4
gpt4 key购买 nike

我对cudaEvent_t的用法有些困惑。当前,我正在使用像这样的clock()调用来查找内核调用的持续时间:

cudaThreadSynchronize();
clock_t begin = clock();

fooKernel<<< x, y >>>( z, w );

cudaThreadSynchronize();
clock_t end = clock();

// Print time difference: ( end - begin )

寻找更高分辨率的计时器,我正在考虑使用 cudaEvent_t。在使用 cudaThreadSynchronize()记下时间之前,我是否需要调用 cudaEventRecord()还是多余?

我问的原因是因为还有另一个调用 cudaEventSynchronize(),它似乎要等到事件记录下来。如果记录被延迟,那么在内核完成执行之后,计算出的时间差会不会显示出额外的时间?

最佳答案

实际上,还有更多的同步功能(cudaStreamSynchronize)。编程指南详细描述了其中的每一项。使用事件作为计时器基本上可以归结为:

//create events
cudaEvent_t event1, event2;
cudaEventCreate(&event1);
cudaEventCreate(&event2);

//record events around kernel launch
cudaEventRecord(event1, 0); //where 0 is the default stream
kernel<<<grid,block>>>(...); //also using the default stream
cudaEventRecord(event2, 0);

//synchronize
cudaEventSynchronize(event1); //optional
cudaEventSynchronize(event2); //wait for the event to be executed!

//calculate time
float dt_ms;
cudaEventElapsedTime(&dt_ms, event1, event2);

event2上进行同步很重要,因为您要确保在计算时间之前一切都已执行。由于事件和内核都在同一流上(保留了顺序),因此 event1kernel也已执行。

您可以改为调用 cudaStreamSynchronize或什至 cudaThreadSynchronize,但在这种情况下,两者都显得过大。

关于timer - CUDA:cudaEvent_t和cudaThreadSynchronize用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801717/

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