Operating system APU(如apple m1 mac)上的内存复制是否使用GPU特定的宽向量指令?

Operating system APU(如apple m1 mac)上的内存复制是否使用GPU特定的宽向量指令?,operating-system,gpu,gpgpu,simd,Operating System,Gpu,Gpgpu,Simd,我在读这篇文章,其中的主要区别似乎是mmap使用AVX-2等向量指令的能力,而这是系统调用无法做到的 我知道GPU使用的SIMD指令往往更广泛。一种大小为32的Nvidia扭曲,在32=1024位(?)与AVX-2的256位上运行。因此可能会有4倍的加速。我猜这不是在传统的离散gpu设置中使用的,因为主机到设备(和后台)拷贝将超过宽寄存器带来的任何好处 然而,在APU中,GPU与CPU共享内存,无需这些昂贵的拷贝。我想知道这些GPU指令是否可以用来进一步加速类似mmap的向量操作(numpy是另

我在读这篇文章,其中的主要区别似乎是mmap使用AVX-2等向量指令的能力,而这是系统调用无法做到的

我知道GPU使用的SIMD指令往往更广泛。一种大小为32的Nvidia扭曲,在32=1024位(?)与AVX-2的256位上运行。因此可能会有4倍的加速。我猜这不是在传统的离散gpu设置中使用的,因为主机到设备(和后台)拷贝将超过宽寄存器带来的任何好处


然而,在APU中,GPU与CPU共享内存,无需这些昂贵的拷贝。我想知道这些GPU指令是否可以用来进一步加速类似mmap的向量操作(numpy是另一个例子)。是否已经完成(在M1 mac或任何具有集成图形的CPU中)?或者您可以详细说明阻止这种情况发生的体系结构问题吗?

您有点像在问两个独立的问题:操作系统(或用户空间标准库?)是否可以使用GPGPGPU加速从页面缓存(通过读取系统调用进入用户空间内存,或从mmaped区域)的读取。另外,正常分配的进程内存(和/或页面缓存)上的GPGPU是否可以避免复制到专用于GPU的内存

对于第二部分,苹果公司表示,由于集成GPU的内存访问缓存与CPU保持一致,M1上的MacOS的答案是肯定的。我认为AMD提出了类似的建议,可以避免在APU(Fusion IIRC?)上的图形或GPGPU驱动程序中进行复制,但IDK软件是否充分利用了这一点


第一部分;可疑的大型内存拷贝受到DRAM带宽的限制,而不是CPU核心L1d缓存带宽(随SIMD寄存器宽度扩展)。在x86上,单核上的AVX2环路几乎可以达到Intel“客户端”芯片(四核或类似芯片,而不是具有更高延迟互连的大型xeon)的最大DRAM带宽。单核带宽(到L3或DRAM)往往受到核心可以跟踪的未完成缓存未命中数的限制,而不是通过使用较少的指令进行复制。这主要有助于在相同大小的无序执行窗口中看得更远,更快地跨过页面边界和类似的内容。有关SSE(16字节)与AVX(32字节)向量,请参阅

因此,GPU卸载对大拷贝没有帮助。它可能只对小拷贝有帮助,这样就不会在CPU的L1d缓存中保留热拷贝结果。和/或无法利用处理数据的CPU的L1d缓存中已处于热状态的源或目标


此外,设置开销(与GPU通信,超出当前核心)将主导任何小拷贝的快速复制。

如果您认为这个问题不适合这样做(或投票关闭),请告诉我原因。我愿意接受任何改进的建议。我已经考虑过这个问题的理想地点,一位亲密的投票人已经把它推荐给超级用户,但我尊重地不同意这个判断。我不希望Linux内核使用GPU来实现公共
memcpy
功能。使用GPU意味着需要设置GPU上下文(至少是GPU寄存器),并且需要保护该上下文不受并发线程的影响。这与内核中不使用FPU的原因相同。然而,可能是某些特定的内核函数实际使用了GPU。