acovea įgyvendina genetinį algoritmą rasti "geriausias" galimybes sudarant programas su PĮBT C ir C ++ kompiliatorius.
Acovea (analizė sudarytojas Parinktys per evoliucinės-ąjį algoritmą) įgyvendina genetinį algoritmą rasti "geriausias" galimybes sudarant programas su gcc (GCC) C ir C ++ kompiliatorius.
"Geriausias", šiame kontekste, yra apibrėžiamas kaip šių variantų, kurie gamina greičiausią vykdomąjį programą iš tam tikro šaltinio kodą. Acovea yra C ++ sistema, kuri gali būti pratęstas išbandyti kitų programavimo kalbų ir ne GCC kompiliatorius.
Aš įsivaizduoti acovea kaip optimizavimo įrankis, panašus į tikslą iki profiliavimo. Tradicinė funkcija lygio profiliavimas identifikuoja algoritmai įtakingiausių ir programos rezultatus; Acovea tada taikomi tų algoritmų rasti kompiliatoriaus vėliavėles ir galimybes, kurios sukuria greičiausią kodą.
Acovea taip pat naudinga tikrinant derinius vėliavėles pesimistinių sąveiką, ir išbandant kompiliatorius patikimumą.
Šiuolaikinės programinė įranga yra sunku suprasti ir patikrinti, ar tradiciniais būdais. Milijonai eilučių kodo gaminti, turinti sudėtingą sąveiką, ignoruoja paprastą aprašymą arba brutalia jėga tyrimą.
Vadovaujasi, deterministinis požiūris į bandymų remiasi žmogaus testeriai įsivaizduoti visas įmanomas derinys veiksmų - nerealu pasiūlymas pateiktas programinės įrangos sudėtingumas. Tačiau, nepaisant to sudėtingumo, mes turime atsakymus į svarbius klausimus apie šiuolaikinės, didelio masto programinės įrangos.
Kokios svarbius klausimus? Apsvarstykite gcc. Rašau straipsnius, etalonas kodo generavimas, užduočių kupinas sunkumų dėl daugybės variantų teikiamų įvairių sudarytojų. Nes mano etalonai turėti jokios prasmės, man reikia žinoti, kuris variantų derinys gamina greičiausią kodą tam tikrą taikymo.
Ieškoti "geriausias" rinkinį variantų skamba kaip paprastas uždavinys, atsižvelgiant į Persijos įlankos bendradarbiavimo tarybos dokumentus apimtimi ir tradicinės išminties, kad PĮBT kūrėjas bendruomenė. Ak, jeigu jis buvo tik taip lengva! Persijos įlankos bendradarbiavimo tarybos dokumentus, o platus, taip pat sąžiningai netikslus.
Aš vertinu šį dokumentacijos stilių; skirtingai nuo daugelio komercinių pardavėjai, kurie daro absoliučius teiginius apie "kokybės" savo produktų, PĮBT documenters pripažinti neaiškumų, kaip įvairių variantų keičia kodo generavimas. Iš tiesų, kodas karta yra visiškai priklausoma nuo paraiškos tipo yra kaupiami ir tikslinės platforma. Galimybė, kad gamina greitai vykdomąjį kodą vieno šaltinio kodas, kuris gali būti žalingas kitos programos efektyvumą.
"Tradiciniai išmintis" atvyksta į mano pašto dėžutę, kai aš skelbia naują straipsnį. Svyruoja nuo mandagus, kad nemandagu įkyrus, šie laiškai yra prieštaringų pasiūlymus gaminti greitai kodą.
Daugeliu atvejų tokie nerimti teiginiai neturi jokio formalaus įrodymo jų galiojimo, o dažniau nei ne, pasiūlė "tobulinimas" yra neveiksmingos arba žalingas. Ji tampa vis labiau akivaizdu, kad niekas --myself įtraukti - tiksliai žino, kaip visi šie GCC galimybės dirbti kartu kuriant programos kodą.
Aš ieškau Gralis Optimization - bet tiksliai kas optimizavimas? Supratimas problema yra pirmasis žingsnis ieškant sprendimo.
Optimizavimas bando gaminti "geriausias" mašininį kodą iš išeities kodo. "Geriausias" reiškia skirtingus dalykus skirtingiems; duomenų bazė semtuvai gabaliukus informacijos, o mokslo taikymas yra susijęs su greitai ir tikslius rezultatus; pirmasis rūpestis dėl įterptųjų sistemų gali būti kodas dydis.
Ir tai visai įmanoma, kad mažos kodas yra greitas, ar greitai kodas tiksli. Optimization yra toli gražu ne tikslusis mokslas, atsižvelgiant į techninės ir programinės įrangos konfigūracijų įvairovė.
Optimizavimo algoritmas gali būti taip paprasta, kaip pašalinti kilpa nekintamos, ar taip sudėtinga, kaip nagrinėjant visą programą siekiant pašalinti bendrą pasaulinį sub-išraiškas. Daugelis optimizavimas pakeisti tai, ką programuotojas parašė į efektyvesnio forma, gaminant tą patį rezultatą, o kintančią pagrindines detales efektyvumas; kita "optimizavimas" gamina kodas, kuris naudoja ypatumus pagrindinės techninės, pavyzdžiui, specialių instrukcijų rinkinių.
Atminties architektūros, vamzdynai, balansinės ir nebalansinės veiklos lustas Caches - visi įtakos kodo efektyvumą tokiais būdais, kurie nėra akivaizdu, programuotojai, naudojant aukšto lygio kalba. Optimizavimas, kurie gali atrodyti gaminti greičiau kodą gali iš tikrųjų sukurti didelę kodą, kuris sukelia daugiau talpyklą nepataikė, todėl žeminantį efektyvumą.
Net geriausias rankų tuned kodas C yra sritis aiškinimo; nėra absoliuti, vienas su vienu tarp C ataskaitų ir mašinų instrukcijose korespondencija. Beveik visos kodo seka gali būti surinkti į skirtingas - bet funkciškai lygiavertės - mašina instrukcija upelių su skirtingų dydžių ir charakteristikų.
Įterpus funkcijas yra klasikinis pavyzdys šio reiškinio: pakeisti paskambinti funkcija su funkcija kodą pats gali gaminti greitesnį programą, tačiau taip pat gali padidinti programos dydį. Didesnis programos dydį, gali, savo ruožtu, užkirsti kelią algoritmą iš telpančios didelės spartos laikinojoje atmintyje, todėl lėtėja programą dėl cache neįvykusias avarijas.
Atkreipkite dėmesį, mano naudotis žebenkštis žodžio "gali" - "inline" mažų funkcijas kartais leidžia kitiems optimizavimą galimybę toliau tobulinti kodas vietos sąlygų, gaminti greičiau ir mažesnis kodą.
Optimizavimas yra ne paprastas arba akivaizdus, ir deriniai algoritmo gali sukelti netikėtų rezultatų. Kuris mane atgal į klausimą: Bet kurio taikymo, kokie yra efektyviausi optimizavimo galimybės?
Kas naujo šioje versijoje:
· Nedideli pokyčiai ne nemokamą licenciją.
· Parama buvo pridėta naujausias versijas libcoyotl ir libevocosm.
Programinė detalės:
Versija: 1.0.1
Įkėlimo datą: 3 Jun 15
Licencija: Nemokamai
Populiarumas: 176
Komentarai nerastas