Memory management 为什么可以';我们不是要使用'cudahosterregister()'将已经存在的内存区域标记为写组合吗?

Memory management 为什么可以';我们不是要使用'cudahosterregister()'将已经存在的内存区域标记为写组合吗?,memory-management,cuda,posix,gpgpu,Memory Management,Cuda,Posix,Gpgpu,在CUDA SDK中,用于分配新内存区域的函数可以使用标志: cudaHostAllocDefault(默认值-0并导致cudaHostAlloc()模拟cudaMallocHost()) cudaHostAllocPortable cudaHostAllocMapped CudahostallocWrite 要标记已分配的内存区域,我们可以使用标志: 0(默认值) cudahosteregister便携式 cudaHostRegisterMapped 为什么我们可以使用cudaHost

在CUDA SDK中,用于分配新内存区域的函数可以使用标志:

  • cudaHostAllocDefault(默认值-0并导致cudaHostAlloc()模拟cudaMallocHost())
  • cudaHostAllocPortable
  • cudaHostAllocMapped
  • CudahostallocWrite
要标记已分配的内存区域,我们可以使用标志:

  • 0(默认值
  • cudahosteregister便携式
  • cudaHostRegisterMapped
为什么我们可以使用
cudaHostAlloc()
,通过标志
cudaHostAllocWriteCombined
来标记已写入的内存组合,但不能使用
cudahostallogister()
将已存在的内存区域标记为已写入的组合


已经分配的内存我们只能通过POSIX函数进行标记。

在您引用
set\u memory\u wc()
之前,我不知道有任何API可以更改现有VA范围的可缓存性。由于需要所有缓存刷新和TLB解析,这样的操作将非常昂贵;在找到某种方法将其取消标记为WC之前,内存基本上是不可读的


为什么要使用WC内存?在i7之前的(Nehalem)CPU上,WC具有略高的传输性能(IIRC),因为它抑制了对进出内存的PCI Express流量的窥探。但是在Nehalem和更高版本的CPU上,我不知道有任何应用程序具体证明了WC内存的好处。

我不知道有任何API可以改变现有VA范围的可缓存性,直到您引用
set_memory_WC()
。由于需要所有缓存刷新和TLB解析,这样的操作将非常昂贵;在找到某种方法将其取消标记为WC之前,内存基本上是不可读的


为什么要使用WC内存?在i7之前的(Nehalem)CPU上,WC具有略高的传输性能(IIRC),因为它抑制了对进出内存的PCI Express流量的窥探。但在Nehalem和更高版本的CPU上,我不知道有哪个应用程序具体证明了WC内存的好处。

非常感谢!是的,我想通过使用WC内存区域和
MOV[NT]Q
(NT-none-temporary)流SSE指令来提高性能,比如写在这里:但是你能给我一个链接吗?你说从Nehalem WC和stream NT-SSE开始并不重要吗?这是CUDA团队在Nehalem处理器首次问世时所做的一个观察——它呈现自己的主要开发者可见方式是,可分页的memcpy变得几乎和固定的memcpy一样快。CUDA手册(5.1.4)对此进行了简要讨论。这是对这件事的另一种看法:谢谢!清楚的WC存储器制造​​通过FSB感知处理器,因为通过FSB窥探工作缓慢:非常感谢!是的,我想通过使用WC内存区域和
MOV[NT]Q
(NT-none-temporary)流SSE指令来提高性能,比如写在这里:但是你能给我一个链接吗?你说从Nehalem WC和stream NT-SSE开始并不重要吗?这是CUDA团队在Nehalem处理器首次问世时所做的一个观察——它呈现自己的主要开发者可见方式是,可分页的memcpy变得几乎和固定的memcpy一样快。CUDA手册(5.1.4)对此进行了简要讨论。这是对这件事的另一种看法:谢谢!清楚的WC存储器制造​​在具有FSB的处理器上进行检测,因为通过FSB进行窥探的工作缓慢: