Intel Pentium CPU計算加減乘除的指令周期
【加法】:
指令 指令周期
adc 寄存器, 立即數 1
adc 寄存器, 寄存器 1
adc 寄存器, 內存 2
adc 內存, 立即數 3
adc 內存, 寄存器 3
add 寄存器, 立即數 1
add 寄存器, 寄存器 1
add 寄存器, 內存 2
add 內存, 立即數 3
add 內存, 寄存器 3
inc 寄存器 1
inc 內存 3
【減法】:
dec 寄存器 1
dec 內存 3
sub 寄存器, 立即數 1
sub 寄存器, 寄存器 1
sub 寄存器, 內存 2
sub 內存, 立即數 3
sub 內存, 寄存器 3
sbb 寄存器, 立即數 1
sbb 寄存器, 寄存器 1
sbb 寄存器, 內存 2
sbb 內存, 立即數 3
sbb 內存, 寄存器 3
【乘法】:
imul 寄存器 11
imul 內存 11
imul 寄存器, 寄存器, 立即數 10
imul 寄存器, 立即數 10
imul 寄存器, 內存, 立即數 10
imul 寄存器, 寄存器 10
imul 寄存器, 內存 10
mul 8位寄存器 11
mul 16位寄存器 11
mul 32位寄存器 10
mul 8位內存 11
mul 16位內存 11
mul 32位內存 10
【除法】:
div 8位寄存器 17
div 16位寄存器 25
div 32位寄存器 41
div 8位內存 17
div 16位內存 25
div 32位內存 41
idiv 8位寄存器 22
idiv 16位寄存器 30
idiv 32位寄存器 46
idiv 8位內存 30
idiv 16位內存 30
idiv 32位內存 46
由此可見,CPU計算加減法的速度跟位運算(與、或、非、異或)相當,乘法的速度比加減法慢近10倍,除法的速度比加減法慢(近20倍——8位,近30倍——16位,40倍以上——32位)。算加減法,讀取內存數據的比不讀內存數據的慢,寫內存的比讀內存的慢。
假設10 8=1秒
for k:=1 to 7 do
for i:=1 to mi[k](10000) do
begin
sum:=0; x:=1;
for j:=0 to n(100) do
begin
sum:=(sum+x*b[j,k] mod mi[k]) mod mi[k];
x:=x*i mod mi[k];
end;
if sum<>0 then f[i,k]:=false;
end;
1秒
int64附帶8的常數
按理來說乘法(除法)的執行時間應該是大於N倍加法時間的,其中N是數據位長。
接下來是推測:幾個乘法語句*幾。
7*10 4 *100 *8 * 2=1.12*10 8 =1秒