опция оптимизации

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

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

Сообщение shade » 24.08.2007 20:35:40

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

Сдругой стороны, если вы не пишите систему реального времени, то велика ли беда если - программа отработает за две минуты, а не за одну? Оправдает ли это ваши потуги на такую оптимизацию?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Рождённый_в_СССР » 24.08.2007 23:37:18

чудес не бывает... попробуйте включить функции emms (модуль mmx и опции {$mmx+} и {$FPUTYPE SSE2})
так же есть вроде модуль matrix, где помойму заложены операции умножения матриц... но насчёт последнего ничего сказать не могу )
кроме того - действительно существуют нормальные алгоритмы умножения матриц, а не такие решения влоб
я делал нелинейную оптимизацию и там это умножение матриц 5000*5000 занимало ну не более 10 секунд, прадва задача была в целых числах и естестна не влоб решалось, но не настолько же всё плохо в вашем случае)

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

Паскаль у меня выдает 63 секунды (с sse2) на ноуте CeleronM 1.5Ghz,
без sse2 - 98 сек... что вполне нормально для 1.5Ghz... обясняю почему... вы там про 20 сек кажется утверждали?
ок...
если буквально посчитать все операции - получится весёлая статистика:
2000*2000*2000 = 8 000 000 000... назовём это числом X
2000*2000 = 4 000 000 = Y
2000 = Z

глядим тупо на цикл:
Код: Выделить всё
  for j:= 1 to n do begin  // Z раз (инкремирвание)
    for i := 1 to n do begin       // Y раз (инкремирование)
      s := 0.0;                        // Y раз (Помещение mov [mem64(!!!)],reg )
      for k := 1 to n do               // X раз (инкремирование)
        s := s + a[i,k]*b[j, k];     // 5X раз (1 сложение 64битного регистра, 2 взятие 64-переменной из памяти, 1 умножение (всё конечно с плавающей запятой !!!), 1 помещение в память)
                                            // X раз jmp назад в цикл
      c[i,j] := s;                      // Y раз (перемещение в память)
    end;                                 // Y раз jmp назад в цикл
  end;                                   // Z раз jmp назад в цикл


посчитанны ТОЛЬКО элементарные операции, которые надо выполнять процессору в ЛЮБОМ СЛУЧАЕ, к ним ещё по хорошему много чего довесить нада... но не будем, ради частоты эксперемента )

получаем чесных
(7X+4Y+2Z)/20=2 801 600 200 операций/секунду

причём некоторые с плавающей точкой... забавно...

только если учесть что у вас все операции по 1 тику, может действительно за 20 секунд это и возможно... однако то же
умножение: ~10 на P6 и ~50 на P5... а + ещё то что многозадачность ОС - другие потоки/прерывания/исключения ресурсы кушают...
итого нам минимум либо 6ГГц надо, либо паралельное исполнение 4-мя ядрами/процессорами, либо фортран где-то всё таки халтурит... поэтому мне кажется сначало надо разобрать чего там за опция такая... а то сложно понять почему такая разница в скорости... и каким образом выполняется столько операций в секунду...

я склонаяюсь к халтуре фортрана... наверное он понимает, что в конце мы далеко не всю расчитанную информацию выводим - и потому многое может опускать - попробуйте кинуть в файл с фортрана и с FPC свою матрицу C :) потому как ИМХО выполнить этот цикл за 20 секунд полностью на современных персоналках невозможно никак... без ухищрений

хотя конечно вероятнее всего дело в другом... насколько я помню этот g77 вроде как разбирает фортран до каких-то опкодов и предаёт компиляцию gcc... могу и заблуждаться - но очевидно надо там рыться в причинах такого безобразия...

что это значит - я пока не понимаю в полной мере) так как лень ставить GNU-семейство по идейным соображениям... но думаю мейби в этом дело... хотя там и других туманных для меня фраз полно ) в любом случае ведущих к халтуре )

если всё таки фотран не халтурит - я могу попробывать написать оптимальный код на асме с использованием sse2, явно выполнив, все описанные инструкции - думаю выигрыш будет максимум в 1/5-2/5 части... а чего там такого придумать, чтобы не исполнять эти инструкции, и при этом они были выполнены, как требует программа я вообще не представляю... буду надеятся что кто-то выдернит мне код, который выдает этот g77, чтобы я внимательно порассуждал над ним :)

