看了部落格:加減乘除、開根號、log等c**實現需要多少個時鐘週期 。 決定親自試一把。
邏輯是:假定cpu一直在執行加減乘除等操作,那麼讓cpu迴圈執行n次,得到總的時間t,再cat /proc/cpuinfo得到cpu的主頻大小f,根據公式t*f/n即可得到每次運算所需的時鐘週期數。cpu型號為:intel(r) xeon(r) cpu e5-2640 v4 @ 2.40ghz
比如對於開根號:
#include #include #include long long getcurrenttime()
:int main(){
unsigned long long t_c = 2400;得到每微秒的時鐘週期數
for(int k=1;k<10;k++){
unsigned long long v = pow(10,k);
long long t1 = getcurrenttime();
for(unsigned long long i=0;i得到的結果如下:
time:10000 199 us clocks:46
time:100000 2088 us clocks:50
time:1000000 19526 us clocks:46
time:10000000 129211 us clocks:30
time:100000000 963885 us clocks:22
time:1000000000 9642048 us clocks:22
time:10000000000 96420847 us clocks:22
從中可以看到在我的電腦上
0)開根號運算需要時鐘週期數為:22;
同理得到:
1)加、減、乘、除法運算的時鐘週期數為:4;
2)log運算的時鐘週期數為:92。
這個結論中加減乘除運算所需時鐘週期數相同,甚是奇怪,不知道是否是**出錯了,還是我的cpu對指令進行了優化。
時鐘週期,機器週期,指令週期
時鐘週期也稱為振盪週期,定義為時鐘脈衝的倒數 可以這樣來理解,時鐘週期就是微控制器外接晶振的倒數,例如12m的晶振,它的時間週期就是1 12 us 是計算機中最基本的 最小的時間單位。在乙個時鐘週期內,cpu僅完成乙個最基本的動作。對於某種微控制器,若採用了1mhz的時鐘頻率,則時鐘週期為1us 若...
時鐘週期,機器週期,機器週期
時鐘週期 時鐘週期也稱為振盪週期,定義為時鐘脈衝的倒數 可以這樣來理解,時鐘週期就是微控制器外接晶振的倒數,例如12m的晶振,它的時間週期就是1 12 us 是計算機中最基本的 最小的時間單位。在乙個時鐘週期內,cpu僅完成乙個最基本的動作。對於某種微控制器,若採用了1mhz的時鐘頻率,則時鐘週期為...
時鐘週期 指令週期 MIPS CPI
首先,了解下晶振的作用。沒有晶振,就沒有時鐘週期,沒有時鐘週期,就無法執行程式 微控制器就無法工作。微控制器工作時,是一條一條地從rom中取指令,然後一步一步地執行。微控制器訪問一次儲存器的時間,稱之為乙個機器週期,這是乙個時間基準。個機器週期包括12個時鐘週期。如果乙個微控制器選擇了12mhz晶振...