[fpc-pascal] Int64: Cross Compiler 2.1.4 Beta for X64 does not produce faster executables ?

Skybuck Flying skybuck2000 at hotmail.com
Mon Mar 10 20:32:28 CET 2008


Hello,

The project/benchmark below was compiled with Delphi 2007 (produces 32 bit 
instructions), and Free Pascal Cross Compiler 2.1.4 Beta for X64 (produces 
64 bit instructions ???).

I see no major performance differences ?

I was expecting much better performance from the cross compiler but it's not 
happening ?

Why is it not happening ?

Doesn't it use true 64 bit instructions ?

(How can I look at the produced assembler instructions ?)

Or is there another reason for it ?

// *** Begin of Benchmark ***

program Project1;

{$APPTYPE CONSOLE}

{

Test simulated large integer (int64) vs native floating point (double) 
performance

version 0.01 created on 7 february 2008 by Skybuck Flying

My (Skybuck)'s Conclusions are:

1. Simulated ints faster for additions and subtractions than doubles.

2. Simulated ints slower for multiplications and divisions than doubles.

}

uses
  SysUtils,
  Windows;

function TestSimulatedInt64Performance : int64;
var
 vIndex : integer;
 a : int64;
 b : int64;
 c : int64;
begin
 a := 0;
 b := 1;
 c := 2;
 for vIndex := 0 to 10 * 1024 * 1024 do
 begin
  // additions faster with simulated int than doubles
  a := a + 1;
  b := b + 1;
  c := c + 1;

  // multiplications slower with simulated int than doubles
  a := a * 5;
  b := b * 5;
  c := c * 5;

  // divisions slower with simulated int than doubles
  a := a div 5;
  b := b div 5;
  c := c div 5;

  a := a + b;
  b := b + c;
  c := c + a;

  // subtractions probably faster just like additions (not really tested :))
  a := a - a;
  b := b - b;
  c := c - c;
 end;

 result := a + b + c;
end;

function TestDoublePerformance : double;
var
 vIndex : integer;
 a : double;
 b : double;
 c : double;
begin
 a := 0;
 b := 1;
 c := 2;
 for vIndex := 0 to 10 * 1024 * 1024 do
 begin
  a := a + 1;
  b := b + 1;
  c := c + 1;

  a := a * 5;
  b := b * 5;
  c := c * 5;

  a := a / 5;
  b := b / 5;
  c := c / 5;

  a := a + b;
  b := b + c;
  c := c + a;

  a := a - a;
  b := b - b;
  c := c - c;
 end;
 result := a + b + c;
end;

var
 Tick1 : int64;
 Tick2 : int64;
 vLoop : integer;
begin
 for vLoop := 1 to 10 do
 begin
  sleep( 1000 );

  QueryPerformanceCounter( Tick1 );

  TestSimulatedInt64Performance;

  QueryPerformanceCounter( Tick2 );

  writeln( 'Simulated Int64 Ticks: ', Tick2-Tick1 );

  sleep( 1000 );

  QueryPerformanceCounter( Tick1 );

  TestDoublePerformance;

  QueryPerformanceCounter( Tick2 );

  writeln( 'Simulated Double Ticks: ', Tick2-Tick1 );
 end;

 readln;

end.

// *** End of Benchmark ***

Bye,
  Skybuck. 




More information about the fpc-pascal mailing list