p.s. чудес то не бывает )))
Последний раз редактировалось Рождённый_в_СССР 25.08.2007 08:41:58, всего редактировалось 1 раз.
Аватара пользователя
Рождённый_в_СССР
новенький
 
Сообщения: 65
Зарегистрирован: 08.08.2007 01:03:26
Откуда: Саратов

Сообщение Физик » 25.08.2007 05:55:50

shade писал(а):Сдругой стороны, если вы не пишите систему реального времени, то велика ли беда если - программа отработает за две минуты, а не за одну? Оправдает ли это ваши потуги на такую оптимизацию?


Согласен, 1 мин. или 3 - разницы нет, а вот месяц или 10 дней - есть, тем более, что на всех общедоступных вычислительных кластерах установлена квота по времени.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение Физик » 25.08.2007 06:12:07

Рождённый_в_СССР писал(а):и поясните чего конкретно делает опция, которая в 5 раз ускоряет? я чего то не понимаю что там такое может быть...


Если бы я понимал....

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

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

К тому же, как известно статистика не врёт, так вот большинство исследователей для расчётов всё таки используют Фортран, среди них много умных и опытных людей, не зря же FORTRAN - FORmula TRANslation.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение Рождённый_в_СССР » 25.08.2007 09:03:51

Физик писал(а):Если бы я понимал....

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

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

К тому же, как известно статистика не врёт, так вот большинство исследователей для расчётов всё таки используют Фортран, среди них много умных и опытных людей, не зря же FORTRAN - FORmula TRANslation.


ну и напрасно вы так ) у меня специальность по диплому - радиофизика и электроника - и тем не менее работаю программистом, потому как знаю не только значение результата, но и его цену... вот тем методом, который вы написали - никто матриц на практике не умножает ) в худшем случае Штрассеном пользуются - если лень думать о природе матриц...

а сравнивать fortran с Паскалем - это помойму глупо... вы его ещё с VHDL сравните... в фортране нет таких функций, чтобы притендовать на ту область, в которой крутится Паскаль, хотя конечно язык со своей богатой историей... но в любом случае

ЗАЧЕМ ВЫ ТОГДА ВООБЩЕ взялись за программирование если вам нужен результат а не процесс его получения? Вас уже давно ждут пакеты MatLAB, MatCAD, Mathemetica и прочее... и представьте себе там это умножение делается и по Штрассену и с проверками расходимости всякими и с оптимизацией разряженных матриц и вообще сначала она приводиться к удобному виду и от вас вообще ничего не надо... всегда под рукой все алгоритмы, в которые лезть даже не нада - программисты о вас уже позаботились, чтобы вы не мучались с такими вещами как решения в лоб, например, и изучение программирования, которое вам и не нужно... если потребуется - в этих пакетах есть и удобное представление результата (графикой/в файл/ даже wav файл можно записать с сигнала и послушать :)) есть так же и всякие элементы программирования - подключение внешних файлов, циклы и прочее... не лезьте уж в программирование - оно не много потеряет от людей с таким подходом...

посморел - у меня на ноуте 1.5GHz Mathematica например выдает за
[7.721001 sec]

~ 8 секунд готовый результат перемножения случайно забитых матриц 2000*2000 ) вам слабо на фортране? если решать в лоб ) думаю не догоните - впринципе можно пойти дальше и побитно делать вашу задачу, тогда да... на Паскале она будет и 2 часа исполнятся, вы сразу в этот результат цельтесь ) если вам нужен именно результат а не процесс... вы представляете 2 часа считать будет )

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

ИМХО )...
Аватара пользователя
Рождённый_в_СССР
новенький
 
Сообщения: 65
Зарегистрирован: 08.08.2007 01:03:26
Откуда: Саратов

Сообщение Brainenjii » 25.08.2007 10:55:55

Хм, я, конечно, профан в области оптимизаций, и кроме как пузырьком сортировать не умею, но вот в приведенной на этом форуме тесте производительности G95 несколько уступает fpc...
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Физик » 25.08.2007 12:44:26

