1

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

我的代码适用于N每个具有 32 个内核的块。

理想情况下,如果N <= 15,我希望,因为每个块都可以分配给不同的 SM,所以每个块的运行速度与单个块一样快。对于“N > 15”,随着块开始共享 SM,每个单独块的性能应该会衰减。如果maxocc是我的内核的最大占用率,那么性能应该停滞不前N > 15*maxocc,因为并非所有块都可以在 SM 上调度。

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

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

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

4

2 回答 2

3

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

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

在当前架构上,当内核运行时,CUDA 上下文独占使用所有 SM。

于 2012-05-08T00:24:09.703 回答
1

一堆猜测如下:

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

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

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

于 2012-05-07T22:35:44.537 回答