Производительность 64-битных программ

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Производительность 64-битных программ

Сообщение ArtSwan » 18.03.2009 01:39:39

Доброго времени всем!
Вот заинтересовался лазарем и меня удивил тот факт, что код скомпиленый под 64 бита работает почти в 3 раза медленней того же но 32-битного. Тестировал под Vista x64. Собственно код:
Код: Выделить всё
  SetLength(ar, 1048576);
  FillChar(PChar(ar)^, Length(ar), 'b');
  Timer := GetTickCount;
  for i := 0 to 10000 do
      Pos('aa', ar);
  WriteLn('Time: ' + IntToStr(GetTickCount - Timer) + ' ms');

Почему это происходит?
ArtSwan
незнакомец
 
Сообщения: 2
Зарегистрирован: 17.03.2009 12:51:50

Re: Производительность 64-битных программ

Сообщение Sergei I. Gorelkin » 18.03.2009 03:13:16

Кодогенераторы разные. x64 написан не очень давно, и, возможно, не имеет тех оптимизаций, которые есть для i386.
Также весьма вероятно, что ф-ция Pos для i386 написана на ассемблере, а для x64 - нет.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Производительность 64-битных программ

Сообщение Logo » 18.03.2009 10:54:22

Приведенный Вами код, ничего не говорит.
Дело в том, что для оптимизации 64битных программ необходимо использовать 64-разрядные переменные, вместо Integer - Int64. Работа с указателями, также должна быть подогнана под 64. Могут быть и другие нюансы. Не исключено, что и сама виста не права. Какого типа переменные у вас? Пример, просто, невозможно повторить для проверки. Вопрос по сути интересен, но приведите работающий у вас код с используемыми переменными и подключенными модулями.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Производительность 64-битных программ

Сообщение Mr.Smart » 18.03.2009 11:09:58

Logo писал(а):Приведенный Вами код, ничего не говорит.
Дело в том, что для оптимизации 64битных программ необходимо использовать 64-разрядные переменные, вместо Integer - Int64. Работа с указателями, также должна быть подогнана под 64. Могут быть и другие нюансы. Не исключено, что и сама виста не права. Какого типа переменные у вас? Пример, просто, невозможно повторить для проверки. Вопрос по сути интересен, но приведите работающий у вас код с используемыми переменными и подключенными модулями.

В FPC при компиляцию под 64 бита все типы Integer = Int64. И указатели тоже 64 битные :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Производительность 64-битных программ

Сообщение Logo » 18.03.2009 11:24:20

Mr.Smart писал(а):В FPC при компиляцию под 64 бита все типы Integer = Int64. И указатели тоже 64 битные :wink:

Теоретически.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Производительность 64-битных программ

Сообщение ArtSwan » 20.03.2009 13:53:20

Logo писал(а): Вопрос по сути интересен, но приведите работающий у вас код с используемыми переменными и подключенными модулями.

Это в общем то и есть работающий код: вот объявления переменных для полноты картины
Код: Выделить всё
var
  ar: string;
  i: integer;
  Timer: Cardinal;
begin
  SetLength(ar, 1048576);
  FillChar(PChar(ar)^, Length(ar), 'b');
  Timer := GetTickCount;
  for i := 0 to 10000 do
      Pos('aa', ar);
  WriteLn('Time: ' + IntToStr(GetTickCount - Timer) + ' ms');
end;

проект создан мастером, тип - консольное приложение, из модулей добавлен только Windows (для GetTickCount).
для оптимизации 64битных программ необходимо использовать 64-разрядные переменные, вместо Integer - Int64. Работа с указателями, также должна быть подогнана под 64.

Я не думаю что переменная цикла могла так сказаться на скорости выполнения - очевидно что все дело в функции Pos которая в свою очередь использует CompareByte на асме - и вот она скорее всего оптимизирована под i386. Кстати более быстрой реализации Pos чем в Делфи я больше нигде не видел.
ArtSwan
незнакомец
 
Сообщения: 2
Зарегистрирован: 17.03.2009 12:51:50


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru