如何用C语言测试CPU的Cache大小、速率、命中率或者缺失率等信息?

john0122 2011-09-03 12:47:10
如何用C语言测试CPU的Cache大小、速率、命中率或者缺失率等信息啊?有没有一些比较好的开源软件之类的或者哪位大侠对此比较懂,能够说明一下测试的原理或者方法,或者对其中的某一项给出也可以,谢谢了。
...全文
1639 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gbtux2008 2012-01-04
  • 打赏
  • 举报
回复
可以参考一下 cachegrind 这个performance工具。
proorck6 2011-09-04
  • 打赏
  • 举报
回复
cache 对程序好像是透明的,我的观点是取不了。
john0122 2011-09-04
  • 打赏
  • 举报
回复
继续求教
jackyjkchen 2011-09-03
  • 打赏
  • 举报
回复
这个用C理论上就不可能吧,首先受编译器影响极大,一样的代码,不同的编译器甚至同一个编译器不同的选项都会生成不同的代码,那cache的使用都会不同

而且“命中率或者缺失率”这个可不是定值啊,完全取决于你的代码,怎么测?最多测出来你这个代码的cache“命中率或者缺失率”,对其他程序没什么参考意义

john0122 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 supermegaboy 的回复:]

引用楼主 john0122 的回复:
如何用C语言测试CPU的Cache大小、速率、命中率或者缺失率等信息啊?有没有一些比较好的开源软件之类的或者哪位大侠对此比较懂,能够说明一下测试的原理或者方法,或者对其中的某一项给出也可以,谢谢了。


介绍你看一本书《代码优化:有效使用内存》,这本书正好教你如何用C/C++做这类工作。
[/Quote]
非常感谢
john0122 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]

这个用C理论上就不可能吧,首先受编译器影响极大,一样的代码,不同的编译器甚至同一个编译器不同的选项都会生成不同的代码,那cache的使用都会不同

而且“命中率或者缺失率”这个可不是定值啊,完全取决于你的代码,怎么测?最多测出来你这个代码的cache“命中率或者缺失率”,对其他程序没什么参考意义
[/Quote]
对一段程序测一下也是可以的,应该会利用一些寄存器进行实时的控制和锁定,主要是用来分析一些cache的指标来指导cache的优化。
飞天御剑流 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 john0122 的回复:]
如何用C语言测试CPU的Cache大小、速率、命中率或者缺失率等信息啊?有没有一些比较好的开源软件之类的或者哪位大侠对此比较懂,能够说明一下测试的原理或者方法,或者对其中的某一项给出也可以,谢谢了。
[/Quote]

介绍你看一本书《代码优化:有效使用内存》,这本书正好教你如何用C/C++做这类工作。
至善者善之敌 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
这个用C理论上就不可能吧,首先受编译器影响极大,一样的代码,不同的编译器甚至同一个编译器不同的选项都会生成不同的代码,那cache的使用都会不同

而且“命中率或者缺失率”这个可不是定值啊,完全取决于你的代码,怎么测?最多测出来你这个代码的cache“命中率或者缺失率”,对其他程序没什么参考意义
[/Quote]
++
帮顶!
jixingzhong 2011-09-03
  • 打赏
  • 举报
回复
取过cpu信息,但是没取过这些信息,有什么需求?
欣客 2011-09-03
  • 打赏
  • 举报
回复
学习了 、、、
john0122 2011-09-03
  • 打赏
  • 举报
回复
应该会涉及到一定的汇编取指令信息,有没有谁能给出一些比较好的方法或者思路
limang89 2011-09-03
  • 打赏
  • 举报
回复
顶下。。
kingcard 2011-09-03
  • 打赏
  • 举报
回复
应该由操作系统提供相关接口,或者自己在底层实现对硬件的访问信息
john0122 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xunxun1982 的回复:]

测试大小都是来测cpu类型的
然后查表……

命中率那个没法测,也只和你的算法有关,不同算法不一样
[/Quote]
这个我是知道的,我想知道的是怎么测试cache的大小,原理是什么。以及如何对一段程序测出在cache中的动态运行情况,如失效,命中率等方面,来指导代码优化用和cache错误检查。
Leaveye 2011-09-03
  • 打赏
  • 举报
回复
这东西无法在语言层面测试。

如果平台支持,可以利用 sdk 或开发包里面提供的 api 来直接操作设备取出统计数据。
另外,如果有软仿真工具,则在工具中有提供相关的方法。
xunxun 2011-09-03
  • 打赏
  • 举报
回复
测试大小都是来测cpu类型的
然后查表……

命中率那个没法测,也只和你的算法有关,不同算法不一样

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