Рождённый_в_СССР писал(а):вот тем методом, который вы написали - никто матриц на практике не умножает )


Это только тестовая программа, только для сравнения быстродействия.

Рождённый_в_СССР писал(а):Вас уже давно ждут пакеты MatLAB, MatCAD, Mathemetica и прочее


Считаю, что это "чёрные ящики". Да и задач действительно серьёзных с их помощью не решить, иначе бы вычислительные кластеры были забиты ими. Однако, если интресно, то штатным языком любого кластера является именно Фортран.

Рождённый_в_СССР писал(а):не лезьте уж в программирование - оно не много потеряет от людей с таким подходом...


Ну если Вы такой человек, от которого программирование много потеряет, то оптимизируйте компилятор FPC до уровня Фортрана, исходники же выложены.

Я не программист и не претендую на это, мне не надо разрабатывать новые методы, алгоритмы и языки программирования, но использовать и выбирать из них оптимальный для моей задачи - моё право. А если Вы считаете себя программистом, то получается это Ваша привелегия -разработка компиляторов для различных целей, в том числе и для проведения ресурсоёмких вычислений.

Рождённый_в_СССР писал(а):а если всё таки вы решитесь и захотите понять программирование - то я могу вам после понедельника написать нормальный алгоритм переменожения для сравнения с вашим, который конечно по минуте считать не будет


Не надо... перемножать матрицы это не актуально тем более
Рождённый_в_СССР писал(а):занят по уши



Успехов в программирование!
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение Физик » 25.08.2007 12:46:00

Brainenjii писал(а):G95 несколько уступает fpc


Возможно это связано со спецификой задачи.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение ev » 25.08.2007 13:02:25

Считаю, что это "чёрные ящики".

если не идти в дебри компиляторов (а вы сами сказали, что не хотите туда идти), то любой компилятор для вас также является черным ящиком

я знаю много людей (занимающихся подобными задачами) и ни одного кто бы это делал на фортране - паскаль, си или маткад/подобные

