APU 上的内存复制(例如 apple m1 mac)是否使用特定于 GPU 的宽向量指令?
Does memory copying on APUs (e.g. apple m1 mac) use GPU-specific wide vector instructions?
我正在阅读这篇文章 Why mmap is faster than system calls,其中主要区别似乎是 mmap 能够使用像 AVX-2 这样的向量指令,而系统调用则不能。
我了解到 GPU 使用的 SIMD 指令往往要宽得多。在 float32 = 1024 位(?)上运行的大小为 32 的 Nvidia warp 与 AVX-2 的 256 位相比。所以 可能 4 倍加速。我想这在传统的离散 gpu 设置中没有使用,因为主机到设备(和返回)复制将超过宽寄存器的任何好处。
但是在 APU 中,GPU 与 CPU 共享内存,从而消除了对这些昂贵副本的需求。我想知道这些 GPU 指令是否因此可以用于进一步加速 mmap 之类的矢量操作(numpy 是另一个例子)。是否已经完成(在 M1 mac 或任何带有集成显卡的 CPU 中)?或者您能否详细说明阻止这种情况发生的架构问题?
您是在问 2 个不同的问题:OS(或 user-space 标准库?)是否可以使用 GPGPU 来加速从页面缓存(到 user-space 具有读取系统调用的内存,或来自 mmaped 区域的内存)。另外,正常分配的进程内存(and/or 页面缓存)上的 GPGPU 是否可以避免复制到专用于 GPU 的内存。
对于第二部分,Apple 表示 M1 上的 MacOS 的答案是肯定的,这要归功于集成 GPU 的内存访问缓存与 CPU 一致。我认为 AMD 提出了类似的建议,可以避免在其 APU 上的图形或 GPGPU 驱动程序中进行复制(Fusion IIRC?),但如果软件能够充分利用则 IDK。
第一部分;疑。大内存副本的瓶颈是 DRAM 带宽,而不是 CPU-core <-> L1d 缓存带宽(与 SIMD 寄存器宽度成比例)。在 x86 上,单核上的 AVX2 循环可以非常接近于最大化英特尔“客户端”芯片(四核或类似的,而不是具有更高延迟互连的大型至强)的 DRAM 带宽。单核带宽(到 L3 或 DRAM)往往受限于内核可以跟踪的未完成缓存未命中数,而不是通过使用更少的指令进行复制。这主要有助于通过相同大小的无序执行 window 看得更远,以更快地开始页面遍历页面边界和类似的东西。请参阅 了解 SSE(16 字节)与 AVX(32 字节)向量。
GPU 卸载因此对大型副本没有帮助。它可能只对小副本有帮助,然后它 不会 将副本结果热留在 CPU 的 L1d 缓存中。 And/or 无法利用在处理数据的 CPU 的 L1d 缓存中已经很热的源或目标。
此外,设置开销(与 GPU 通信,超出当前核心)将主导小型副本的任何更快的复制。
我正在阅读这篇文章 Why mmap is faster than system calls,其中主要区别似乎是 mmap 能够使用像 AVX-2 这样的向量指令,而系统调用则不能。
我了解到 GPU 使用的 SIMD 指令往往要宽得多。在 float32 = 1024 位(?)上运行的大小为 32 的 Nvidia warp 与 AVX-2 的 256 位相比。所以 可能 4 倍加速。我想这在传统的离散 gpu 设置中没有使用,因为主机到设备(和返回)复制将超过宽寄存器的任何好处。
但是在 APU 中,GPU 与 CPU 共享内存,从而消除了对这些昂贵副本的需求。我想知道这些 GPU 指令是否因此可以用于进一步加速 mmap 之类的矢量操作(numpy 是另一个例子)。是否已经完成(在 M1 mac 或任何带有集成显卡的 CPU 中)?或者您能否详细说明阻止这种情况发生的架构问题?
您是在问 2 个不同的问题:OS(或 user-space 标准库?)是否可以使用 GPGPU 来加速从页面缓存(到 user-space 具有读取系统调用的内存,或来自 mmaped 区域的内存)。另外,正常分配的进程内存(and/or 页面缓存)上的 GPGPU 是否可以避免复制到专用于 GPU 的内存。
对于第二部分,Apple 表示 M1 上的 MacOS 的答案是肯定的,这要归功于集成 GPU 的内存访问缓存与 CPU 一致。我认为 AMD 提出了类似的建议,可以避免在其 APU 上的图形或 GPGPU 驱动程序中进行复制(Fusion IIRC?),但如果软件能够充分利用则 IDK。
第一部分;疑。大内存副本的瓶颈是 DRAM 带宽,而不是 CPU-core <-> L1d 缓存带宽(与 SIMD 寄存器宽度成比例)。在 x86 上,单核上的 AVX2 循环可以非常接近于最大化英特尔“客户端”芯片(四核或类似的,而不是具有更高延迟互连的大型至强)的 DRAM 带宽。单核带宽(到 L3 或 DRAM)往往受限于内核可以跟踪的未完成缓存未命中数,而不是通过使用更少的指令进行复制。这主要有助于通过相同大小的无序执行 window 看得更远,以更快地开始页面遍历页面边界和类似的东西。请参阅
GPU 卸载因此对大型副本没有帮助。它可能只对小副本有帮助,然后它 不会 将副本结果热留在 CPU 的 L1d 缓存中。 And/or 无法利用在处理数据的 CPU 的 L1d 缓存中已经很热的源或目标。
此外,设置开销(与 GPU 通信,超出当前核心)将主导小型副本的任何更快的复制。