设置合适的核数和算子Kernel类型

在算子执行过程中,可能会因为以下几个原因产生额外的启动开销或者头开销:

  1. 核启动:每个核在启动时需要进行初始化操作,加载必要的配置和资源。
  2. 核取址TLB MISS:当核在访问内存时,如果Translation Lookaside Buffer(TLB)中没有对应的页表项,就需要从内存中加载页表项,这会导致额外的延迟。
  3. 同地址访问冲突:由于硬件限制,多个核同时访问相同的内存地址时可能会发生冲突,导致额外的时延。
  4. 变量资源初始化:在算子执行前,需要初始化一些变量和资源,这也可能带来额外的性能开销。

头开销会随着使用的核数增加而增加。下图展示了这部分头开销随启动核数的变化情况。

图1 头开销随启动核数的变化

对于整体耗时在微秒级别且单核计算量耗时较少的算子,可以通过减少启动核数并增加单核计算量的方式来获得性能提升。这种优化方式的本质是在头开销耗时和单核计算量耗时之间进行权衡。为了达到最佳性能,开发者需要通过实践尝试,找到最合适的核数设置。