в вашем случае боюсь фортран идет просто по инерции
невыгодно переделывать такое огромное количество средств и переучивать толпу народа... не у вас в одной сфере так - это повсеместное явление :(
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение Физик » 25.08.2007 21:10:03

ev писал(а):то любой компилятор для вас также является черным ящиком


Согласен, но этот ящик, по краней мере, на уровень ниже, чем
Рождённый_в_СССР писал(а):пакеты MatLAB, MatCAD, Mathemetica и прочее


ev писал(а):я знаю много людей (занимающихся подобными задачами) и ни одного кто бы это делал на фортране - паскаль, си или маткад/подобные


мне интересны люди, например с http://www.parallel.ru/, у Вас может быть другия пристрастия.

ev писал(а):в вашем случае боюсь фортран идет просто по инерции


Да, инерция была, решил попробовать что-то новое (FPC) - не оправдалось.


ev писал(а):невыгодно переделывать такое огромное количество средств и переучивать толпу народа... не у вас в одной сфере так - это повсеместное явление


Не понял о чём это: кто чего....?
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение SovNarKom » 25.08.2007 21:23:16

Физик
Вы понимаете в чём дело... FPC компилятор кроссплатформенный... поддерживает разные процессоры...Написать оптимизирующий компилятор под конкретный процессор не такая простая задача, а под 5 процессоров вообще очень сложно.

Ожидать от FPC максимальной производительности пока рано.
Хотя, положа руку на сердце, отмечу: в случаях, когда требуется выжать максимальную производительность сразу на нескольких процессорах - всё равно применяют ассемблер. Для каждого процессора пишется оптимальный код, а потом, в процессе работы программы можно подставить нужный (такой подход, например, применяется в некоторых игровых движках).

У Вас же ситуация, как я понимаю несколько иная: для конкретных кластеров написать программу, которая 2 недели будет что-то считать?

Ну так нужно писать под этот кластер, на асме.
Хотя конечно, если на написание уйдёт больше времени, чем на вычисление - лучше использовать то, к чему привыкли.

зы
Хотя мне всё же пока не понятно, как какая-то оптисмизация даёт такой большой прирост производительности. не факт что эффект повториться на другом примере.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Рождённый_в_СССР » 25.08.2007 22:40:37

Физик писал(а):
Рождённый_в_СССР писал(а):Вас уже давно ждут пакеты MatLAB, MatCAD, Mathemetica и прочее


Считаю, что это "чёрные ящики". Да и задач действительно серьёзных с их помощью не решить, иначе бы вычислительные кластеры были забиты ими.


а вы знаете там баги, которые вам помешают???
это серьёзные комерческие пакеты, над которыми трудятся отнюдь не дураки, используют инженеры по всему миру и считается стандартом компьютерного моделирования где-то с середины 90-х. В МГУ и МФТИ на математических/физических/технических специальностях изучение работы с подобными продуктами - сейчас обязательный элемент в программе... даже у меня был годовой курс по MatLAB. Однако вы считаете это черным ящиком, в то время как ваш фортран уже давно настолько устарел марально - что вряд ли найдёшь сейчас даже несколько школ где ему учат...


Однако, если интресно, то штатным языком любого кластера является именно Фортран.

первый раз слышу. я кластерами не занимался - но тем не менее по долгу службы видел порядка 20 кластерных систем в различных местах и для различных цлей - моего университета, предприятия, кроме того был на выставках в Германии и Америке, нигде не видел кластеры под фортраном... только Си(на Unix-like) и ассемблере (вернее каких-то специфических вариаций ассемблера под разные процессоры)... или мне всё таки как-то невезло встретить этот "любой" кластер... либо за последние два месяца (с прошлой выставки) всё так резко поменялось?
скажите пожалуйста какие из процессоров подерживает ваш фортран на кластере? мне почему то кажется, что интелом/амд всё ограничивается...
Аватара пользователя
Рождённый_в_СССР
новенький
 
Сообщения: 65
Зарегистрирован: 08.08.2007 01:03:26
Откуда: Саратов

Сообщение Физик » 26.08.2007 07:58:35

Рождённый_в_СССР писал(а):вряд ли найдёшь сейчас даже несколько школ где ему учат...


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

Рождённый_в_СССР писал(а):из процессоров подерживает ваш фортран на кластере?

например http://parallel.ru/cluster/hardware.html

Кстати в Linux Fortran77 уже прошит в систему. Зачем они это делают...?

SovNarKom писал(а):всё равно применяют ассемблер

это язык другого уровня

SovNarKom писал(а):не факт что эффект повториться на другом примере.

Буду надеятся..

SovNarKom писал(а):для конкретных кластеров написать программу,

Вычислительные кластеры, как правило, однотипны.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение ev » 26.08.2007 10:14:03

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

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

у меня вот был даже курс вижуал-бейскика с бездарным преподавателем... мне он не пригодился... но меня им не испортили... сложно даже представить себе такое :lol:

Был сегодня в книжном всё - завалено Паскалем, Си, Бейсиком и др. по Фортрану только одна "замухрыжная книжулька".

а почему? потому что фортран уже медленно вымирает


не впечатлен
так, учебные задачки только решать

Кстати в Linux Fortran77 уже прошит в систему. Зачем они это делают...?

все просто... пытаются "прошить" как можно больше в систему, дабы удовлетворять как можно большим требованиям
хотя несколько режет слух линукс (их же море) и "прошит"

Вычислительные кластеры, как правило, однотипны.

только те, с которыми вы работали ;)
у меня вот половина кластеров вообще под виндами и там фортраном и не пахнет... остальные под фрей и тоже без фортрана (хотя в портах он наверное есть)

не надо думать что все кластеры похожи на ваши мгу'шные
у вас их делают под руководством определенных людей - вот и банально накладываются пристрастия этих людей... вот нравится фортран и все тут - будет на всех кластерах ;)

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

Сообщение Физик » 26.08.2007 11:09:07

ev писал(а):потому что фортран уже медленно вымирает


Я бы так не сказал, а вот действительно мощная контора Borland почему то прекратила поддержку Паскаля.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Пред.След.

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

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

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

Рейтинг@Mail.ru