小编Sla*_*a P的帖子

为什么较小的块大小(相同的总线程数)会暴露更多的并行性?

我正在阅读 Cheng 等人的《专业 CUDA C 编程》。并且有一些示例说明如何运行(非常简单的单行)内核,例如,<<<1024, 512>>>性能比<<<2048, 256>>>. 然后他们(多次)声明您可能已经预料到了这个结果,因为第二次运行有更多的块,因此暴露了更多的并行性。但我不明白为什么。并行度不是由 SM 中并发扭曲的数量决定的吗?块大小与此有什么关系 - 这些扭曲属于哪个块并不重要 - 相同的块或不同的块,那么为什么使用较小的块会暴露更多的并行性(相反,如果块大小太小我会达到每个 SM 的最大块限制,从而导致并发扭曲更少)?我能想象的唯一场景是 Fermi 上的 1024 个线程块 = 32 个扭曲,每个 SM 限制最多有 48 个并发扭曲。这意味着只有 1 个并发块,并且只有 32 个并发扭曲是可能的,从而减少了并行量,但这是一个非常具体的用例。

更新:发布后我想到的另一件事是:在块中的所有扭曲完成之前,不能将其从 SM 中驱逐。因此,在该块执行结束时,可能会出现这样的情况:最后几个“最慢”的扭曲将整个块保留在 SM 中,而该块中的大部分扭曲已完成并停止,但不能再创建新的块。加载直到那几个正在执行的扭曲完成。所以这种情况下效率就变低了。现在,如果块更小,那么这种情况仍然会发生,但是相对于执行扭曲的停滞数量更小,因此效率更高。是这个吗?

cuda

7
推荐指数
1
解决办法
1194
查看次数

CUDA中的"register"关键字

我有一个大程序,它使用我为每个线程分配的所有寄存器(64)并溢出到本地内存.我希望能够告诉编译器哪些变量应该不惜一切代价保留在寄存器中,以及哪些变量我并不关心."注册"C/C++关键字是否在nvcc中有效?是否有不同的机制?

谢谢!

cuda

6
推荐指数
1
解决办法
1097
查看次数

Qt(5):使用QtMultimedia在2个不同的表面上渲染相同的视频

我正在Qt(5)中开发一个应用程序,基本上我正在尝试使用QtMultimedia5将相同的视频源渲染到窗口中的2个位置.我在QML中这样做,但如果有一个C++解决方案,我会乐意实现它.

我在窗口中显示视频没有问题.当我尝试使用相同的QMediaSource但将其渲染到2个窗口/控件上时,问题就开始了.

我看到的是调用QMediaService :: requestControl,它返回一个QVideoRendererControl对象.然后调用QVideoRendererControl :: setSurface来设置它呈现视频的表面.因此,从我收集的内容来看,QMediaService在任何给定时间都有一个表面呈现视频.

如何渲染到2个或更多曲面?还有其他课程能更好地满足我的需求吗?

干杯

c++ qt qt5

4
推荐指数
1
解决办法
1103
查看次数

标签 统计

cuda ×2

c++ ×1

qt ×1

qt5 ×1