Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

Free Pascal via Delphi   Найти похожие ветки 

 
TUser ©   (2005-05-19 08:32) [40]

Вот на этом алгоритме FreePascal2.0.0 одназначно проигрывает по сравнению с Delphi7.
{$ifdef fpc}
{$mode delphi}
{$else}
{$apptype console}
{$endif}
program FPTest;
uses SysUtils, Classes, DateUtils;

var T, _T: TDateTime;
   A: array [0..1000000] of integer;
   i: integer;

function Get (Pos: integer): integer;

 function GetInt (S, E: integer): integer;
 var i, j, m, t: integer;
 begin
   i:=S; j:=E;
   repeat
     m:=(i + j) shr 1;
     while A[i] < A[m] do inc (i);
     while A[j] > A[m] do dec (j);
     if A[i] > A[j] then begin
       t:=A[i];
       A[i]:=A[j];
       A[j]:=t;
       end;
   until i >= j;
   if i > Pos then
     result:=GetInt(S,i)
     else
   if i = Pos then
     result:=A[i]
     else
     {i < Pos, and so j < Pos}
     result:=GetInt(j,E);
 end;

begin
  result:=GetInt(low(A),high(A));
end;

begin
 T:=now; _T:=now;
 Randomize;
 for i:=low(A) to high(A) do
   A[i]:=random(high(A));
 writeln ("Array done for "+inttostr(MilliSecondsBetween(_T,now))+" msec");

 _T:=now;
 writeln ("50000 element is "+inttostr(Get(50000)));
 writeln ("50000 element found for "+inttostr(MilliSecondsBetween(_T,now))+" msec");
 writeln;
 writeln ("Total time is "+inttostr(MilliSecondsBetween(T,now))+" msec");;
end.


PS. Мне хотелось протестировать рекурсивные алгоритмы, по результатам - Delphi быстрее раза в 2. А заполнение массива на FP вообще очень медленное - из-за функции Random.


 
Иван Шихалев ©   (2005-05-19 08:37) [41]

Ключики -Or, -Ou были выставлены?


 
TUser ©   (2005-05-19 10:13) [42]

Нет, все по умолчанию, если вы про [40].


 
Иван Шихалев ©   (2005-05-19 10:24) [43]

По умолчанию оптимизация практически отсутствует. Максимальная -G3p3ru (если хочется, чтоб шло на i386/486, то -G3p1ru)


 
TUser ©   (2005-05-19 10:24) [44]

Но вобщем, если поставить эти флаги, а еще хорошо и -О3, то рекурсии эти действительно быстрее работают, хотя random продолжает тормозить. Кстати, dcc32 и при включенной и выключенной оптимизацити одинаково работает.


 
Иван Шихалев ©   (2005-05-19 10:25) [45]

А умолчание корректно сравнивать разве что с Delphi с отключенной оптимизацией. Хотя и не совсем, возможно.


 
Иван Шихалев ©   (2005-05-19 10:27) [46]

Тьфу, имел в виду, конечно -OG3p3ru

Кстати, dcc32 и при включенной и выключенной оптимизацити одинаково работает.

А вот это странно...


 
Иван Шихалев ©   (2005-05-19 10:32) [47]

Насчет -O3 - глючит по черному, увы...


 
VMcL ©   (2005-05-19 13:02) [48]

>>TUser ©   (19.05.05 10:24) [44]

>Кстати, dcc32 и при включенной и выключенной оптимизацити одинаково работает.

Это не так. Скорее всего, Вы не выключали оптимизацию в IDE. DCC32 подтягивает настройки из CFG файла, AFAIR.


 
Иван Шихалев ©   (2005-05-19 13:22) [49]

А разве параметры командной строки не приоритетней CFG?


 
Jeer ©   (2005-05-19 13:28) [50]

После шаманства с опциями см. результат
http://hlab.newmail.ru


 
TUser ©   (2005-05-19 13:29) [51]

А у меня cfg вообще нет - набрано все в FAR"е, откомпилировано из командной строки. В IDE вообще не открывал.


 
TUser ©   (2005-05-19 13:35) [52]

Хотя, после отключения оптимизации в Delphi IDE, действительно помедленнее стало. Тогда вопрос - а зачем тогда вообще нужен -O в командной строке?


 
Иван Шихалев ©   (2005-05-19 13:39) [53]

Jeer ©   (19.05.05 13:28) [50]

-OGrup3p3 - супершаманство какое-то (не указан уровень основной оптимизации, зачем-то дважды указан тип процессора). По идее - -OGru2p3.


 
Jeer ©   (2005-05-19 14:31) [54]

Описка д.б. OGru3p3
По Вашей просьбе OGru2p3 см. там же


 
Иван Шихалев ©   (2005-05-19 14:45) [55]

В целом ожидаемо, но почему на Float FPC лучше?.. Странно.


 
Jeer ©   (2005-05-19 14:54) [56]

Размер exe
D5 - 62k
FP - 140k

