我刚刚在GPU上实现了一个算法,用于计算数组的连续索引差异.我将其与基于CPU的实现进行了比较,并注意到对于大型阵列,基于GPU的实现执行得更快.
我很好奇为什么基于GPU的实现执行得更快.请注意,我知道GPU有几个核心的表面推理因此可以并行操作,即,不是按顺序访问每个索引,我们可以分配一个线程来计算每个索引的差异.
但有人可以告诉我更深层次的原因,为什么GPU的表现更快.他们的架构有什么不同,他们可以击败基于CPU的实现
一般来说,它们的执行速度不快.
关键是:有些算法更适合CPU,有些算法更适合GPU.
GPU的执行模型不同(见SIMD),内存模型不同,指令集不同......整个架构不同.
没有明显的方法来比较CPU和GPU.您只能讨论算法的CPU实现A(以及为什么)比此算法的GPU实现B更快或更慢.
这最终变得模糊不清,因此具体原因的冰山一角将是:CPU的强大一面是随机存储器访问,分支预测等.当具有高数据局部性的大量计算时,GPU擅长,因此您的实现可以实现计算到内存访问的良好比例.例如,SIMD使GPU实现比CPU慢,因为对许多代码路径进行了大量无法预测的精确处理.