Glut和cuda每秒钟停留100毫秒

时间:2013-07-30 16:14:51

标签: opengl cuda glut freeglut nsight

我正在开展一个涉及cuda和freeglut的项目,我正试图从中获取尽可能多的果汁。

我有一个循环,可以进行一些计算然后绘制。我从nsight跟踪中注意到,每秒大约有100到200毫秒,似乎没有任何事情要做。这简直是​​不可接受的。我理想的是要消除这个失速,因为它让我只能尽可能快地达到80%-90%。

在第二秒开始时,失速不会发生在点上,但它会以非常规的间隔发生。

我的处理循环看起来像这样

cudaDeviceSynchronize();

kernel_call_1( ... , stream0);

if(T != 0) cudaStreamWaitEvent(stream1, event0, 0);
     cudaMemcpyAsync( ... ,cudaMemcpyDeviceToHost,stream1);


kernel_call_2( ... , stream0);
cudaEventRecord(event0, stream0);


drawGL( ... );

OpenGL是在一个与CUDA不同的卡上完成的,CUDA的输出通过该memcpy带到主机上,并通过glTexSubImage3D推送到OpenGL。

CUDA或OpenGL或FreeGLUT是否会在我背后做任何可能导致失速的问题?

编辑: 我注意到的其他事情,NSight区分了cpu和gpu帧。如果我看一下cpu帧,它们似乎慢慢与gpu同步。这种情况一直发生,直到失速,在这种情况下,单个cpu帧运行的时间很长,但是gpu帧继续以相同的速度运行并且它们将它们拉回同步状态。 OpenGL是否在我背后进行同步,是否有某种方法来控制这种行为?

编辑: 这是NSight跟踪的屏幕截图。 NSight Trace

0 个答案:

没有答案