我感兴趣的是在Windows中强制CPU缓存刷新(出于基准测试的原因,我想模拟从CPU缓存中没有数据开始),最好是基本的C实现或Win32调用.
是否有一种已知的方法可以通过系统调用来执行此操作,甚至可以像执行大型操作一样偷偷摸摸地执行此操作memcpy?
英特尔i686平台(P4及以上版本也可以).
我正在写一个C程序,我需要冲洗我的记忆.我想知道是否有任何UNIX系统命令来刷新CPU缓存.
这是我的项目的一项要求,它涉及计算我的逻辑所需的时间.
我已经阅读了有关该cacheflush(char *s, int a, int b)功能的内容,但我不确定它是否合适以及在参数中传递什么.
我正在尝试在linux上使用WBINV指令来清除处理器的L1缓存.
以下程序编译,但在我尝试运行它时会产生分段错误.
int main() {asm ("wbinvd"); return 1;}
我正在使用gcc 4.4.3并在我的x86机器上运行Linux内核2.6.32-33.
处理器信息:Intel(R)Core(TM)2 Duo CPU T5270 @ 1.40GHz
我按如下方式构建了该程序:
$ gcc
$ ./a.out
分段故障
谁能告诉我我做错了什么?我如何让它运行?
PS:我正在运行一些性能测试,并希望确保处理器缓存的先前内容不会影响结果.
在"C"中编写的与清除Linux OS机器上的L2缓存相关的编程步骤是什么?
/ sys/devices/system/cpu/cpu0/cache/index2/size = 6144K x 8CPU
使用排序的我的C程序第一次比其他时间慢了10倍.它使用整数文件进行排序,即使我更改数字,程序仍然运行得更快.当我重新启动PC时,第一次程序运行速度慢了10倍.我time用来计算时间.
我正在尝试一些测量机器上TLB大小的方法.我不知何故需要确保CPU不会缓存我用来测量每页平均访问时间的数组元素.所以我在循环中尝试了这个代码,使用这里的答案:
FILE *fp;
fp = fopen("/proc/sys/vm/drop_caches", "w");
fprintf(fp, "3");
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
但是,我收到了Segmentation Fault (core dumped)错误.我不知道为什么会发生这种情况.我对C不是很好,任何帮助都会受到赞赏.谢谢.