造成CPU usage大增的原因?

加了下列一簡單的測試kernel:
global void Test( unsigned char* Dst)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
Dst[id] = 1;
}

launch kernel如下:
unsigned char* b;
cudaMalloc((void**)&b, sizeof(unsigned char)*1800);
for ( int k=0; k<10000; k++)
{
Test<<< 1800, 256 >>>(b);
}
cudaFree(b);

發現寫入device memory (Dst[id] = 1;) 會使得cpu usage大增; 但那不是在GPU上做的事嗎?!怎麼反而大大提升了CPU端的使用率了?!

可能是你启动的内核太多导致的,启动内核这个工作是CPU做的

試過把 Dst[id] = 1; 這行改為
int tmp;
tmp = Dst[id];
CPU usage就不會大增~~
也就是說,global memory read ok, 但 write to global memory就使得CPU usage大增~~
很奇怪…

不是这样的

如果你没有把结果写回到显存,那么中间相关的语句编译的时候就优化掉了
换句话说你的没有回写结果的kernel执行没有都是个问题

而你的程序一旦需要执行,那么就需要在循环中进行同步
CPU usage是由于与GPU同步造成的

原來如此…謝謝
請問有辨法在CPU等待GPU處理完成同步時,讓CPU idle而不佔cpu usage嗎?!
我試過 cudaThreadSynchronize()做不到,也沒看到能判斷是否完成同步的api,只有強制同步的api…
不經判斷就加入Sleep()指令是可以,但會拖慢速度…