Raytracing: FPC vs Java

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

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

Raytracing: FPC vs Java

Сообщение Mirage » 04.02.2017 21:17:57

В этой теме была приведена занятная демка с рейтрейсингом. В реализации на C, Java и FPC. Причем по скорости лидирует Java, а не C, как можно было бы подумать.

Я привел демки к такому виду, чтобы они выдавали одинаковую картинку и немного оптимизнул версию на FPC.
В этой теме можно скачать все версии.

Текущий результат на моей машине (64bit Linux): FPC 21 FPS, Java 24 FPS.
Кому интересно, может подогнать C-шную версию, или оптимизировать паскалевскую, чтобы она обогнала тормозную яву.:)
Mirage
энтузиаст
 
Сообщения: 696
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Raytracing: FPC vs Java

Сообщение скалогрыз » 05.02.2017 06:33:20

:?
подобные "вызовы" появляются регулярно. Приходит кто-нить и начинает вопить "а вот FPC тут недотягивает".
И развитие событий обычно такое: либо набегают и предлагают выставить ключики оптимизации, либо предлагают иной алгоритм, который по скорости изначальный превосходит.

В общем и целом, немножко бесполезное время препровождения. Ну кроме как азарт вызова, или научится чем-нибудь.

Правильное решение, это чтобы компилятор мог из коробки собирать быстрый код. Без дополнительного допиливания со стороны программиста (вроде замены работы с массивами через индекс на указатели, или написание кода так, чтобы оптимизатору стало понятно).
А что это значит - это значить нужно патчить компилятор.

Т.е. соревнование на уровне - корпоративный компилятор с сотней программистов против команды добровольцев в 10 человек.

Победителем нужно считать не того, кто перепишет (конкретно этот алгоритм/задачу) на более быструю версию, а кто пришлёт патч в компилятор, и патч при этом будет принят.

попкорном запасаться не буду, но если кто расскажет чем закончилось, буду признателен.

ЗЫ: паскаль тем хорош, что нативен, и если нужно какой-то процесс оптимизировать, но можно подлючить библиотеку написанную на Си :mrgreen: (например jpglib, или даже zlib!)....
ЗЗЫ: интереснее будет сравнить с llvm версией, когда она будет дописана.
скалогрыз
долгожитель
 
Сообщения: 1612
Зарегистрирован: 03.09.2008 02:36:48

Re: Raytracing: FPC vs Java

Сообщение Mirage » 05.02.2017 14:35:16

Этот случай интересен тем, что во-первых это реальная задача, а не синтетика какая-нибудь. Замена индекса указателями, кстати, не поможет, т.к. тут доступ на чтение не последовательный. А запись во фреймбуфер можно вообще убрать, скорость от этого не зависит.
Во-вторых те самые ключи оптимизации. Их много, но реальный эффект заметен только от {$FPYTYPE SSE3}, который не ключ оптимизации вовсе.
Закралась мысль, что ими надо как-то хитро пользоваться. Пока никто точно не сказал.
Кстати, один из циклов довольно тривиально разворачивается, что и было сделано вручную. И это дает некоторый прирост. Почему оптимизация LOOPUNROLL не срабатывает? Что она тогда делает?
В-третьих к вопросу насчет допиливания кода - я не против допиливать в критичных участках, но надо бы понимать как и что допиливать, чтобы помочь оптимизатору. Пока у меня такого понимания нет.
Кстати, inline работает четко. В Delphi, помню, с этим были сложности.
Mirage
энтузиаст
 
Сообщения: 696
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Raytracing: FPC vs Java

Сообщение beria » 05.02.2017 14:38:08

Mirage писал(а):Кстати, inline работает четко


попробуйте в фрипасе написать инлайн процедуру на ассемблере )))) Если что, то даже в TP3 можно было написать inline(_процессорные инструкции через запятую_);
Аватара пользователя
beria
постоялец
 
Сообщения: 103
Зарегистрирован: 29.09.2016 08:57:13

Re: Raytracing: FPC vs Java

Сообщение alexey38 » 06.02.2017 09:24:06

скалогрыз писал(а):Правильное решение, это чтобы компилятор мог из коробки собирать быстрый код. Без дополнительного допиливания со стороны программиста (вроде замены работы с массивами через индекс на указатели, или написание кода так, чтобы оптимизатору стало понятно).
А что это значит - это значить нужно патчить компилятор.


Это не всегда хорошо.

Конечно бывают просто кривые компиляторы, которые просто создают не оптимальный код, тогда просто нужно сменить компилятор.

А когда компилятор хороший, то по существу вопроса ускорения из ниоткуда не возьмутся, по факту идет изменение самого алгоритма со стороны компилятора. И чем более высокоуровневый язык, тем больше у него прав вносить изменения в алгоритм.

Вот условно говоря чем хорош язык "С", а тем, что он как и ассемблер создает именно тот код, который написал программист, а не тот, который захотел компилятор. Поэтому, например, драйвера куда легче писать на "С", чем на более высокоуровневых языках, т.к. не возникает неявного кода.

