普通乘法,加法等時間復雜度計算


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秒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM