以下是使用匯編代碼的我的一個基準測試程序(適用於Linux)的一部分,可以進行重複計算而不用擔心過度優化。你需要使用一個高分辨率的定時器和一個基於彙編的循環,這個定時足夠長,以保證合理的執行時間您可能需要在循環中重複計算來填充管道。
這個重複20M加10次找到最大速度。 IntCount1值在年底作爲一個簡單的完整性檢查檢查
C Code
intCount1 = 0;
max = 0;
for (i=0; i<10; i++)
{
count = intCount1;
start_time();
_mips1Reg();
end_time();
count = intCount1 - count;
mips = (int)((double)count/1000000.0/secs + 0.5);
if(mips > max) max = mips;
}
mipsReg[0] = max;
printf(" 1 Register %7d 32 Bit Integer MIPS\n", mipsReg[0]);
########################################################
Hi-Res Timer Used
clock_gettime(CLOCK_REALTIME, &tp1);
theseSecs = tp1.tv_sec + tp1.tv_nsec/1e9;
########################################################
Assembly Code
global _mips1Reg
_mips1Reg:
push eax
push ebx
push ecx
push edx
push edi
mov edi, 1000000
mov eax, [intCount1]
align 8
dlp:add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 3
dec edi
jnz dlp
mov [intCount1], eax
pop edi
pop edx
pop ecx
pop ebx
pop eax
ret
除非我記錯了,你會簡單地從一個循環內使重複調用'pow',通過迭代次數除以循環時間。除非您使用的是非多任務操作系統,否則在每次運行時都應該使用相同的時間,從而使平均循環變得冗餘。 – enhzflep