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

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

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

Сообщение Unlock » 10.10.2005 01:50:46

Всем привет! Честно признаюсь что пишу на удачу ;) Есть следующий вопрос. Сделал мне человек каталог из программы на 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. С разработчиком на подобную тему врядли получится договориться, т.к. это его хобби, и он занимается свой программой только когда есть свободное время, а бывает это очень редко.
Unlock
незнакомец
 
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Sniper » 10.10.2005 11:10:20

Самое простое это понавставлять 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 » 10.10.2005 11:30:47

да и ещё есть такая изумительная переменная как Result =)
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Unlock » 10.10.2005 13:09:00

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

Сообщение Sniper » 10.10.2005 13:49:44

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} и проверьте произодительность.
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение PVOzerski » 10.10.2005 15:34:32

Насчет inline - пожалуйста, поосторожнее!. А то там в некоторых функциях with попадается, а пока FPC кушает такое сочетание не всегда :(
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Сообщение Sniper » 10.10.2005 16:17:41

функция with это тоже своего рода оптимизатор хоть и маленький =)
да и потом inline хорошо в маленьких по объёму функциях юзать
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Unlock » 11.10.2005 11:12:51

Народ, спасибо огромное за советы!
Я так понял самое просто что могу сделать это добавить {$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} ?
Unlock
незнакомец
 
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Sniper » 11.10.2005 19:26:15

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

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

inline тоже нужно поставить
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Unlock » 07.11.2005 01:00:36

Спецы Паскаля, кто возьмется за разумную оплату оптимизировать код программы и повысить скорость работы? Пишите на почту. Очень надеюсь на вашу помощь.
Unlock
незнакомец
 
Сообщения: 6
Зарегистрирован: 10.10.2005 01:25:33

Сообщение Janus » 07.11.2005 18:43:18

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

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

А вообще, чтобы такого не возникало, программист должен приучать себя писать изначально правильный и эффективный код.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение ev » 07.11.2005 21:15:14

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

Сообщение Unlock » 08.11.2005 02:29:47

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

Сообщение Иван Шихалев » 08.11.2005 03:25:48

Постановка задачи как таковая есть? Дело в том, что, похоже, без рефакторинга серьезного увеличения производительности не добиться...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург


Вернуться в Потрепаться

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

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

Рейтинг@Mail.ru