Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单次使用和CPU数据缓存_C_Gcc_Llvm_X86 64 - Fatal编程技术网

单次使用和CPU数据缓存

单次使用和CPU数据缓存,c,gcc,llvm,x86-64,C,Gcc,Llvm,X86 64,我正在开发一个应用程序,它有很多内部数据结构,但也处理大量的用户数据。在这个处理过程中,我需要让CPU只看一次数据(其余的处理是通过零拷贝和DMA完成的,所以CPU根本不需要接触数据) 我正在寻找一种方法来处理用户数据(即使这意味着将其复制到临时缓冲区),而不让它从CPU的数据缓存中逐出内部结构。换句话说,我正在寻找一种方法来告诉CPU“给我这些数据,但我再也不需要它了” 我似乎记得,gcc有一个内在的机制来做这件事,但是翻开列表,我似乎记错了(或者找不到它)。无论哪种方式,汇编解决方案(英特尔

我正在开发一个应用程序,它有很多内部数据结构,但也处理大量的用户数据。在这个处理过程中,我需要让CPU只看一次数据(其余的处理是通过零拷贝和DMA完成的,所以CPU根本不需要接触数据)

我正在寻找一种方法来处理用户数据(即使这意味着将其复制到临时缓冲区),而不让它从CPU的数据缓存中逐出内部结构。换句话说,我正在寻找一种方法来告诉CPU“给我这些数据,但我再也不需要它了”

我似乎记得,
gcc
有一个内在的机制来做这件事,但是翻开列表,我似乎记错了(或者找不到它)。无论哪种方式,汇编解决方案(英特尔)都可以很好地满足我的需要


逻辑表明,必须有一种方法来实现这一点,因为在向DMA缓冲区发送数据(或从DMA缓冲区接收数据)之前必须这样做。

SSE4.1是一种带有非暂时性提示的负载,即使在正常的“写回”内存区域上,它也可能给出这种行为。但是,不能保证它的行为与法向量负载有任何不同。使用它直接读取数据,或者复制到一个小的缓冲区中(如果您想对其使用非矢量代码),应该比什么都不做要好。(我建议对MOVNTDQA使用C内部版本,而不是编写内联asm。)?此外,如果您运行的是Intel IvyBridge或更新版本,请。无论哪种方式,除非您使用WB以外的内存类型(例如弱顺序的WC),否则您的数据将必须进入缓存,但希望它只能污染L3、L2和L1缓存中每组的一个“方式”。它由页面目录项中的D位控制(缓存已禁用)。你需要告诉你的操作系统什么旋钮很难猜。在MSVC++上,可以使用#pragma节,使用nocache属性来完成。Gcc/posix应该有类似的东西,我猜是ld脚本。