ДельфинарийФорум

Бенчмарк (комментарии)

Страницы: 1 2 Следующая »
#0
14:03, 29 июня 2006

Бенчмарк (комментарии)

Это сообщение сгенерировано автоматически.

#1
14:03, 29 июня 2006

Это конечно здорово, но ты бы взял и сделать выборку из форума, написал результаты тестов, выложил ссылки на исходники, бинарники и пр. Тебе это будет сделать проще чем кому-либо из нас. Ты, все таки, участвовал в этом форуме (или просто его читал). Не у всех есть время и желание перечитывать болтовню трех-четырех человек.
Неужели тяжело сформировать нормальное новостное сообщение? Это кстати ко всем относится.

..bw

#2
15:50, 29 июня 2006

Там еще особо не на что давать ссылки. И результатов как таковых нет. Ибо тесты только лишь подбираются к какой-либо адекватности.
Цель этого поста вообще-то чтобы кто-нибудь FPC к тестам подключил.
А как будут результаты, так можно будет и новость сооветствующую по всем правилам написать.

#3
23:42, 29 июня 2006

Потестил FPC сам. Версия FPC 2.1.1 от 2005/05/29.

D7 - 247 FPS
FPC - 233 FPS
C++ - 229 FPS. Не совсем тождественна. Я бы Sin/Cos из цикла всеже бы убрал, да VS сейчас нет.
C# версия у меня не работает ни на одной машине. Хотя все вроде ставил что надо.

D7 и FPC сорцы+exe
C++ сорцы+exe

Че-то у FPC с оптимизацией не очень хорошо. Даже инлайны не спасают. :(

#4
15:34, 30 июня 2006

Обсуждали же на freepascal.ru что функция медленней процедуры раза в два ( http://www.freepascal.ru/forum/viewtopic.php?t=922&highlight=%EF%… 5%E4%F3%F0%FB ) . Перепишите нормально. это раз
И второе, FPC кроссплатформенный компилятор и в силу этого оптимизация у него недостаточна хороша.
Пишите лучше кроссплатформенный двиг.

Про сторочки типа такого

for i := 0 to _X_count*_Y_count*_Z_count-1 do

тоже писали и неоднократно и как они ускоряются.
и это

 s := sin(degtorad(_Angle));
 c := cos(degtorad(_Angle));

да, вот ещё есть

Result := Degrees * (PI / 180);

Сколько будет 3.14/180? Вот и запиши это число вместо этого

ну и напоследок

glVertex3f( 1.0,  1.0, -1.0);
glVertex3f( 1.0, -1.0, -1.0);

наверное лучше вот так записать

glVertex3i( 1,  1, -1);
glVertex3i( 1, -1, -1);

неправдали?

вот из-за таких мелочей и падает производительность в конечном итоге.

>>Че-то у FPC с оптимизацией не очень хорошо.
Ээээ это не у компилятора плохо с оптимизацией... %)) (шутка такая, но в каждой шутке...)

#5
16:27, 30 июня 2006

Не знаю как у вас с FPC но ваша версия у меня 622FPS, а скомпилированная мной в Lazarus(FPC2.0.2) даёт 689FPS, правда моя версия больше в два раза по размеру исполнимого файла(сейчас компилирую Lazarus со смартлинком, наверное размер должен быть как надо). Delphi версия выдаёт 702 FPS
Я только поменял OpenGL на GL, GLu %)

Вообщем после смартлинка Лазаруса FPS стал 690-702 мистика какая-то...

#6
23:25, 30 июня 2006

>Ээээ это не у компилятора плохо с оптимизацией... %))
Была проведена попытка выяснить именно оптимизации компилятором ;) Для этого специально был написан корявый алгоритм. Так там и без сортировки всё прекрасно работает. :)
>for i := 0 to _X_count*_Y_count*_Z_count-1 do
Между прочим в C# такие строчки и так оптимизируются ;)

#7
0:59, 1 июля 2006

>>Для этого специально был написан корявый алгоритм.
Ха ха ха ха ха ха ха ха ха ха ха....

#8
11:08, 1 июля 2006

Sniper
622 это моя FPC-версия, а Delphi версия 702?
Экзешник последнего билда, который FPC-версия и 690-702 FPS дает можешь на мыло прислать?
Да и FPC 2.0.2 разве не старее чем 2.1.1?

А алгоритм уже не корявый.
Функцию на процедуру я там заменил во внутреннем цикле, а потом и вовсе заинлайнил ручками.
PI/180 заменить результатом конечно можно, но не нужно, т.к. падает читабельность. Да и уж константы-то вычислять умеет даже мой самописный компилятор.
Как записывать вызовы отрисовки по идее пофиг - все оптимизируется в листах драйвером.

Вобщем разница в скорости кода мало чем может быть оправдана в данном случае, т.к. оптимизировать почти нечего. И уж точно не кроссплатформенностью.

Кстати, а как оптимизировать for i := 0 to _X_count*_Y_count*_Z_count-1 do ? Я че-то не примомню такого, кроме сомнительной смены направления.

#9
12:37, 1 июля 2006

>>for i := 0 to _X_count*_Y_count*_Z_count-1 do
оптимизируется до

var v:Integer;

v:=_X_count*_Y_count*_Z_count-1;
for i := 0 to v do

Отправил экзешник

#10
14:21, 1 июля 2006

Чего-то экзешника нет - ты на _mirage@... слал? С подчеркиванием?

А что касается этой оптимизации, то:
"The difference between this construction and the for...to statement is that the while loop reevaluates finalValue before each iteration"

Вопщем не вычисляется в for'ах finalvalue каждый раз.

#11
16:26, 1 июля 2006

Mirage
>>Чего-то экзешника нет - ты на _mirage@... слал?
ой. ниувидел ))
>>Вопщем не вычисляется в for'ах finalvalue каждый раз.
в D7 вычисляется

#12
16:33, 1 июля 2006

Sniper
>в D7 вычисляется
неа. Не файнал, не старт

program Project1;

{$APPTYPE CONSOLE}

var
 C: integer = 2;
 i: integer;

function Count: integer;
begin
 result:= C
end;

begin

 for i:= 1 to Count do begin
  writeln('nn');
  c:= 3;
 end;

 readln;
end.
#13
17:55, 1 июля 2006

Sniper: О, получил, спасибо.
Все равно чуть помедленней D7 и чуть побыстрее моего FPC.
В принципе такая разница незначительна. Хотя все ждут что FPC оптимизирует лучше чем Delphi, т.к. думают, что Delphi не оптимизирует вообще. Впрочем, это заблуждение - оптимищирует довольно неплохо.

>в D7 вычисляется

Дык цитата-то из хелпа к D7. Судя по генерируемому коду не врут.

#14
19:37, 1 июля 2006

а вот так?

program Project1;

{$APPTYPE CONSOLE}

var
 C: integer = 2;
 i: integer;

function Count: integer;
begin
 result:= C
end;

begin

 for i:= 0 to Count-1 do begin
  writeln('nn');
  c:= 3;
 end;

 readln;
end.

Delphi ставить пока лень... система новая... %)

Страницы: 1 2 Следующая »
ДельфинарийФорум

Тема в архиве.