Проверка кода программы на FreePascal

Любые обсуждения, не нарушающие правил форума.

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

Ответить
Unlock
незнакомец
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Unlock »

Всем привет! Честно признаюсь что пишу на удачу ;) Есть следующий вопрос. Сделал мне человек каталог из программы на FreePascal+MySQL+PHP, но программу на Паскале писал другой человек. Каталог работает, но скорость не совсем такая как хотелось бы, почему не понятно. Есть подозрение что алгоримт работы программы на FreePascal не самый оптимальный, хотя может тут объективные проблемы. Может кто-нибудь глянет исходники, на предмет грубых ошибок или вообще на предмет оптимизации работы программы? Вот здесь исходник:
<a href='http://merian.pch.univie.ac.at/pch/download/chemistry/checkmol/checkmol.pas' target='_blank'>http://merian.pch.univie.ac.at/pch/downloa...ol/checkmol.pas</a>
Если на подобные темы возможно только платная консультация (я ценю чужое время) и есть конкретные предложения, то пишите на мыло или здесь. Сразу извиняюсь если мои вопросы слишком ламерские, я совсем ничего не понимаю в FreePascal :(
P.S. С разработчиком на подобную тему врядли получится договориться, т.к. это его хобби, и он занимается свой программой только когда есть свободное время, а бывает это очень редко.
Sniper
постоялец
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper »

Самое простое это понавставлять inline в функциях типа
function add_3d(p1,p2:p_3d):p_3d;
function subtract_3d(p1,p2:p_3d):p_3d;
...
а также, если есть поддержка SSE, то в начале модуля написать
{$FPUTYPE SSE}


Но если честно, то без профайлера тут делать нечего.. да и на утички нужно проверить..

Нужна ли вам двойная точность (double)? Может Single тоже подойдёт?
Просто Single намного быстрее.
Sniper
постоялец
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper »

да и ещё есть такая изумительная переменная как Result =)
Unlock
незнакомец
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Unlock »

Sniper
Спасибо за ответ! Боялся что вообще никакого ответа не будет. Но правда как я уже говорил, ничего не понимаю во FreePascal :(
1) Что дает inline?
2) SSE это что и где должна быть поддержка? :)
3) Переменная Result что дает:)
Ну и главный вопрос, взялись ли бы вы все это реализовать, чтобы сравнить результат? За разумные деньги, бесплатно не прощу, ибо тратить чужое время "нахаляву" считаю преступлением :)
Sniper
постоялец
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper »

1. Inline даёт "халявный" прирост производительности если функция простая и вызывается огромное число раз

2. SSE это набор дополнительных инструкций процессора которые предназаначены для узкого круга задач. Проддержка должна быть процессором, но для вашего случая лучше чтобы держался SSE2 - это работа с double числами которых у вас в программе очень и очень много (процессоры AMD64, AthlonXP Barton, Pentium4, Pentium 3xx,6xx,8xx обладают поддержкой SSE2), SSE есть начиная с Pentium III и AthlonXP

3. ну просто так как он написал ща не пишут... %-) незнаю как это отразится на быстродействии...

P.s inline вставить это работы на 15 мин =)
pp.s если разбираться с программой при помощи профайлера, то нужночтобы программа реально работала... как её можно заставить что-нить считать?

Вообщем если у вас хороший процессор то в начале исходника добавьте
{$FPUTYPE SSE2} или {$FPUTYPE SSE} и проверьте произодительность.
PVOzerski
постоялец
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб
Контактная информация:

Сообщение PVOzerski »

Насчет inline - пожалуйста, поосторожнее!. А то там в некоторых функциях with попадается, а пока FPC кушает такое сочетание не всегда :(
Sniper
постоялец
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper »

функция with это тоже своего рода оптимизатор хоть и маленький =)
да и потом inline хорошо в маленьких по объёму функциях юзать
Unlock
незнакомец
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Unlock »

Народ, спасибо огромное за советы!
Я так понял самое просто что могу сделать это добавить {$FPUTYPE SSE2} (на серваке процессор P4). Не хочу ошибиться, поэтому уточняю. Сейчас программ начинается с:
*)

//{$DEFINE debug}

uses
SYSUTILS, MATH;


const
version = '0.3j';
max_atoms = 1024;
max_bonds = 1024;
max_ringsize = 128;
max_rings = 1024;
max_fg = 256;
max_neighbors = 16; // new in v0.2h
TAB = #26;

В какое конкретно место вставить {$FPUTYPE SSE2} ?
Sniper
постоялец
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper »

в самое верхнее =))

советую не обольшаться .. производительность не поднимется даже в половину... хорошо если на 1/50 =))

inline тоже нужно поставить
Unlock
незнакомец
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Unlock »

Спецы Паскаля, кто возьмется за разумную оплату оптимизировать код программы и повысить скорость работы? Пишите на почту. Очень надеюсь на вашу помощь.
Janus
постоялец
Сообщения: 134
Зарегистрирован: 07.11.2005 16:06:49

Сообщение Janus »

Там полно смол'интов, шорт'интов и пр., убрать их нафиг и заменить на integer.

А вообще, че вы паритесь? Ну будет программа работать на четверть секунды быстрей, ну и что? Ну кто это заметит? Да современные приложения только загружаются секунд по 5-10, показывают всплывающие окна и пр. лабуду, а это кого-нибудь смущает? Не экономьте на долях секунды, пожалейте себя и свое время.

А вообще, чтобы такого не возникало, программист должен приучать себя писать изначально правильный и эффективный код.
ev
долгожитель
Сообщения: 1786
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение ev »

раз важно время выполнения, то скорее всего эта программа используется для потоковой обработки данных - а там скорость ой как важна
Unlock
незнакомец
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Unlock »

Народ, я не с проста прощу. На основе этой программы работает онлайн каталог. И для некоторых опциях поиска он может занимать до 1-2 минут и при этом проц на серваке загружается на 70%. Дело в том, что автор написал программу как хобби и у него скорость работы не так критична, как для моего проекта и он не будет работать над ней в плане увеличения скорости работы.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Постановка задачи как таковая есть? Дело в том, что, похоже, без рефакторинга серьезного увеличения производительности не добиться...
Ответить