До выноса в отдельный юнит и использования классов было
D5 - 40k
FP - 80k


 
VMcL ©   (2005-05-19 14:54) [57]

>><>TUser ©   (19.05.05 13:35) [52]

>Тогда вопрос - а зачем тогда вообще нужен -O в командной строке?

Опции командной строки имеют более высокий приоритет, чем опции проекта.


 
Jeer ©   (2005-05-19 15:17) [58]

Сортировка строк - на это стоит посмотреть

FP - 100%
D5 - 14%


 
Иван Шихалев ©   (2005-05-19 15:23) [59]

Офигеть


 
Иван Шихалев ©   (2005-05-19 15:25) [60]

А Дельфя часом не в каком-нибудь специальном порядке сортирует? Например "A"<"a"<"B"...


 
Jeer ©   (2005-05-19 16:32) [61]

Используется стд функция AnsiCompare.
В D5 это обертка над winapi CompareStr
Что в FP не знаю, но это может быть и не со сравнение связано, а с обменом через переменные.


 
Иван Шихалев ©   (2005-05-19 17:14) [62]

Все может быть... Но разница очень уж огромная... Если б FPC тормозил, я б еще понял, но у D5 - очень хороший оптимизатор...


 
Jeer ©   (2005-05-19 17:27) [63]

Следующая глава - работа с целыми числами
http://hlab.newmail.ru
На рекурсии FP проваливается, это точно.
А в остальном хорош.


 
Иван Шихалев ©   (2005-05-19 17:32) [64]

А какой тест по рекурсии?


 
False_Delirium ©   (2005-05-19 17:54) [65]

SetThreadPriority какой ?


 
Jeer ©   (2005-05-19 18:04) [66]

Иван Шихалев ©   (19.05.05 17:32) [64]
А ты посмотри там есть исходники - факториал, рекурсивно.

False_Delirium ©   (19.05.05 17:54) [65]
Все в равных условиях и особых проблем это не вызывает.


 
False_Delirium ©   (2005-05-19 18:16) [67]

Что значит в равных условиях ?
Смысл тестов непонятен, если есть вероятность погрешностию.


 
Jeer ©   (2005-05-19 18:20) [68]

False_Delirium ©   (19.05.05 18:16) [67]

Если мы с тобой бежим по одно дорожке и дует встречный ветер, то он дует обоим в лицо.

>есть вероятность
Вероятность есть всегда и во всем:)
Важнее ее величина.


 
False_Delirium ©   (2005-05-19 18:28) [69]

Jeer ©   (19.05.05 18:20) [68]

Мне не понятна технология проведения данных тестов. :)
По очереди запускаются два экзешника ?


 
Jeer ©   (2005-05-19 18:32) [70]

А что, надо одновременно ?

Или Вы считаете, что на компьютере в это время пишуться болванки, идет фильм, отдаются файлы и работает сотня пользователей одновременно ?


 
False_Delirium ©   (2005-05-19 18:41) [71]

Необходимо учесть, что может быть погрешность именно из-за этого.

Это не сложно - выставить приоритет ? Зато на душе спокойней. :)


 
Иван Шихалев ©   (2005-05-20 11:46) [72]

А нельзя ли для полноты картины сравнить еще с Virtual и TMT Pascal?


 
Jeer ©   (2005-05-20 12:29) [73]

Ребят, я ж не безразмерная:)

Когда-то сравнивал, не помню уж чем там дело кончилось.
Для начала пройдусь по разным видам тестов для FP/D5.
Собственно, меня поэтому и заинтересовала затея, т.к. рассматриваю возможность FP в embedded system на *nix платформах.


 
Jeer ©   (2005-05-20 12:31) [74]

P.S.
Если в этой ветке это мало кому интересно могу перейти во FreePascal, может и надо было с начала так сделать.

По поводу корректности измерения временных параметров - все путем и под контролем.
Не вижу особой необходимости с изменением приоритетов.


 
Иван Шихалев ©   (2005-05-20 12:49) [75]

Давай во Free Pascal. Или вовсе на http://freepascal.ru/forum/


 
Jeer ©   (2005-05-20 13:05) [76]

Иван Шихалев ©   (20.05.05 12:49) [75]

Ok.  На http://freepascal.ru/forum/
Сделайте там постоянную ссылку на hlab.newmail.ru,
ну а топик откроем.

Здесь тема закрыта.
(AutoModerator) :)


 
Иван Шихалев ©   (2005-05-20 13:19) [77]

Ссылка добавлена в "Ссылки - Delphi и Pascal"

OK - закрываем тему.



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.014 c
1-1116823928
Владимир
2005-05-23 08:52
2005.06.06
Защита диска А:


1-1116858567
Karlson
2005-05-23 18:29
2005.06.06
Результат NaN


1-1116499390
Grief
2005-05-19 14:43
2005.06.06
Клейкое окошко...


1-1116916439
Pavelkq
2005-05-24 10:33
2005.06.06
Переброска массивов


14-1116330006
pasha_golub
2005-05-17 15:40
2005.06.06
BCC32 --> Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский