Intel® MKL-DNN
在现代英特尔架构中,缓存和内存使用效率会对整体性能产生显著影响。良好的内存访问模式可以最大限度地降低访问内存数据的额外成本,不会降低整体处理速度。若要实现这一目标,数据的存储和访问方式起着重要作用。这通常被称为数据布局。它描述了多维数组如何在内存地址空间中线性存储。
1. Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN)
数据布局由二维图像的 四个字母表示。
N:批次大小,表示一个批次中的图像数量。
C:通道,表示一张图像中的通道数。
W:宽度,表示图像水平维度的像素数。
H:高度,表示图像垂直维度的像素数。
这四个字母的顺序表示像素数据如何存储在 1-d 内存空间中。例如,NCHW 表示像素数据首先以宽度存储,然后是高度、通道,最后是批量存储。使用通道优先索引从左到右访问数据。NCHW 是使用英特尔 MKL-DNN 的推荐数据布局,因为这种格式是 CPU 的高效数据布局。
TensorFlow 使用 NHWC 作为默认数据布局,但它也支持 NCHW。
英特尔 MKL-DNN 库通过矢量化利用 SIMD 指令,并通过多线程利用多个内核。矢量化技术有效利用了现代 CPU 的缓存和计算能力,以及指令集的效用。单个计算最多可处理 16 个单精度 (512 位长) 数字。同时,最多可以在一个周期内完成两次乘法和加法 (融合乘加 (FMA)) 运算。此外,多线程技术有助于同时执行多个独立运算。通过避免顺序执行,通常可以最好地执行深度学习任务的计算,因此获取并行运行的可用内核是加速深度学习任务的理想选择。英特尔 MKL-DNN 采用 OpenMP,以充分利用英特尔架构。
OpenMP* 线程绑定到不同内核的线程上下文并尽可能靠近,建议将此环境变量设置为可用的物理内核数。
Wordbook
Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN)
Intel® Advanced Vector Extensions 2 (Intel® AVX2)
C/C++ Development Tools (CDT)