Какой код создает Java я не знаю, как смотреть. Но код, получаемый Паскалем и С понятно как смотреть (например, в отладчике), соответственно глядя на код можно понять, почему работает медленно, какие лишние действия включил компилятор.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Raytracing: FPC vs Java

Сообщение Лекс Айрин » 06.02.2017 10:01:27

alexey38 писал(а):Вот условно говоря чем хорош язык "С", а тем, что он как и ассемблер создает именно тот код, который написал программист, а не тот, который захотел компилятор.


весьма условно. Даже ассемблер добавляет кучу кода не написанного программистом.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3079
Зарегистрирован: 19.02.2013 16:54:51

Re: Raytracing: FPC vs Java

Сообщение Снег Север » 06.02.2017 10:35:20

alexey38 писал(а):соответственно глядя на код можно понять, почему работает медленно, какие лишние действия включил компилятор.
Полезно только для разработчиков компиляторов, драйверов и низкоуровневых библиотек. Для всех остальных не только бессмысленно, но просто вредно тратить драгоценное время на такое. Намного лучше потратить время на освоение интерфейса к готовым оптимизированным и специализированным инструментам. Например, как тот же рейтрейсинг организовать из паскалевской программы средствами CUDA, а не мучать несчастный фрипаскаль несвойственными ему задачами.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 800
Зарегистрирован: 27.11.2007 16:14:47

Re: Raytracing: FPC vs Java

Сообщение kazalex » 06.02.2017 10:50:14

Снег Север писал(а):а не мучать несчастный фрипаскаль несвойственными ему задачами

Паскаль язык общего назначения, у него нет несвойственных задач.
kazalex
постоялец
 
Сообщения: 294
Зарегистрирован: 01.06.2012 14:54:10

Re: Raytracing: FPC vs Java

Сообщение Лекс Айрин » 06.02.2017 11:29:12

kazalex писал(а):Паскаль язык общего назначения, у него нет несвойственных задач.


это как амбидекстр... умеет все (и любой рукой), но плохо. На самом деле, все не настолько плохо, но все же для специализированных задач есть более заточенные ЯВУ. Да и есть возможность добавить чисто ассемблерный код, если скорость не устраивает.
И, кстати, си не настолько низкоуровневый язык, чтобы серьезно рассматривать его как замену ассемблеру. Ну а возможность выстрелить в ногу, руку и даже голову... настораживает.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3079
Зарегистрирован: 19.02.2013 16:54:51

Re: Raytracing: FPC vs Java

Сообщение Снег Север » 06.02.2017 12:47:58

kazalex писал(а):
Снег Север писал(а):а не мучать несчастный фрипаскаль несвойственными ему задачами
Паскаль язык общего назначения, у него нет несвойственных задач.
Фрипаскаль и делфи не оптимизированы под быстрые вычисления. Можно, конечно, сказать, что это проблема реализации, но факт остается фактом. Они выигрывают на другом.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 800
Зарегистрирован: 27.11.2007 16:14:47

Re: Raytracing: FPC vs Java

Сообщение kazalex » 06.02.2017 17:12:49

Лекс Айрин писал(а):Да и есть возможность добавить чисто ассемблерный код, если скорость не устраивает.

С нормальным компилятором ассемблер не нужен, ну или почти не нужен.
Снег Север писал(а):Можно, конечно, сказать, что это проблема реализации, но факт остается фактом

Именно. Реализация, но не язык.
kazalex
постоялец
 
Сообщения: 294
Зарегистрирован: 01.06.2012 14:54:10

Re: Raytracing: FPC vs Java

Сообщение Лекс Айрин » 06.02.2017 18:10:47

kazalex писал(а):С нормальным компилятором ассемблер не нужен, ну или почти не нужен.


Хотел бы я найти НОРМАЛЬНЫЙ компилятор... крайний, если я правильно помню, был какой-то супероптимизирующий паскаль (минимальный размер файла после компиляции 2 (или 4, уже точно не помню) байта! Рекорд не превзойти, так как там идет только инструкция выхода из программы), но найти его я не смог((( предыдущим, если не изменяет память, компилятор фортрана годов так 60-70гг. 20 века (сложный тест производительности был провален, так как компилятор вычислил значение формулы в процессе оптимизации)... Си одни ругали, другие хвалили,.. но вытеснить фортран полностью он так и не смог.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3079
Зарегистрирован: 19.02.2013 16:54:51

Re: Raytracing: FPC vs Java

Сообщение kazalex » 06.02.2017 19:14:42

Лекс Айрин писал(а):если я правильно помню, был какой-то супероптимизирующий паскаль

Уж не о топспиде-ли речь...
kazalex
постоялец
 
Сообщения: 294
Зарегистрирован: 01.06.2012 14:54:10

Re: Raytracing: FPC vs Java

Сообщение Лекс Айрин » 06.02.2017 19:26:30

Насколько я помню, это был отдельный продукт, а это скорее пакет компиляторов.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3079
Зарегистрирован: 19.02.2013 16:54:51


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

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

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

Рейтинг@Mail.ru