为什么c程序的sqrt的cpu占用率不是线性增加的?

来源:百度知道 编辑:UC知道 时间:2024/06/28 09:42:56
图像处理程序中不使用sqrt,cpu占用1%。每个像素点使用一次sqrt运算,变成17%。以后每个像素点不管增加多少次sqrt运算,都稳定在19%以内。为什么cpu占用率不是线性增加的?
关键很难理解,为什么sqrt使用,cpu占用不是线性增加的。我还是搞不懂!

因为 sqrt 本身就不是什么高性能的子函数,
它对CPU的占用率只到这个水平了,
不信你可以试试对一个数连续开方的CPU占用率。

高性能的开方函数是游戏 Quake 里面用的那种,
具体写法我记不清了,是开放源代码的,自己找找。

==============================================

因为你用的C编译器的sqrt函数没有针对超标量流水线做优化,
只能比较低效地进行标量运算,流水线重载现象也比较严重,
所以不能充分占满超标量流水线,无法占满CPU

另外,你那应该是多核CPU吧,普通的C库函数都不支持多线程,
因此只会占用一个核心(的一部分),其它核心全部空闲。