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

显示器驱动程序本身使用哪些CUDA资源?,cuda,nvidia,Cuda,Nvidia,我目前正在与CUDA一起开发一个项目。根据规范,该卡有15个流式多处理器SM,每个处理器有32个CUDA内核 我的代码使用N个块,每个块有32个核 理想情况下,如果N 15*maxocc,因为并非所有块都可以在SMs上调度 这几乎也是我在实践中观察到的:每个单独块的性能在N=12时开始衰减,在N=57时性能停滞,即,好像有三个额外块占用SMs 我没有使用GTX 480运行的其他程序。但是,该卡连接到运行文本控制台的外部显示器,即非X-windows 现在问一个问题:有人知道使用GTX 480驱动

我目前正在与CUDA一起开发一个项目。根据规范,该卡有15个流式多处理器SM,每个处理器有32个CUDA内核

我的代码使用N个块,每个块有32个核

理想情况下,如果N 15*maxocc,因为并非所有块都可以在SMs上调度

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

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


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

下面是一系列猜测:

我猜旧的CGA文本模式是模拟的,所以在费米芯片上没有专用的硬件。然后,有可能在每个vblank处调用一个着色器来渲染CGA文本缓冲区的当前状态

我还猜测这些卡不支持当时使用的低分辨率,或者单色颜色深度。结果是,可能有很多32位像素必须以60 FPS的速度更新才能呈现CGA文本


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

下面是一系列猜测:

我猜旧的CGA文本模式是模拟的,所以在费米芯片上没有专用的硬件。然后,有可能在每个vblank处调用一个着色器来渲染CGA文本缓冲区的当前状态

我还猜测这些卡不支持当时使用的低分辨率,或者单色颜色深度。结果是,可能有很多32位像素必须以60 FPS的速度更新才能呈现CGA文本


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

CUDA体系结构不能保证在15 SM设备上每SM分配1个15块。计算工作分发服务器可能将2个块分发给多个SMs。并行Nsight指令统计实验显示了每个SM启动的扭曲图和每个SM的活动周期图。在你的情况下,我相信你会发现分布是:9条短信有1块,3条短信有2块,3条短信没有块

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


在当前的体系结构上,CUDA上下文在内核运行时独占使用所有SMs

CUDA体系结构不保证在15 SM设备上,15个块将被分配到每个SM 1个。计算工作分发服务器可能将2个块分发给多个SMs。并行Nsight指令统计实验显示了每个SM启动的扭曲图和每个SM的活动周期图。在你的情况下,我相信你会发现分布是:9条短信有1块,3条短信有2块,3条短信没有块

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


在当前的体系结构上,CUDA上下文在内核运行时独占使用所有SMs

谢谢你的回复!调度程序让SMs空闲似乎有点奇怪。关于它的工作原理,你有好的参考资料吗?由于我在非Windows计算机上,我无法使用Parallel Nsight自己验证此操作。我找不到此行为的参考。建议网格启动足够的工作来填充设备。如果启动未填充设备,则可能会出现一些调度工件。如果您对调查该行为感兴趣,则可以使用PTX特殊变量%smid see inline PTX sample创建每个SM软件计数器。在内核的开头
读取%smid,让每个扭曲或块原子地增加该SM的软件计数器。在向我的代码添加汇编程序调用以验证这一点之前,我真的很想知道nVidia是否在某个地方描述了这种行为,而不仅仅是预感。你有任何关于调度程序如何工作的消息来源吗?谢谢你的回复!调度程序让SMs空闲似乎有点奇怪。关于它的工作原理,你有好的参考资料吗?由于我在非Windows计算机上,我无法使用Parallel Nsight自己验证此操作。我找不到此行为的参考。建议网格启动足够的工作来填充设备。如果启动未填充设备,则可能会出现一些调度工件。如果您对调查该行为感兴趣,则可以使用PTX特殊变量%smid see inline PTX sample创建每个SM软件计数器。在内核开始时读取%smid,并让每个扭曲或块原子地增加该SM的软件计数器。在向我的代码添加汇编程序调用以验证这一点之前,我真的很想知道nVidia是否在某个地方描述了这种行为,而不仅仅是直觉。关于调度程序是如何工作的,你有任何消息来源吗?