Титла: Тестване производителност Публикувано от: 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 Горе-долу по темата:По-добре правете отделни тестове за всяка архитектура, такова свободно пренасяне няма да доведе до добро Както и с различни компилатори можете да получите различни резултати от профайлера ...Не е добра практика да обвързвате кода си с конкретна архитектура освен ако не търсите много висока производителност и оптимално управление на паметта П.П. И на какво е писана тази програма за точно 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% в доста от случаите зависи от качествата на алгоритъма а не толкова от оптимизациите на компилатора. Макар че и последното разбира се има значение.За алгоритъма е така, но си помисли за хипотетична ситуация (само за примера): две функции, примерно 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 Ами то винаги има критични части в един алгоритъм.
Такива че оптимизация в тях влияят съществено на скоростта. Въпроса е да се открият. Проекта е шах енджин. |