假设我有两大功能.在单独的内核中编写它们并按顺序调用它们会更好吗,还是最好只编写一个内核?(我不想回读数据并在主机和设备之间强制形成).如果我想多次调用内核,速度会怎样?
tal*_*ies 11
需要考虑的一件事是寄存器压力对硬件利用率和性能的影响.
作为一般规则,大内核具有很大的寄存器占用空间.典型的OpenCL设备(即GPU)具有非常有限的寄存器文件大小,并且大内核可以导致较低的并发性(较少的并发warp/wavefronts),较少的延迟隐藏机会和较差的整体性能.另一方面,在大多数平台上,内核启动开销相当低,因此如果您的算法在执行的"阶段"之间没有大量的状态保存,则使用多个内核的代价可能相当低.
使用多个内核还有另一个好处 - 您可以免费获得所有工作单元之间的隐式同步.通常,这可以消除对原子内存操作和同步原语的需要,这可能对代码性能产生负面影响.
最终指南应该是衡量表现.对于这类事情,没有普遍的经验法则.基准测试是唯一可以确定的方法.
| 归档时间: |
|
| 查看次数: |
4608 次 |
| 最近记录: |