Бенчмарк (комментарии)
Это сообщение сгенерировано автоматически.
Это конечно здорово, но ты бы взял и сделать выборку из форума, написал результаты тестов, выложил ссылки на исходники, бинарники и пр. Тебе это будет сделать проще чем кому-либо из нас. Ты, все таки, участвовал в этом форуме (или просто его читал). Не у всех есть время и желание перечитывать болтовню трех-четырех человек.
Неужели тяжело сформировать нормальное новостное сообщение? Это кстати ко всем относится.
..bw
Там еще особо не на что давать ссылки. И результатов как таковых нет. Ибо тесты только лишь подбираются к какой-либо адекватности.
Цель этого поста вообще-то чтобы кто-нибудь FPC к тестам подключил.
А как будут результаты, так можно будет и новость сооветствующую по всем правилам написать.
Потестил 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 с оптимизацией не очень хорошо. Даже инлайны не спасают. :(
Обсуждали же на 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 с оптимизацией не очень хорошо.
Ээээ это не у компилятора плохо с оптимизацией... %)) (шутка такая, но в каждой шутке...)
Не знаю как у вас с FPC но ваша версия у меня 622FPS, а скомпилированная мной в Lazarus(FPC2.0.2) даёт 689FPS, правда моя версия больше в два раза по размеру исполнимого файла(сейчас компилирую Lazarus со смартлинком, наверное размер должен быть как надо). Delphi версия выдаёт 702 FPS
Я только поменял OpenGL на GL, GLu %)
Вообщем после смартлинка Лазаруса FPS стал 690-702 мистика какая-то...
>Ээээ это не у компилятора плохо с оптимизацией... %))
Была проведена попытка выяснить именно оптимизации компилятором ;) Для этого специально был написан корявый алгоритм. Так там и без сортировки всё прекрасно работает. :)
>for i := 0 to _X_count*_Y_count*_Z_count-1 do
Между прочим в C# такие строчки и так оптимизируются ;)
>>Для этого специально был написан корявый алгоритм.
Ха ха ха ха ха ха ха ха ха ха ха....
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 ? Я че-то не примомню такого, кроме сомнительной смены направления.
>>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
Отправил экзешник
Чего-то экзешника нет - ты на _mirage@... слал? С подчеркиванием?
А что касается этой оптимизации, то:
"The difference between this construction and the for...to statement is that the while loop reevaluates finalValue before each iteration"
Вопщем не вычисляется в for'ах finalvalue каждый раз.
Mirage
>>Чего-то экзешника нет - ты на _mirage@... слал?
ой. ниувидел ))
>>Вопщем не вычисляется в for'ах finalvalue каждый раз.
в D7 вычисляется
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.
Sniper: О, получил, спасибо.
Все равно чуть помедленней D7 и чуть побыстрее моего FPC.
В принципе такая разница незначительна. Хотя все ждут что FPC оптимизирует лучше чем Delphi, т.к. думают, что Delphi не оптимизирует вообще. Впрочем, это заблуждение - оптимищирует довольно неплохо.
>в D7 вычисляется
Дык цитата-то из хелпа к D7. Судя по генерируемому коду не врут.
а вот так?
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 ставить пока лень... система новая... %)
Тема в архиве.