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

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

16 个解决方案

#1


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

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

#2


这东西无法在语言层面测试。

如果平台支持,可以利用 sdk 或开发包里面提供的 api 来直接操作设备取出统计数据。
另外,如果有软仿真工具,则在工具中有提供相关的方法。

#3


顶下。。

#4


取过cpu信息,但是没取过这些信息,有什么需求?

#5


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

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

++
帮顶!

#6


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


介绍你看一本书《代码优化:有效使用内存》,这本书正好教你如何用C/C++做这类工作。

#7


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

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

对一段程序测一下也是可以的,应该会利用一些寄存器进行实时的控制和锁定,主要是用来分析一些cache的指标来指导cache的优化。

#8


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


介绍你看一本书《代码优化:有效使用内存》,这本书正好教你如何用C/C++做这类工作。

非常感谢

#9


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

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

#10


引用 9 楼 xunxun1982 的回复:
测试大小都是来测cpu类型的
然后查表……

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

这个我是知道的,我想知道的是怎么测试cache的大小,原理是什么。以及如何对一段程序测出在cache中的动态运行情况,如失效,命中率等方面,来指导代码优化用和cache错误检查。

#11


应该由操作系统提供相关接口,或者自己在底层实现对硬件的访问信息

#12


应该会涉及到一定的汇编取指令信息,有没有谁能给出一些比较好的方法或者思路

#13


学习了 、、、

#14


继续求教

#15


cache 对程序好像是透明的,我的观点是取不了。

#16


可以参考一下 cachegrind 这个performance工具。

#1


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

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

#2


这东西无法在语言层面测试。

如果平台支持,可以利用 sdk 或开发包里面提供的 api 来直接操作设备取出统计数据。
另外,如果有软仿真工具,则在工具中有提供相关的方法。

#3


顶下。。

#4


取过cpu信息,但是没取过这些信息,有什么需求?

#5


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

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

++
帮顶!

#6


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


介绍你看一本书《代码优化:有效使用内存》,这本书正好教你如何用C/C++做这类工作。

#7


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

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

对一段程序测一下也是可以的,应该会利用一些寄存器进行实时的控制和锁定,主要是用来分析一些cache的指标来指导cache的优化。

#8


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


介绍你看一本书《代码优化:有效使用内存》,这本书正好教你如何用C/C++做这类工作。

非常感谢

#9


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

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

#10


引用 9 楼 xunxun1982 的回复:
测试大小都是来测cpu类型的
然后查表……

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

这个我是知道的,我想知道的是怎么测试cache的大小,原理是什么。以及如何对一段程序测出在cache中的动态运行情况,如失效,命中率等方面,来指导代码优化用和cache错误检查。

#11


应该由操作系统提供相关接口,或者自己在底层实现对硬件的访问信息

#12


应该会涉及到一定的汇编取指令信息,有没有谁能给出一些比较好的方法或者思路

#13


学习了 、、、

#14


继续求教

#15


cache 对程序好像是透明的,我的观点是取不了。

#16


可以参考一下 cachegrind 这个performance工具。