单次使用和CPU数据缓存
我正在开发一个应用程序,它有很多内部数据结构,但也处理大量的用户数据。在这个处理过程中,我需要让CPU只看一次数据(其余的处理是通过零拷贝和DMA完成的,所以CPU根本不需要接触数据) 我正在寻找一种方法来处理用户数据(即使这意味着将其复制到临时缓冲区),而不让它从CPU的数据缓存中逐出内部结构。换句话说,我正在寻找一种方法来告诉CPU“给我这些数据,但我再也不需要它了” 我似乎记得,单次使用和CPU数据缓存,c,gcc,llvm,x86-64,C,Gcc,Llvm,X86 64,我正在开发一个应用程序,它有很多内部数据结构,但也处理大量的用户数据。在这个处理过程中,我需要让CPU只看一次数据(其余的处理是通过零拷贝和DMA完成的,所以CPU根本不需要接触数据) 我正在寻找一种方法来处理用户数据(即使这意味着将其复制到临时缓冲区),而不让它从CPU的数据缓存中逐出内部结构。换句话说,我正在寻找一种方法来告诉CPU“给我这些数据,但我再也不需要它了” 我似乎记得,gcc有一个内在的机制来做这件事,但是翻开列表,我似乎记错了(或者找不到它)。无论哪种方式,汇编解决方案(英特尔
gcc
有一个内在的机制来做这件事,但是翻开列表,我似乎记错了(或者找不到它)。无论哪种方式,汇编解决方案(英特尔)都可以很好地满足我的需要
逻辑表明,必须有一种方法来实现这一点,因为在向DMA缓冲区发送数据(或从DMA缓冲区接收数据)之前必须这样做。SSE4.1是一种带有非暂时性提示的负载,即使在正常的“写回”内存区域上,它也可能给出这种行为。但是,不能保证它的行为与法向量负载有任何不同。使用它直接读取数据,或者复制到一个小的缓冲区中(如果您想对其使用非矢量代码),应该比什么都不做要好。(我建议对MOVNTDQA使用C内部版本,而不是编写内联asm。)?此外,如果您运行的是Intel IvyBridge或更新版本,请。无论哪种方式,除非您使用WB以外的内存类型(例如弱顺序的WC),否则您的数据将必须进入缓存,但希望它只能污染L3、L2和L1缓存中每组的一个“方式”。它由页面目录项中的D位控制(缓存已禁用)。你需要告诉你的操作系统什么旋钮很难猜。在MSVC++上,可以使用#pragma节,使用nocache属性来完成。Gcc/posix应该有类似的东西,我猜是ld脚本。