mfa*_*mfa 12
组内的工作项将一起安排,并可以一起运行.由硬件和/或驱动程序来决定执行的实际并行程度.这有不同的原因,但一个非常好的原因是隐藏内存延迟.
在我的AMD卡上,"计算单元"分为16个4宽SIMD单元.这意味着技术上可以在组中同时运行16个工作项.建议我们在一个组中使用64个工作项的多个,以隐藏内存延迟.显然,他们不可能在确切的时间运行.这不是问题,因为大多数内核实际上都是内存限制的,因此调度程序(硬件)会将等待内存控制器的工作项交换出来,而"就绪"项则会获得计算时间.组中的实际工作项数由主机程序设置,并受CL_DEVICE_MAX_WORK_GROUP_SIZE限制.您需要尝试内核的最佳工作组大小.
当涉及到同步工作项时,cpu实现"更糟糕".只有尽可能多的工作项运行,因为您有可用于运行它们的核心.它们在cpu中表现得更顺序.
那么工作项目是否在同一时间运行?几乎从来没有真的.这就是为什么当我们想要确保它们在给定点暂停时我们需要使用障碍.
在(抽象)OpenCL执行模型中,是的,所有工作项并行执行,并且可能有数百万个.
在GPU内部,同一工作组的所有工作项必须在单个"核心"上执行.这对每个工作组的工作项数量设置了物理限制(256或512是最大值,但对于使用大量寄存器的大型内核,它可以更小).然后,所有工作组都安排在GPU的(通常为2到16个)核心上.
您可以同步工作组中的线程(工作项),因为它们都驻留在同一个核心中,但您不能同步来自不同工作组的线程,因为它们可能不会同时进行调度,并且可以执行在不同的核心上.
是的,工作组中可以有128个工作项,除非它消耗太多资源.为了达到最高性能,您通常希望在工作组中拥有尽可能多的线程(隐藏内存延迟需要至少64个,请参阅Vasily Volkov关于此主题的演示).
| 归档时间: |
|
| 查看次数: |
4719 次 |
| 最近记录: |