作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对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
上进行同步很重要,因为您要确保在计算时间之前一切都已执行。由于事件和内核都在同一流上(保留了顺序),因此
event1
和
kernel
也已执行。
cudaStreamSynchronize
或什至
cudaThreadSynchronize
,但在这种情况下,两者都显得过大。
关于timer - CUDA:cudaEvent_t和cudaThreadSynchronize用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801717/
我是一名优秀的程序员,十分优秀!