私有内存比本地内存慢吗?

Meg*_*raj 13 opencl

我正在研究一个内核,每个线程都有很多全局内存访问权限,因此我将它们复制到本地内存中,速度提高了40%.

我希望更快的速度,从本地复制到私人,这降低了性能

所以我认为我们不能使用可能会降低性能的私有内存,这是正确的吗?

Jam*_*lby 15

阿什温的答案是正确的方向,但有点误导.

OpenCL将变量的地址空间从其物理存储中抽象出来,并且两者之间不一定有1:1的映射.

考虑在__private地址空间中声明的OpenCL变量,默认情况下包括函数内部的自动非指针变量.NVidia GPU实现将尽可能在寄存器中进行物理分配,只有在寄存器容量不足时才会溢出到物理片外存储器.这种特殊的片外存储器称为"CUDA本地"存储器,并且具有与为__global变量分配的存储器类似的性能特性,这解释了由寄存器溢出引起的性能损失.在该实现中没有诸如"私有存储器"之类的物理事物,只有"私有地址空间",其可以在片上或片外分配.

性能损失不是使用私有地址空间(或"私有内存")的直接后果,私有地址空间通常在高性能内存中分配.这是因为,在这种实现下,变量太大而无法分配给高性能寄存器,因此被"溢出"到片外存储器.


Ash*_*ppa 0

在(类似 GPU)OpenCL 设备中,本地内存位于片上并靠近处理元件 (PE)。它可能与访问 L1 缓存一样快。每个线程的私有内存实际上是从片外全局内存中分配的。这里距离PE较远,可能会有数百个时钟周期的延迟,从而降低读写性能。