cudaThreadSynchronize函数的CPU占有率

无心人_过过小日子 2009-05-19 12:42:38
加精
在启动一个计算时间较长的内核后,执行cudaThreadSynchronize()等待内核结束.
在等待中发现CPU的占用率一直是100%(双核CPU为50%).
平台:vista, SDK2.2.
大家的情况如何?是否也一样?说下情况及其平台吧.谢谢.
...全文
610 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 naughty_iori 的回复:]
NV没有公布细节,不过大概是这样的。这个问题很久以前就被提出来了,只不过一直没有解决。如果用driver API的话,在create context的时候有个参数可以设置等待的方式,大概是auto,pinned,yield,blocking几种方式,比如yield就是如果CPU需要进行其他计算,则sync就不会占用CPU,如果没有,则一直占用。blocking似乎是2.2才出来的,NV说可以在sy……
[/Quote]

这两天尝试了一下,使用sync效果不明显.而blocking有一定效果.代价是慢0.05ms左右.
henrynus 2010-01-27
  • 打赏
  • 举报
回复
原来如此,长见识了!谢谢
彭令鹏 2009-12-30
  • 打赏
  • 举报
回复
这个想不到会是这样结果啊,nvidia太赶时间了。。
[Quote=引用楼主 l7331014 的回复:]
在启动一个计算时间较长的内核后,执行cudaThreadSynchronize()等待内核结束.
在等待中发现CPU的占用率一直是100%(双核CPU为50%).
平台:vista, SDK2.2.
大家的情况如何?是否也一样?说下情况及其平台吧.谢谢.

[/Quote]
naughty_iori 2009-05-23
  • 打赏
  • 举报
回复
NV没有公布细节,不过大概是这样的。这个问题很久以前就被提出来了,只不过一直没有解决。如果用driver API的话,在create context的时候有个参数可以设置等待的方式,大概是auto,pinned,yield,blocking几种方式,比如yield就是如果CPU需要进行其他计算,则sync就不会占用CPU,如果没有,则一直占用。blocking似乎是2.2才出来的,NV说可以在sync的时候降低CPU LOADING,不过我们试过有一些效果,但效果不大。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qin_y_j 的回复:]
一般应该是这样的!
cudaThreadSynchronize()
{
while(!bGpuAllThreadJoined)
{
}
}
[/Quote]

就是在疑问是否是死循环等待结束(所以CPU是100%).呵呵.
qin_y_j 2009-05-21
  • 打赏
  • 举报
回复
一般应该是这样的!
cudaThreadSynchronize()
{
while(!bGpuAllThreadJoined)
{
}
}
  • 打赏
  • 举报
回复
谢谢Cyrosly提供的情况.

有其他不同的情况吗?
redhat4 2009-05-19
  • 打赏
  • 举报
回复
关注


.



人力资源
ssjja 2009-05-19
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶的
支持下。。。。。。。。。。。。




















7k7k.com射击小游戏
快打旋风
炸弹人
神奇小妖怪
ssjja 2009-05-19
  • 打赏
  • 举报
回复
Cyrosly 2009-05-19
  • 打赏
  • 举报
回复
CPU[0]:%100
CPU[1]:%1~%6
数据总量(128x128x64x42)*sizeof(float)

580

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