Я тут изучаю влияние выравнивания кода на выполнение циклов,
но т.к. у меня у самого сейчас Athlon64 и довольно странные
результаты, хотелось бы узнать, какие результаты на других AMD
и на Intel.
Если найдутся желающие потратить 5 минут, чтобы мне помочь —
буду счастлив
Комментируйте строчки с nop по одной, сравнивая выводимое
на экран время выполнения.
Теоретически, оно должно в основном колебаться вокруг
двух сильно (раза в 1.25-1.3) отличающихся значений
При каком количестве закомментированных строк происходит
первый переход от значений первого типа к значениям второго?
Продолжайте расставлять комментарии. При каком количестве
происходит обратный переход?
Просьба указывать также тип Вашего процессора.
Program Test;
uses Sysutils,Dialogs;
function rdtsc:int64; asm rdtsc end;
var Time:int64;
a,b:array[1..1000] of cardinal;
r:array[1..1000]of cardinal;
i:integer;
begin
for i:=1 to 1000 do a[i]:=2;
for i:=1 to 1000 do b[i]:=3;
Time:=RDTSC();
For i:=1 to 100000 do
asm
push edx
xor ecx,ecx
mov edx,1000
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
@Loop:
mov eax,dword ptr a[ecx]
imul eax,dword ptr b[ecx]
mov dword ptr r[ecx],eax
add ecx,4
sub edx,1
jnz @Loop
nop
pop edx
end;
showmessage(inttostr(RDTSC()-Time));
end.
Slicer