我知道,当使用计算着色器时,调用应该按照硬件最小工作组大小的倍数(Nvidia 32,AMD 64)进行分组。否则核心就会被封锁。在不需要调用之间通信的情况下,使用比最小工作组大小32或64更大的工作组大小是否有意义?
假设我们有320个粒子,需要计算。没有碰撞检测,他们之间没有通讯..。我们正在研制一台Nvidia机器。创建一个包含320次调用的工作组,而不是使用10次调用32次的工作组,是否会提高性能?
或者换一种说法,除了使用共享内存的能力之外,工作组的大小有什么不同吗?
使用较小的工作组大小有好处吗?
发布于 2023-04-29 00:03:13
在您的具体示例中,在没有竞争条件的情况下,只要工作组大小是体系结构要求的倍数(波前/翘曲),就不会有任何差别,因为GPU /驱动程序将按照它认为合适的时间安排,而且在所有类似的情况下,GPU在这两种情况下都将完全饱和。
但是,如果特定的着色器计算量很大(每个着色器做了很多),或者它们是不平衡的wrt到工作负载(组中的一次调用比组/其他组的其他组花费的时间长得多,“延迟”了该组的完成),这可能会在单个调度中调用大量工作组时触发TDR (超时、延迟和恢复)。
在这些场景中,最好是减轻每个着色器所做的工作(将算法拆分为更可消化的阶段,以便在工作组之间以及在所有工作组之间更好地平衡工作负载)和/或分派批,在批间刷新/整理,从而使操作系统保持愉快。当以广泛的硬件为目标以达到最佳性能时,平衡工作组计数与调度数量可能相当困难,并且可能需要在运行时进行“校准”/试运行,以推断安全批处理大小/工作组计数。
https://computergraphics.stackexchange.com/questions/13437
复制相似问题