我知道 XLA 为计算图执行自动内核融合,这在减少 GPU 上的内存带宽使用方面很方便。将 XLA 用于 CPU 可以获得哪些收益?在融合计算而不将中间结果写入 L1 缓存时,原理是否相同?我将不胜感激外行的解释。
问问题
174 次
1 回答
2
是的,基本上就是你说的。
一般来说,作为编译器,您拥有的关于一组计算的信息(或“上下文”)越多,您就可以更好地优化它们。
正如XLA 页面中所指出的, XLA最重要的一个特性就是融合。它可以计算为单个融合乘加
操作,
而不是计算为两个单独的操作。
这不仅更快(通常),而且还避免了可能具有较小精度并需要存储在某处的中间结果。x + y*z
TensorFlow 模型的工作原理可能是从内存中获取一组数据并在其上执行一组定义的内核,将每个部分结果存储回内存中,以便下一个内核可以使用它。
使用 XLA,通过将一个或多个内核组合在一起,可以识别并进一步优化线性代数模式,从而避免不必要的内存来回。
现代主流 CPU 支持“向量”(行话:SIMD),有些确实像 GPU 一样支持 LA 操作。
所以是的,这是相同的原理(尽管 GPU 可以并行执行更多的 LA 操作,因此那里的增益更大)。
于 2020-11-13T14:35:04.923 回答