【发布时间】:2015-07-01 03:01:02
【问题描述】:
从cuda cpu function - gpu kernel overlap,我知道如何同时执行gpu和cpu功能。但是这里有另一种情况,gpu和cpu函数必须串行执行,问题是当cpu被gpu内核执行阻塞时,cpu进程会挂起吗?如果是的话,cpu的占用率应该很低吧?
下面是我的cuda代码,很简单,仅供测试
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void kernel(float *d_data)
{
//dead loop
while(1)
{
*d_data = -1;
*d_data = 1/(*d_data);
*d_data = (*d_data) / (*d_data);
}
}
int main()
{
float *d_data;
cudaMalloc(&d_data, sizeof(float));
kernel << <1, 1 >> >(d_data);
//cpu process would be blocking here
float data;
cudaMemcpy(&data, d_data, sizeof(int), cudaMemcpyDeviceToHost);
printf("%f\n",data);
return 0;
}
使用top查看cpu占用率为100%
%Cpu10 : 75.1 us, 24.9 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
并且我已经确认我启动的 cpu 进程正在 Cpu10 上运行。
我错过了什么吗?我非常感谢您的帮助!
【问题讨论】: