Optimizare (IT)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , afișarea „Optimizarea este procesul de a modifica anumite aspecte ale unui sistem de a lucra mai eficient sau de a folosi mai puține resurse . De exemplu, un program de pentru calculatoare pot fi optimizate în așa fel încât să ruleze mai rapid sau în așa fel încât să necesite mai puțin de memorie sau consumă mai puțină energie a bateriei . Sistemul poate fi un singur program, o colecție de calculatoare sau o întreagă rețea , cum ar fi Internetul .

Chiar dacă cuvântul „optimizare“ împărtășește aceeași bază ca și „cel mai bun“, procesul de optimizare produce rareori un sistem optim. Sistemul optimizat va fi în mod tipic optimă într-un singur sens. Puteți reduce timpul de execuție a unui program, dar la costul de a consuma mai multă memorie; sau un program poate dura până mai puțină memorie, dar la prețul de viteza de execuție. Nu există nici o soluție pentru a „pune totul de acord“ , astfel încât programator trebuie să știe ce drum sa urmeze. În plus, încercările de Actul de a face o bună parte a software - ului este de obicei mai scump decât beneficiile pe care le pot obține. In acest fel procesul de optimizare poate fi omisă înainte de a găsi o soluție optimă complet. Din fericire, cele mai mari îmbunătățiri vin întotdeauna înainte de acest proces.

Optimizarea poate fi pe mai multe niveluri. La cel mai înalt nivel de proiect poate fi optimizat pentru a profita la maximum de resurse. Implementarea se poate face prin algoritmi eficienți și scrierea acestor algoritmi beneficiază de cea a codului de bună calitate. Utilizarea unui optimizator de compilator ajută la generarea unui program executabil optimizat. La cel mai mic nivel puteți scrie codul de asamblare direct cu mâna. Cu compilatoare moderne și complexitatea tot mai mare de procesoare , este nevoie de o mare abilitate de a scrie cod de asamblare , care este mai bună decât compilatorul. Optimizarea se face de obicei în cazuri speciale, iar codul poate fi mai dificil de citit și poate conține mai multe erori decât codul-neoptimizate.

Exemplu

procesele de calcul pot fi scrise în moduri diferite, cu diferite eficiență. Următorul exemplu, un program în C care se adauga toate numerele întregi de la 1 la N:

 int i, sum = 0;
pentru (i = 1; i <= N; i ++)
  sum + = i;
printf ( "Suma:% d \ n", suma);

Același cod poate fi scris astfel:

 int sum = (N * (N + 1)) / 2;
printf ( "Suma:% d \ n", suma);

Optimizare, de multe ori face în mod automat, este de a lua o metodă care este mai eficiente computațional, menținând în același timp aceeași funcționalitate.

Optimizarea nu este întotdeauna un evident proces și intuitiv. In exemplul de mai sus, versiunea „optimizate“ ar putea fi mai lent dacă N este suficient de scăzută, iar procesorul este mai rapid la adăugarea și bucle decât înmulțirea și împărțirea.

Compromisuri

Optimizarea se axează pe îmbunătățirea unuia sau mai multor aspecte: timpul de funcționare, de utilizare a memoriei, lățime de bandă, spațiul disco , energie și alte utilități. Acest lucru face ca fenomenul de compromis a spus (în limba engleză : tradeoff) - optimizează un aspect în detrimentul altora. De exemplu, creșterea dimensiunii memoriei cache îmbunătățește performanța în timp de execuție, dar măriți , de asemenea , consumul de memorie.

Există cazuri în care programator, efectuarea de optimizare, trebuie să decidă să facă excelent software-ul pentru unele operațiuni la prețul de altele mai puțin eficiente. Aceste compromisuri pot fi non-tehnice în natură, cum ar fi atunci când un concurent publică o diagramă de performanță care trebuie să fie depășite pentru a atinge un succes comercial, dar la costul de utilizarea software-ului mai puțin eficient. Aceste modificări sunt cunoscute de obicei ca pessimizzazioni ( în engleză: pessimizations).

Zone

În operațiunile de cercetare , optimizare este problema determinării valorilor de intrare a unei funcții care minimizează sau maximizează valoarea sa. De obicei, constrângerile sunt impuse asupra valorilor pe care funcția poate obține; Această problemă este cunoscută sub numele de constrângeri de optimizare.

În informatică , optimizarea presupune editarea codului și parametrii de compilator pentru a produce un software mai eficient.

Cele mai multe probleme comune au de obicei un număr mare de alternative care pot fi alese de către programator.

blocaje

Optimizarea este urmată de căutarea unui strangulare : partea critică a codului , care este primul consumator de resurse. De obicei , această strangulare reprezintă 20% din cod, dar este responsabil pentru 80% din rezultatele ( a se vedea , de asemenea , principiul Pareto ).

