CPU 上的 XLA——收益从何而来?
XLA on CPU -- where do the gains come from?
我了解 XLA 对计算图执行自动内核融合,这有助于减少 GPU 上的内存带宽使用。 CPU 使用 XLA 可以获得哪些收益?融合计算和不将中间结果写入 L1 缓存是否是相同的原理?我将不胜感激外行人的解释。
对,基本上就是你说的
一般来说,作为编译器,您掌握的有关一组计算的信息(或“上下文”)越多,您对它们的优化就越好。
正如 XLA page 中所指出的,XLA 最重要的一个特征是 融合。
与其将 x + y*z
计算为两个单独的操作,不如将其计算为单个 fused-multiply-add 操作。
这不仅(通常)更快,而且还避免了精度可能较低且需要存储在某处的中间结果。
可能 TensorFlow 模型的工作原理是从内存中获取一组数据并对其执行一组定义的内核中的一个,将每个部分结果存储回内存中,以便下一个内核可以使用它。
使用 XLA,通过将一个或多个内核组合在一起来识别和进一步优化线性代数模式,避免不必要的内存来回。
现代主流 CPU 支持“向量”(行话:SIMD),有些像 GPU 一样支持 LA 运算。
所以是的,这是相同的原理(尽管 GPU 可以并行执行更多的 LA 操作,所以那里的增益更大)。
我了解 XLA 对计算图执行自动内核融合,这有助于减少 GPU 上的内存带宽使用。 CPU 使用 XLA 可以获得哪些收益?融合计算和不将中间结果写入 L1 缓存是否是相同的原理?我将不胜感激外行人的解释。
对,基本上就是你说的
一般来说,作为编译器,您掌握的有关一组计算的信息(或“上下文”)越多,您对它们的优化就越好。
正如 XLA page 中所指出的,XLA 最重要的一个特征是 融合。
与其将 x + y*z
计算为两个单独的操作,不如将其计算为单个 fused-multiply-add 操作。
这不仅(通常)更快,而且还避免了精度可能较低且需要存储在某处的中间结果。
可能 TensorFlow 模型的工作原理是从内存中获取一组数据并对其执行一组定义的内核中的一个,将每个部分结果存储回内存中,以便下一个内核可以使用它。
使用 XLA,通过将一个或多个内核组合在一起来识别和进一步优化线性代数模式,避免不必要的内存来回。
现代主流 CPU 支持“向量”(行话:SIMD),有些像 GPU 一样支持 LA 运算。
所以是的,这是相同的原理(尽管 GPU 可以并行执行更多的 LA 操作,所以那里的增益更大)。