Поддерживать
www.wikidata.ru-ru.nina.az
Eta statya ob optimizacii programm i dannyh voobshe Ob optimizaciyah primenyaemyh kompilyatorami sm Optimiziruyushij kompilyator U etogo termina sushestvuyut i drugie znacheniya sm Optimizaciya Optimizaciya modifikaciya sistemy dlya uluchsheniya eyo effektivnosti Sistema mozhet byt odinochnoj kompyuternoj programmoj cifrovym ustrojstvom naborom kompyuterov ili dazhe celoj setyu Hotya celyu optimizacii yavlyaetsya poluchenie optimalnoj sistemy istinno optimalnaya sistema v processe optimizacii dostigaetsya daleko ne vsegda Optimizirovannaya sistema obychno yavlyaetsya optimalnoj tolko dlya odnoj zadachi ili gruppy polzovatelej gde to mozhet byt vazhnee umenshenie vremeni trebuemogo programme dlya vypolneniya raboty dazhe cenoj potrebleniya bolshego obyoma pamyati v prilozheniyah gde vazhnee pamyat mogut vybiratsya bolee medlennye algoritmy s menshimi zaprosami k pamyati Bolee togo zachastuyu ne sushestvuet universalnogo resheniya horosho rabotayushego vo vseh sluchayah poetomu inzhenery ispolzuyut kompromissnye angl tradeoff resheniya dlya optimizacii tolko klyuchevyh parametrov K tomu zhe usiliya trebuemye dlya dostizheniya polnostyu optimalnoj programmy kotoruyu nevozmozhno dalshe uluchshit prakticheski vsegda prevyshayut vygodu kotoraya mozhet byt ot etogo poluchena poetomu kak pravilo process optimizacii zavershaetsya do togo kak dostigaetsya polnaya optimalnost K schastyu v bolshinstve sluchaev dazhe pri etom dostigayutsya zametnye uluchsheniya Optimizaciya dolzhna provoditsya s ostorozhnostyu Toni Hoar vpervye proiznyos a Donald Knut vposledstvii chasto povtoryal izvestnoe vyskazyvanie Prezhdevremennaya optimizaciya eto koren vseh bed Ochen vazhno imet dlya nachala ozvuchennyj algoritm i rabotayushij prototip OsnovyNekotorye zadachi chasto mogut byt vypolneny bolee effektivno Naprimer programma na yazyke Si kotoraya summiruet vse celye chisla ot 1 do N int i sum 0 for i 1 i lt N i sum i Podrazumevaya chto zdes net perepolneniya etot kod mozhet byt perepisan v sleduyushem vide s pomoshyu sootvetstvuyushej matematicheskoj formuly int sum N N 1 2 Ponyatie optimizaciya obychno podrazumevaet chto sistema sohranyaet tu zhe samuyu funkcionalnost Odnako znachitelnoe uluchshenie proizvoditelnosti chasto mozhet byt dostignuto i s pomoshyu udaleniya izbytochnoj funkcionalnosti Naprimer esli dopustit chto programme ne trebuetsya podderzhivat bolee chem 100 elementov pri vvode to vozmozhno ispolzovat vmesto bolee medlennogo dinamicheskogo Kompromissy tradeoff Optimizaciya v osnovnom fokusiruetsya na odinochnom ili povtornom vremeni vypolneniya ispolzovanii pamyati diskovogo prostranstva propusknoj sposobnosti ili nekotorom drugom resurse Eto obychno trebuet kompromissov odin parametr optimiziruetsya za schyot drugih Naprimer uvelichenie razmera programmnogo kesha chego libo uluchshaet proizvoditelnost vremeni vypolneniya no takzhe uvelichivaet potreblenie pamyati Drugie rasprostranyonnye kompromissy vklyuchayut prozrachnost koda i ego vyrazitelnost pochti vsegda cenoj deoptimizacii Slozhnye specializirovannye algoritmy trebuyut bolshe usilij po otladke i uvelichivayut veroyatnost oshibok Razlichnye oblasti V issledovanii operacij optimizaciya eto problema opredeleniya vhodnyh znachenij funkcii pri kotoryh ona imeet maksimalnoe ili minimalnoe znachenie Inogda na eti znacheniya nakladyvayutsya ogranicheniya takaya zadacha izvestna kak ogranichennaya optimizaciya V programmirovanii optimizaciya obychno oboznachaet modifikaciyu koda i ego nastroek kompilyacii dlya dannoj arhitektury dlya proizvodstva bolee effektivnogo PO Tipichnye problemy imeyut nastolko bolshoe kolichestvo vozmozhnostej chto programmisty obychno mogut pozvolit ispolzovat tolko dostatochno horoshee reshenie Uzkie mesta Dlya optimizacii trebuetsya najti uzkoe mesto angl bottleneck butylochnoe gorlyshko kriticheskuyu chast koda kotoraya yavlyaetsya osnovnym potrebitelem neobhodimogo resursa Uluchshenie primerno 20 koda inogda vlechyot za soboj izmenenie 80 rezultatov soglasno principu Pareto Utechka resursov pamyati deskriptorov i t d takzhe mozhet privesti k padeniyu skorosti vypolneniya programmy Dlya poiska takih utechek ispolzuyutsya specialnye otladochnye instrumenty a dlya obnaruzheniya uzkih mest primenyayutsya programmy profajlery Arhitekturnyj dizajn sistemy osobenno silno vliyaet na eyo proizvoditelnost Vybor algoritma vliyaet na effektivnost bolshe chem lyuboj drugoj element dizajna Bolee slozhnye algoritmy i struktury dannyh mogut horosho operirovat bolshim kolichestvom elementov v to vremya kak prostye algoritmy podhodyat dlya nebolshih obyomov dannyh nakladnye rashody na inicializaciyu bolee slozhnogo algoritma mogut perevesit vygodu ot ego ispolzovaniya Chem bolshe pamyati ispolzuet programma tem bystree ona obychno vypolnyaetsya Naprimer programma filtr obychno chitaet kazhduyu stroku filtruet i vyvodit etu stroku neposredstvenno Poetomu ona ispolzuet pamyat tolko dlya hraneniya odnoj stroki no eyo proizvoditelnost obychno ochen plohaya Proizvoditelnost mozhet byt znachitelno uluchshena chteniem celogo fajla i zapisyu potom otfiltrovannogo rezultata odnako etot metod ispolzuet bolshe pamyati Keshirovanie rezultata takzhe effektivno odnako trebuet bolshego kolichestva pamyati dlya ispolzovaniya Prostejshie priyomy optimizacii programm po zatratam processornogo vremeniOptimizaciya po zatratam processornogo vremeni osobenno vazhna dlya raschetnyh programm v kotoryh bolshoj udelnyj ves imeyut matematicheskie vychisleniya Zdes perechisleny nekotorye priemy optimizacii kotorye mozhet ispolzovat programmist pri napisanii ishodnogo teksta programmy Inicializaciya obektov dannyh Vo mnogih programmah kakuyu to chast obektov dannyh neobhodimo inicializirovat to est prisvoit im nachalnye znacheniya Takoe prisvaivanie vypolnyaetsya libo v samom nachale programmy libo naprimer v konce cikla Pravilnaya inicializaciya obektov pozvolyaet sekonomit dragocennoe processornoe vremya Tak naprimer esli rech idet ob inicializacii massivov ispolzovanie cikla skoree vsego budet menee effektivnym chem obyavlenie etogo massiva pryamym prisvoeniem Programmirovanie arifmeticheskih operacij V tom sluchae kogda znachitelnaya chast vremeni raboty programmy otvoditsya arifmeticheskim vychisleniyam nemalye rezervy povysheniya skorosti raboty programmy tayatsya v pravilnom programmirovanii arifmeticheskih i logicheskih vyrazhenij Vazhno chto razlichnye arifmeticheskie operacii znachitelno razlichayutsya po bystrodejstviyu V bolshinstve arhitektur samymi bystrymi yavlyayutsya operacii slozheniya i vychitaniya Bolee medlennym yavlyaetsya umnozhenie zatem idyot delenie Naprimer vychislenie znacheniya vyrazheniya xa displaystyle frac x a gde a displaystyle a konstanta dlya argumentov s plavayushej tochkoj proizvoditsya bystree v vide x b displaystyle x cdot b gde b 1a displaystyle b frac 1 a konstanta vychislyaemaya na etape kompilyacii programmy fakticheski medlennaya operaciya deleniya zamenyaetsya bystroj operaciej umnozheniya Dlya celochislennogo argumenta x displaystyle x vychislenie vyrazheniya 2x displaystyle 2x bystree proizvesti v vide x x displaystyle x x operaciya umnozheniya zamenyaetsya operaciej slozheniya ili s ispolzovaniem operacii sdviga vlevo chto obespechivaet vyigrysh ne na vseh processorah Podobnye optimizacii nazyvayutsya ponizheniem sily operacij Umnozhenie celochislennyh argumentov na konstantu na processorah semejstva x86 mozhet byt effektivno vypolneno s ispolzovaniem assemblernyh komand LEA SHL i ADD vmesto ispolzovaniya komand MUL IMUL Ishodnyj operand v registre EAX ADD EAX EAX umnozhenie na 2 LEA EAX EAX 2 EAX umnozhenie na 3 SHL EAX 2 umnozhenie na 4 LEA EAX 4 EAX drugoj variant realizacii umnozheniya na 4 LEA EAX EAX 4 EAX umnozhenie na 5 LEA EAX EAX 2 EAX umnozhenie na 6 ADD EAX EAX i t d Podobnye optimizacii yavlyayutsya mikroarhitekturnymi i obychno proizvodyatsya optimiziruyushim kompilyatorom prozrachno dlya programmista Otnositelno mnogo vremeni tratitsya na obrashenie k podprogrammam peredacha parametrov cherez stek sohranenie registrov i adresa vozvrata vyzov konstruktorov kopirovaniya Esli podprogramma soderzhit maloe chislo dejstvij ona mozhet byt realizovana podstavlyaemoj angl inline vse eyo operatory kopiruyutsya v kazhdoe novoe mesto vyzova sushestvuet ryad ogranichenij na inline podstanovki naprimer podprogramma ne dolzhna byt rekursivnoj Eto likvidiruet nakladnye rashody na obrashenie k podprogramme odnako vedet k uvelicheniyu razmera ispolnyaemogo fajla Samo po sebe uvelichenie razmera ispolnyaemogo fajla ne yavlyaetsya sushestvennym odnako v nekotoryh sluchayah ispolnyaemyj kod mozhet vyjti za predely kesha komand chto povlechet znachitelnoe padenie skorosti ispolneniya programmy Poetomu sovremennye optimiziruyushie kompilyatory obychno imeyut nastrojki optimizacii po razmeru koda i po skorosti vypolneniya Bystrodejstvie takzhe zavisit i ot tipa operandov Naprimer v yazyke Turbo Pascal vvidu osobennostej realizacii celochislennoj arifmetiki operaciya slozheniya okazyvaetsya naibolee medlennoj dlya operandov tipa Byte i ShortInt nesmotrya na to chto peremennye zanimayut odin bajt arifmeticheskie operacii dlya nih dvuhbajtovye i pri vypolnenii operacij nad etimi tipami proizvoditsya obnulenie starshego bajta registrov i operand kopiruetsya iz pamyati v mladshij bajt registra Eto i privodit k dopolnitelnym zatratam vremeni Programmiruya arifmeticheskie vyrazheniya sleduet vybirat takuyu formu ih zapisi chtoby kolichestvo medlennyh operacij bylo svedeno k minimumu Rassmotrim takoj primer Pust neobhodimo vychislit mnogochlen 4 j stepeni ax4 bx3 cx2 dx e displaystyle ax 4 bx 3 cx 2 dx e Pri uslovii chto vychislenie stepeni proizvoditsya peremnozheniem osnovaniya opredelennoe chislo raz netrudno najti chto v etom vyrazhenii soderzhitsya 10 umnozhenij medlennyh operacij i 4 slozheniya bystryh operacij Eto zhe samoe vyrazhenie mozhno zapisat v vide ax b x c x d x e displaystyle ax b x c x d x e Takaya forma zapisi nazyvaetsya shemoj Gornera V etom vyrazhenii 4 umnozheniya i 4 slozheniya Obshee kolichestvo operacij sokratilos pochti v dva raza sootvetstvenno umenshitsya i vremya vychisleniya mnogochlena Podobnye optimizacii yavlyayutsya algoritmicheskimi i obychno ne vypolnyayutsya kompilyatorom avtomaticheski Cikly Razlichaetsya i vremya vypolneniya ciklov raznogo tipa Vremya vypolneniya cikla so schetchikom i cikla s postusloviem pri vseh prochih ravnyh usloviyah cikl s predusloviem vypolnyaetsya neskolko dolshe primerno na 20 30 Pri ispolzovanii vlozhennyh ciklov sleduet imet v vidu chto zatraty processornogo vremeni na obrabotku takoj konstrukcii mogut zaviset ot poryadka sledovaniya vlozhennyh ciklov Naprimer vlozhennyj cikl so schetchikom na yazyke Turbo Pascal for j 1 to 100000 do for k 1 to 1000 do a 1 for j 1 to 1000 do for k 1 to 100000 do a 1 Cikl v levoj kolonke vypolnyaetsya primerno na 10 dolshe chem v pravoj Na pervyj vzglyad i v pervom i vo vtorom sluchae 100 000 000 raz vypolnyaetsya operator prisvaivaniya i zatraty vremeni na eto dolzhny byt odinakovy v oboih sluchayah No eto ne tak Obyasnyaetsya eto tem chto inicializacii cikla obrabotka processorom ego zagolovka s celyu opredeleniya nachalnogo i konechnogo znachenij schyotchika a takzhe shaga prirasheniya schyotchika trebuet vremeni V pervom sluchae 1 raz inicializiruetsya vneshnij cikl i 100 000 raz vnutrennij to est vsego vypolnyaetsya 100 001 inicializaciya Vo vtorom sluchae takih inicializacij okazyvaetsya vsego lish 1001 Analogichno vedut sebya vlozhennye cikly s predusloviem i s postusloviem Mozhno sdelat vyvod chto pri programmirovanii vlozhennyh ciklov po vozmozhnosti sleduet delat cikl s naimenshim chislom povtorenij samym vneshnim a cikl s naibolshim chislom povtorenij samym vnutrennim Esli v ciklah soderzhatsya obrasheniya k pamyati obychno pri obrabotke massivov dlya maksimalno effektivnogo ispolzovaniya kesha i mehanizma apparatnoj predvyborki dannyh iz pamyati angl Hardware Prefetch poryadok obhoda adresov pamyati dolzhen byt po vozmozhnosti posledovatelnym Klassicheskim primerom podobnoj optimizacii yavlyaetsya smena poryadka sledovaniya vlozhennyh ciklov pri vypolnenii umnozheniya matric Invariantnye fragmenty koda Optimizaciya invariantnyh fragmentov koda tesno svyazana s problemoj optimalnogo programmirovaniya ciklov Vnutri cikla mogut vstrechatsya vyrazheniya fragmenty kotoryh nikak ne zavisyat ot upravlyayushej peremennoj cikla Ih nazyvayut invariantnymi fragmentami koda Sovremennye kompilyatory chasto opredelyayut nalichie takih fragmentov i vypolnyayut ih avtomaticheskuyu optimizaciyu Takoe vozmozhno ne vsegda i inogda proizvoditelnost programmy zavisit celikom ot togo kak zaprogrammirovan cikl V kachestve primera rassmotrim sleduyushij fragment programmy yazyk Turbo Pascal for i 1 to n do begin for k 1 to p do for m 1 to q do begin a k m Sqrt x k m i Abs u i x m k b k m Sin x k i Abs u i m k end am 0 bm 0 for k 1 to p do for m 1 to q do begin am am a k m c k bm bm b k m c k end end Zdes invariantnymi fragmentami koda yavlyayutsya slagaemoe Sin x k i v pervom cikle po peremennoj m i operaciya deleniya na element massiva c k vo vtorom cikle po m Znacheniya sinusa i elementa massiva ne izmenyayutsya v cikle po peremennoj m sledovatelno v pervom sluchae mozhno vychislit znachenie sinusa i prisvoit ego vspomogatelnoj peremennoj kotoraya budet ispolzovatsya v vyrazhenii nahodyashemsya vnutri cikla Vo vtorom sluchae mozhno vypolnit delenie posle zaversheniya cikla po m Takim obrazom mozhno sushestvenno sokratit kolichestvo trudoyomkih arifmeticheskih operacij Sm takzheGraf potoka upravleniya Otlozhennye vychisleniya Memoizaciya Teoriya massovogo obsluzhivaniyaLiteratura angl Writing Efficient Programs ISBN 0 13 970251 2 Donald Knut Iskusstvo programmirovaniya The Art of Computer Programming 3 e izd M 2006 T 1 Osnovnye algoritmy 720 s ISBN 0 201 89683 4 Donald Knut Iskusstvo programmirovaniya The Art of Computer Programming 3 e izd M 2007 T 2 Poluchislennye algoritmy 832 s ISBN 0 201 89684 2 Donald Knut Iskusstvo programmirovaniya The Art of Computer Programming 2 e izd M 2007 T 3 Sortirovka i poisk 824 s ISBN 0 201 89685 0 S A Nemnyugin Praktikum Turbo Pascal 2 e izd SPb Piter 2007 268 s ISBN 5 94723 702 4 Kris Kasperski Tehnika optimizacii programm Effektivnoe ispolzovanie pamyati SPb BHV Peterburg 2003 464 s ISBN 5 94157 232 8 SsylkiIntel 64 and IA 32 Architectures Optimization Reference Manual ot 2 iyunya 2010 na Wayback Machine http www agner org optimize manuals ot 7 dekabrya 2020 na Wayback Machine
Вершина