gpt4 book ai didi

tensorflow - 与 TensorFlow/cuDNN 中的 NHWC 相比,NCHW 快多少?

转载 作者:行者123 更新时间:2023-12-04 04:20:48 26 4
gpt4 key购买 nike

The official TensorFlow performance guide指出:

Most TensorFlow operations used by a CNN support both NHWC and NCHW data format. On GPU, NCHW is faster. But on CPU, NHWC is sometimes faster.



对于卷积,NCHW 与 TensorFlow/cuDNN 中的 NHWC 相比要快多少?是否有任何引用或基准?

另外,为什么它更快?据我了解(见 here),GPU 上 NHWC 的 TensorFlow 将始终在内部转置为 NCHW,然后调用 NCHW 的 cuDNN 转换内核,然后将其转置回来。但它为什么这样做呢? cuDNN conv 内核也适用于 NHWC。也许在某个时候他们做了比较,NHWC 的 cuDNN conv 内核非常慢。但这是最新的吗?差异有多大? NHWC 如此缓慢的技术原因是什么?还是这种情况下的 cuDNN 内核没有得到很好的优化?

最佳答案

原因是大多数简单卷积的实现(这里不讨论 winograd 或 fft),最终都会进行某种简单的矩阵乘法,这意味着在它们的内部循环中,它们将两个张量的一些值相乘并对结果求和。

在 CPU 实现中,使用 SSE 或 AVX 优化,沿 C 维度执行此操作会更快,因为您只需将值 4 x 4 或 8 x 8 相乘,然后进行归约(将 4 或 8 的累加相加)最后,一旦您添加了所有 C 维度。

然而,在 GPU 上,跨线程减少是一个成本更高的操作(至少在 Kepler 引入包装级原子操作之前是这样),因此历史上它已经过优化,以便包装中的每个线程连续读取(在内存中)硬件值,并用循环对 C 的部分进行累加。

请注意,尽管最新的 nvidia 卡 (RTX) 现在具有张量乘法核心,可以在一次操作中处理小块,包括减少一小部分 C,因此在这些卡上使用 NHWC(或混合 NCHWC)实际上更快格式)。

关于tensorflow - 与 TensorFlow/cuDNN 中的 NHWC 相比,NCHW 快多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44280335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com