关于内核的执行顺序有什么提示吗?
假设我开始处理1024x1024的网格,工作组为8x8。我有1080个计算单元,每个计算单元128个核心-总共2560个核心。
现在很明显,平均每个物理核心将在网格中平均处理大约400个项目。问统计上每个核心的执行顺序是什么?会是大排的吗?列主要或每个核心将有自己的“分区”来工作?
为了确保内存访问是高速缓存友好的,这个问题很重要。
发布于 2018-06-01 01:55:08
假设我开始处理1024x1024的网格,工作组为8x8。我有1080个计算单元,每个计算单元128个核心-总共2560个核心。
这不是一种有效的可视化GPU的方法。您有20个计算单元。就这样。“核心”实际上是一对(2x32)通道矢量算术逻辑单元,每个单元都有一个指令调度器和一个共享的L1缓存。
现在很清楚,平均每个物理核心将平均处理网格中的大约400个项目。
这并不符合以下几个原因。如何分配工作取决于您编写的代码和用来运行代码的执行参数。在核的输入大小和给定SM或SM中的“核心”将执行的并行操作量之间没有内在关系。
问,从统计上讲,每个核心的执行顺序是什么?
未定义。CUDA对执行顺序不做任何保证,无论是暗示还是其他。
会是row major吗?纵队专业..?
仍然没有定义。
或每个核心会有自己的“分区”来工作吗?
由程序员来定义编程模型所展示的逻辑线程/块编号方案如何映射到输入数据或存储器的特征。
为了确保内存访问是高速缓存友好的,这个问题很重要。
GPU有一个分层的缓存设计,这意味着它实际上并不像你想象的那样重要。对于确保最大的内存吞吐量和缓存利用率,有详细的编程指导原则。它们不会像你的问题所暗示的那样受到执行顺序的影响。
https://stackoverflow.com/questions/50617580
复制相似问题