Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: steef в Apr 16, 2011, 11:45



Титла: Тестване производителност
Публикувано от: steef в Apr 16, 2011, 11:45
Здравейте ,
Наскоро компилирах xfe с флагове -march=native и -О3 с гцц . Та въпроса ми е как мога да разбера каква е промяната в двоичние код , има ли някакъв софтуер за тестване на производителността на друг софтуер ? А също искам да ви попитам и дали дали процесора ми може да потдържа 64 битова ОС - модела е Е5200 и има Intel® 64  - ето го процесора - http://ark.intel.com/Product.aspx?id=37212&wapkw=(E5200) ($2) , ето я технологията - http://www.intel.com/technology/intel64/ ($2) . Това същото ли е като АМД64 ?


Титла: Re: Тестване производителност
Публикувано от: gat3way в Apr 16, 2011, 12:14
Здравей,

По ред на номерата:

1) промяната в двоичния код можеш да видиш само като я дизасемблираш (примерно с gdb).

При това, обикновено далеч не е толкова лесно гледайки генерираният код, дали е по-оптимален. Инструкциите имат различна латентност и никой не е казал че се изпълнява една инструкция на такт. Освен това има pipelining, освен това силно зависи дали данните се намират в кеша или не и т.н. Много tricky е да видиш примерно че са генерирани по-малко инструкции и да заключиш че това е по-оптимално и се изпълнява по-бързо. Ако беше така, -Os щеше да генерира по-бърз код от -O3 примерно :) Освен това оптимизациите, които прави компилатора далеч не са толкова прости и в много случаи е много трудно да схванеш замисъла.

2) тестването е много относително понятие - това е едно уравнение с прекалено много неизвестни. Доста трудно е да се направи тест, който да изолира повечето неизвестни. В този ред на мисли, разни сайтове като Phoronix имат навика да правят такива спекулативни тестове, които според мен е доста грешно някой да взема прекалено насериозно.

3) Може, това е на практика същото като amd64.



Титла: Да са неизвестни , да са неизвестни - колко да са неизвестни ?
Публикувано от: steef в Apr 16, 2011, 12:40
Нямах в предвид точно гледане на единиците и нулите  ;D . Иначе с един хекс едитор (е и доста познания по асемблер , reverce en. и свободно време ) съм чук !

Фороникса съм го пробвал , но незнам дали има тестове за произволна програмка - т.е. имаше някакви тестове за апаха , за времето за билдване на определени неща , но не съм видял тестове за програма , която ти посочваш . Мисълта ми е за нещо като time командата - да ти казва времето за изпълнение и още неща , примерно адресирана памет ..... . А то е ясно че няма как да се направи пълен тест , съобразно финкционалностите - всяко нещо си има специфични особености , които няма как да се тестват с унифициран метод . Примерно няма как да тестваш на колко хттп заявки в секунда може да отговори един мп3 плеяр или пък колко кадъра в секунда рендва един мейл клиент . И все пак възможно ли е да се проследи използването на ресурсите (рам , суап , процесорно време , използване на видео картата) като цяло ?

10х за инфото за интел64 !


Титла: Re: Тестване производителност
Публикувано от: gat3way в Apr 16, 2011, 12:55
И да може да проследиш какви ресурси заема програмата, в някакъв интервал от време, какво от това? Какъв извод би си направил за производителността на програмата?


Титла: Re: Тестване производителност
Публикувано от: steef в Apr 16, 2011, 17:15
Така като се замисля май си прав - една програма може да използва по-малко ресурси и да рендва по-малко кадъра в секунда (ако е някаква игра примерно) , зависи от алгоритъма на рендване . Добре де , тогава как мога да разбера какво е подобрението ако сложа флаговете за архитектурата и О3 ? И дали е възможно тези флагове да влошат производителността (поне при мозила четох , че не трябва да се пипат , освен ако не познаваш кода много добре) ?

А и още нещо (извинявай ако ставам досаден ) - възможно ли е компилиране на програма , която е писана за 32 битова архитектура , така че да използва пълноценно 64 битов процесор - т.е. дали това трябва да се заложи сорс кода или изцяло е в ръцете на компилатора ?


Титла: Re: Тестване производителност
Публикувано от: gat3way в Apr 16, 2011, 19:15
Възможно е също и да ги влошат, зависи от много неща.

Що се отнася до вторият въпрос - в общият случай е работа на компилатора да генерира оптимален код за архитектурата, но в определени случаи може да му се помогне.


Титла: Re: Тестване производителност
Публикувано от: clovenhoof в Apr 16, 2011, 20:45
Горе-долу по темата:

Какви profiler-и има в света на linux; като име на по-добрите от тях?
Ще потърся из пакетите на моята дистрибуция.

Така или иначе портнах един проект, та да се възползвам от free software-а.
Вероятно, бъдещите подобрения на базата от инфото от prifiler-а ще се отразят и на производителността под Windows.