Principiul Pareto ( de asemenea , cunoscut sub numele de regula 80-20) prevede că pentru multe fenomene de 80% din consecințe depinde de 20% din cauzele.

Designul arhitectural al unui sistem afectează foarte mult performanța. Alegerea unui algoritm este mai importantă decât orice alt element al proiectului.

În unele cazuri, adăugarea de mai multă memorie poate ajuta un program de a alerga mai repede. De exemplu, un program de filtrare citește, de obicei, fiecare linie și imediat filtre de ieșire. Aceasta folosește memorie pentru un singur rând, dar performanța este de obicei slabă. Acestea pot fi îmbunătățite prin citirea întregului dosar și apoi scris rezultatul, chiar dacă acest lucru necesită mai multă memorie.

Atunci când pentru a optimiza?

Optimizarea poate reduce lizibilitatea și codul de adăugare folosit doar pentru a îmbunătăți performanța. Acest lucru poate complica programe și sisteme, ceea ce le face mai dificil de citit și pentru a depana. Ca rezultat, optimizarea sau reglarea performanței se face, de obicei, la sfârșitul procesului de dezvoltare.

Donald Knuth spus, parafrazându - Hoare [1] ,

  • „Ne putem uita despre aceste randamente mici, 97% din timp: optimizarea prematură este rădăcina tuturor relelor.“ [2]

Charles Cook a comentat,

  • „Sunt de acord. De obicei , nu este în valoare de cheltuieli o mulțime de timp“ micro-optimizare „cod înainte de a afla unde sunt blocaje. Dar când proiectarea de software la nivel de sistem, probleme de performanță trebuie să fie întotdeauna luate în considerare de la început. Un programator bun va face acest lucru în mod automat, având suficientă experiență pentru a descoperi punctele cele mai critice. un programator neexperimentați nu va face griji cu privire la acest lucru, gândire că un pic de tweaking va rezolva în cele din urmă toate problemele. " [1]

„Optimizare prematura“ este o expresie folosita pentru a descrie situația unui programator care permite considerente de performanță să afecteze proiectarea unui fragment de cod. Acest lucru poate produce un design care nu este la fel de clar cum ar trebui să fie sau un cod care este incorect, deoarece codul a devenit mai complicată datorită optimizării.

O abordare alternativă este de a proiecta în primul rând, face codul din proiect, și apoi face controale de performanță pe codul pentru a vedea dacă acesta trebuie să fie optimizată. Un design simplu și elegant este mai ușor de a optimiza în acest stadiu.

În practică, este bine de a păstra obiectivele de performanță în minte atunci când proiectarea software-ul, dar programator echilibrează obiectivele de proiectare și optimizare.

limbi interpretat

În limbaje de interpretare ( în special cele care sunt efectuate în mod repetat ca PHP și JavaScript ) unele programatori elimina comentarii, spații și metode sau funcții neutilizate de la înainte de punerea lor în programe de producție.

În cazul în care programatorul ia departe comentariile și formatarea codului, el sacrifică lizibilitatea codului. Devine mai dificil pentru un om pentru a citi, depanare, și, prin urmare, să modifice sau să extindă codul.

Aforisme

  • „Prima regulă de optimizare program este: nu o fac. A doua regulă de optimizare a programului (! Doar pentru experți) este: nu o fac încă "! - Michael A. Jackson.
  • „Ordinea în care operațiunile sunt efectuate în fiecare caz particular este o întrebare foarte interesantă și curios, în care spațiul nostru nu ne permite să înțelegem pe deplin. În aproape orice calcul, o serie de ajustări pot fi făcute în fiecare etapă, și diverse considerații trebuie să influențeze alegerea în sensul unui motor de calcul. Un obiectiv esențial este de a alege combinația care ar putea reduce la minimum timpul necesar pentru calcul. " - note de Ada Byron pe motor analitic, 1842.
  • „În informatică, tot mai multe păcate sunt comise în numele eficienței (fără a obține în mod necesar), mai degrabă decât pentru alte motive, inclusiv prostia sumbru.“ - WA Wulf.
  • „Ne putem uita aceste randamente mici, 97% din timp: optimizarea prematură este rădăcina tuturor relelor. Noi nu trebuie să pierdeți timp chiar și pe faptul că 3% din codul critic. " - Knuth, parafrazându - Hoare.
  • „Blocajele se întâmplă în cele mai multe locuri incredibile. Deci, nu încercați să pună într-un truc pentru a accelera, dacă nu știi unde este gâtuire. " - Rob Pike.

Notă

  1. ^ a b [1]
  2. ^ Knuth, Donald. Programarea structurată cu go la rapoartele, Surveys Journal ACM Computing, Vol 6, No. 4, decembrie 1974. p.268.

Bibliografie

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT