我目前正在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
设备的情况下停用视频输出?
答案 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中的主显卡。