Титла: Re: Тестване производителност
Публикувано от: romeo_ninov в Apr 16, 2011, 21:00
Горе-долу по темата:

Какви profiler-и има в света на linux; като име на по-добрите от тях?
Ще потърся из пакетите на моята дистрибуция.

Така или иначе портнах един проект, та да се възползвам от free software-а.
Вероятно, бъдещите подобрения на базата от инфото от prifiler-а ще се отразят и на производителността под Windows.
По-добре правете отделни тестове за всяка архитектура, такова свободно пренасяне няма да доведе до добро
Както и с различни компилатори можете да получите различни резултати от профайлера
...
А и още нещо (извинявай ако ставам досаден ) - възможно ли е компилиране на програма , която е писана за 32 битова архитектура , така че да използва пълноценно 64 битов процесор - т.е. дали това трябва да се заложи сорс кода или изцяло е в ръцете на компилатора ?
Не е добра практика да обвързвате кода си с конкретна архитектура освен ако не търсите много висока производителност и оптимално управление на паметта
П.П. И на какво е писана тази програма за точно 32битова архитектура?


Титла: Re: Тестване производителност
Публикувано от: clovenhoof в Apr 16, 2011, 21:37
Знам това. Аз обаче гоня скорост, пък и профилера само ще ми покаже възловите места за оптимизация. Той код няма да генерира.

Другото зависи от мен.


Титла: Re: Тестване производителност
Публикувано от: romeo_ninov в Apr 16, 2011, 22:52
Знам това. Аз обаче гоня скорост, пък и профилера само ще ми покаже възловите места за оптимизация. Той код няма да генерира.

Другото зависи от мен.
Да, с дребната за бележка че тесните места ще зависят не само от начина по който е написан кога, но и от това как и с какво е компилиран този код. И само малко езици (сещам се за джава) при изпълнение на байткод с машина на един производител ще имат подобни тесни места (почти) независимо от платформата


Титла: Re: Тестване производителност
Публикувано от: clovenhoof в Apr 16, 2011, 23:14
Бързината на 100% в доста от случаите зависи от качествата на алгоритъма а не толкова от оптимизациите на компилатора. Макар че и последното разбира се има значение.

Например ако използваш мехурчето за сортиране независимо от оптимизациите, линейна сложност не може да получиш.

Тук идеята ми е да ползвам free profiler, защото в света на Windows добрите са платени и то доста.


Титла: Re: Тестване производителност
Публикувано от: gat3way в Apr 17, 2011, 01:59
gprof, въпреки че е доста грозно нещо, но върши работа. Резултатите не винаги се интерпретират лесно де :)



Титла: Re: Тестване производителност
Публикувано от: romeo_ninov в Apr 17, 2011, 07:17
Бързината на 100% в доста от случаите зависи от качествата на алгоритъма а не толкова от оптимизациите на компилатора. Макар че и последното разбира се има значение.

Например ако използваш мехурчето за сортиране независимо от оптимизациите, линейна сложност не може да получиш.

Тук идеята ми е да ползвам free profiler, защото в света на Windows добрите са платени и то доста.
За алгоритъма е така, но си помисли за хипотетична ситуация (само за примера):
две функции, примерно getchar и putchar, двете се извикват в кода приблизително еднакъв брой пъти. Но реализацията на getchar под Линукс ти осигурява време за изпълнение 10 милисекунди, под Windows 9 милисекунди, при putchar е обратното
И ако искаш да оптимизираш програмата за скорост извикванията на коя от функциите ще се опиташ да намалиш?


Титла: Re: Тестване производителност
Публикувано от: clovenhoof в Apr 17, 2011, 12:45
Разлики от този сорт ще има, но няма да са съществени.
Промените в критичните части от алгоритъма ще повлияят съществено, независимо от платформата.
Та именно критичните части ме интересуват.


Титла: Re: Тестване производителност
Публикувано от: clovenhoof в Apr 17, 2011, 12:55
В крайна сметка си е играчка портването, а оптимизирането в такава ситуация още повече.


Титла: Re: Тестване производителност
Публикувано от: romeo_ninov в Apr 17, 2011, 13:07
Разлики от този сорт ще има, но няма да са съществени.
Промените в критичните части от алгоритъма ще повлияят съществено, независимо от платформата.
Та именно критичните части ме интересуват.
без да сте свалили профила е малко самонадеяно да дефинирате критични и некритични части и функции от алгоритъма. И можете да ми повярвате, функции, подобни на горния пример не са толкова безобидни от гледна точна на производителност. Ако споделите за какво точно иде реч може би ще е по-лесно да помогнем


Титла: Re: Тестване производителност
Публикувано от: clovenhoof в Apr 17, 2011, 14:06
Ами то винаги има критични части в един алгоритъм.
Такива че оптимизация в тях влияят съществено на скоростта.
Въпроса е да се открият.
Проекта е шах енджин.