显示驱动程序本身使用了哪些CUDA资源?

时间:2012-05-07 21:32:44

标签: cuda nvidia

我目前正在nVidia GTX 480上使用CUDA开发。根据规范,该卡有15个流式多处理器(SM),每个处理器有32个CUDA核心。

我的代码适用于N块,每块32个核心。

理想情况下,如果N <= 15,我会期望,因为每个块都可以分配给不同的SM,每个块的运行速度与单个块一样快。对于'N&gt; 15',当块开始共享SM时,每个块的性能应该衰减。如果maxocc是我的内核的最大占用率,则性能应该从N > 15*maxocc停滞,因为并非所有块都可以在SM上进行调度。

这也是我在实践中观察到的几乎:每个单独的块的性能从N = 12开始衰减,并且性能从N = 57开始停滞,即它好像有三个额外的块占用了SM。

我没有运行使用GTX 480的其他程序。但是,该卡连接到运行文本控制台的外部显示器,即不是X-windows。

现在提出问题:是否有人知道使用GTX 480驱动控制台是否占用CUDA资源?如果是这样,究竟有多少?我该如何避免这种情况,即如何在不完全停用CUDA设备的情况下停用视频输出?

2 个答案:

答案 0 :(得分:3)

CUDA架构并不保证在15 SM设备上每个SM将分配15个块。计算工作分配器可能将2个块分配给多个SM。 Parallel Nsight Instruction Statistics实验显示了每SM发射的Warps和每SM的活动周期的图表。在你的情况下,我相信你会发现分布是:9个SM有1个块,3个SM有2个块,3个SM没有块。

如果你启动少于SM计数块,那么你可以尝试通过将每个块的动态共享内存增加到1/2共享内存+ 1个字节来强制每个SM 1个块(这被指定为三重中的第三个参数)尖括号)。这将迫使每个SM占用一个块。如果您这样做并且正在尝试运行并发内核,则可能会影响并发性。

在当前体系结构上,当内核运行时,CUDA上下文独占所有SM。

答案 1 :(得分:1)

一系列猜测如下:

我猜测旧的CGA文本模式是模拟的,因此Fermi芯片上没有专用的硬件。然后,在每个vblank上,可能会调用一个着色器来呈现CGA文本缓冲区的当前状态。

我也猜测这些卡不支持当时使用的低分辨率或单色深度。结果是,为了呈现CGA文本,可能需要以60 FPS更新许多32位像素。

尝试的一件事是添加另一个图形卡或使用板载图形(如果可用),这样您就可以在没有连接显示器的情况下运行CUDA卡。如果您尝试这样做,请确保将非CUDA卡设置为PC BIOS中的主显卡。