Страница 1 из 1

Оптимизация что ли?

СообщениеДобавлено: 10.05.2014 00:03:46
solomon243
Пытаюсь нагрузить машину бесполезной работой:

Код: Выделить всё
program hangup;

{$mode objfpc}

uses Crt;

var
CyclesCount: Integer = 1000000;
i: Integer;
z: Integer = 1;

BEGIN
for i := 0 to CyclesCount do
   begin
   z:= z + i;
   if z = 0 then
      begin
         asm
            NOP;
         end;
      end;
   end;
END.


сырец компилируется. Запускается.
Но выполнение происходит слишком быстро. Может быть компилятор оптимизирует каким-либо образом код?? Как отключить такую оптимизацию?

Re: Оптимизация что ли?

СообщениеДобавлено: 10.05.2014 01:51:20
Дож
Код: Выделить всё
[doj@korica ~/temp]$ fpc -O2 -al cycles.pas && cat cycles.s | sed -n '/BEGIN/,/END/p'
# [12] BEGIN
        pushl   %ebp
        movl    %esp,%ebp
        pushl   %ebx
        call    FPC_INITIALIZEUNITS
# [13] for i := 0 to CyclesCount do
        movl    TC_$P$HANGUP_$$_CYCLESCOUNT,%ebx
        movl    $0,U_$P$HANGUP_$$_I
        cmpl    U_$P$HANGUP_$$_I,%ebx
        jl      .Lj4
        subl    $1,U_$P$HANGUP_$$_I
        .balign 4,0x90
.Lj5:
        addl    $1,U_$P$HANGUP_$$_I
# [15] z:= z + i;
        movl    TC_$P$HANGUP_$$_Z,%eax
        addl    U_$P$HANGUP_$$_I,%eax
        movl    %eax,TC_$P$HANGUP_$$_Z
# [16] if z = 0 then
        testl   %eax,%eax
        jne     .Lj9
# [19] NOP;
        nop
.Lj9:
        cmpl    U_$P$HANGUP_$$_I,%ebx
        jg      .Lj5
.Lj4:
# [23] END.

Re: Оптимизация что ли?

СообщениеДобавлено: 10.05.2014 09:48:07
solomon243
я запилил в 100 раз больший итератор и вместо сложения - умножение. задержка теперь заметна на глаз.