logo

Optimallashtirish darajalari

Yuklangan vaqt:

08.08.2023

Ko'chirishlar soni:

0

Hajmi:

44.533203125 KB
                                                                                Reja:
1. Umumiy
2. Optimallashtirish darajalari
3. Kuchni kamaytirish
4. Qachon optimallashtirish kerak
5. Avtomatlashtirilgan va qo'lda optimallashtirish
6. Optimallashtirish uchun sarflangan vaqt
7. Adabiyotlar Umumiy
Garchi "optimallashtirish" so'zi "maqbul" bilan bir xil ildizga ega bo'lsa-da, 
optimallashtirish jarayonida haqiqatan ham maqbul tizim paydo bo'lishi kamdan-kam
uchraydi. Tizim umuman absolyut ravishda emas, balki faqat ma'lum bir o'lchov 
ko'rsatkichlariga nisbatan maqbullashtirilishi mumkin, bu boshqa mumkin bo'lgan 
ko'rsatkichlardan farq qilishi mumkin. Natijada, optimallashtirilgan tizim odatda 
faqat bitta dasturda yoki bitta auditoriya uchun maqbul bo'ladi. Biror bir dastur ba'zi 
bir vazifalarni bajarish uchun sarflanadigan vaqtni qisqartirishi mumkin, chunki u 
ko'proq xotirani sarf qiladi. Xotira maydoni eng yuqori darajadagi dasturda ataylab 
sekinroqni tanlash mumkin algoritm kamroq xotiradan foydalanish uchun. Ko'pincha 
har qanday holatda ham yaxshi ishlaydigan "bitta o'lchov" dizayni mavjud emas, 
shuning uchun muhandislar qilish savdo-sotiq eng katta qiziqish xususiyatlarini 
optimallashtirish. Bundan tashqari, dasturiy ta'minotni to'liq optimallashtirish uchun 
zarur bo'lgan sa'y-harakatlar - har qanday takomillashtirishga qodir emas - deyarli har
doim olinadigan foyda uchun oqilona emas; shuning uchun optimallashtirish jarayoni
to'liq optimal echimga erishilishidan oldin to'xtatilishi mumkin. Yaxshiyamki, 
ko'pincha eng katta yaxshilanishlar jarayonning boshida sodir bo'ladi.
    Hatto ma'lum bir sifat ko'rsatkichi uchun (masalan, ijro etish tezligi), 
optimallashtirishning aksariyat usullari natijani yaxshilaydi; ular optimal ishlab 
chiqarishni ishlab chiqarishga qodir emaslar. Superoptimizatsiya bu haqiqatan ham 
optimal natijani topish jarayoni.
      Optimallashtirish darajalari
Optimallashtirish bir qator darajalarda sodir bo'lishi mumkin. Odatda yuqori darajalar
katta ta'sirga ega va keyinchalik ularni o'zgartirish zarur bo'lsa, jiddiy o'zgarishlarni 
yoki to'liq qayta yozishni talab qiladigan loyihada o'zgartirish qiyinroq bo'ladi. 
Shunday qilib, optimallashtirish odatda yuqori darajadan pastgacha takomillashtirish 
orqali davom etishi mumkin, dastlabki yutuqlar katta bo'ladi va kam ish bilan 
ta'minlanadi, keyinchalik yutuqlar kichikroq bo'ladi va ko'proq ishlashni talab qiladi. 
Biroq, ba'zi hollarda umumiy ishlash dasturning juda past darajadagi qismlarining 
ishlashiga bog'liq bo'lib, kech bosqichdagi kichik o'zgarishlar yoki past darajadagi 
tafsilotlarni erta ko'rib chiqish katta ta'sirga ega bo'lishi mumkin. Odatda, loyiha 
davomida samaradorlikka bir oz e'tibor beriladi - garchi bu sezilarli darajada farq 
qilsa ham - ammo katta optimallashtirish ko'pincha kechiktirilishi kerak deb 
hisoblanadi. Uzoq muddatli loyihalarda odatda optimallashtirish tsikllari mavjud 
bo'lib, ularda bir sohani takomillashtirish boshqasida cheklovlar mavjud bo'lib, ular  odatda ishlash maqbul bo'lganida yoki yutuqlar juda kichik yoki qimmatga tushganda
qisqartiriladi.
  Ishlash dastur spetsifikatsiyasining bir qismi bo'lganligi sababli, juda sekin 
ishlaydigan dastur maqsadga muvofiq emas: 60 Hz (soniyasiga kvadrat) bo'lgan 
videoo'yin qabul qilinadi, ammo soniyasiga 6 kadr qabul qilinishi mumkin emas. 
ishlash - bu tizimning etarlicha ishlashini ta'minlay olishini ta'minlash uchun 
boshidan e'tiborga olinishi va dastlabki tizim (maqbullashtirish bilan) maqbul 
ishlashga erishishiga ishonch bo'lishi uchun dastlabki prototiplar taxminan maqbul 
ishlashga ega bo'lishi kerak. Bu ba'zan optimallashtirishni har doim keyinroq amalga 
oshirish mumkin degan e'tiqodda chiqarib tashlanadi, natijada prototip tizimlar juda 
sekin ishlaydi - ko'pincha kattalik tartibi yoki undan ko'prog'i - va oxir-oqibat 
muvaffaqiyatsizlikka uchragan tizimlar, chunki ular me'moriy jihatdan o'z 
maqsadlariga erisha olmaydilar, masalan Intel 432 (1981); yoki Java (1995) kabi 
maqbul ko'rsatkichlarga erishish uchun ko'p yillar davomida ish olib boradiganlar, 
faqatgina qabul qilinadigan ko'rsatkichlarga erishdilar HotSpot (1999). Prototip va 
ishlab chiqarish tizimi o'rtasidagi ishlash ko'rsatkichlarining o'zgarishi darajasi va 
optimallashtirishning qanchalik qulayligi muhim noaniqlik va xavf manbai bo'lishi 
mumkin.
        Kuchni kamaytirish
Hisoblash vazifalari turli xil samaradorlik bilan bir necha xil usullar bilan bajarilishi 
mumkin. Ekvivalent funktsional imkoniyatga ega bo'lgan yanada samarali versiya a 
deb nomlanadi quvvatni kamaytirish. Masalan, quyidagilarni ko'rib chiqing C 1 dan 
to butun sonlar yig'indisini olish niyatida bo'lgan kod parchasi N:
  int men, sum = 0;uchun (men = 1; men <= N; ++men) 
    {  sum += men;}
     printf("sum:% d n", sum);
Ushbu kod mumkin (yo'q deb hisoblasak) arifmetik toshish) quyidagi kabi matematik
formuladan foydalanib qayta yoziladi:
    int sum = N * (1 + N) / 2;
     printf("sum:% d n", sum);
Ba'zan optimallashtiruvchi kompilyator tomonidan avtomatik ravishda bajariladigan 
optimallashtirish usulni tanlashdir (algoritm), xuddi shu funktsiyani saqlab, hisoblash 
samaradorligi yanada yuqori. Qarang algoritmik samaradorlik ushbu metodlarning 
ayrimlarini muhokama qilish uchun. Biroq, ishlashning sezilarli yaxshilanishiga 
ko'pincha begona funktsiyalarni olib tashlash orqali erishish mumkin. Optimallashtirish har doim ham aniq yoki intuitiv jarayon emas. Yuqoridagi misolda, 
"optimallashtirilgan" versiya aslida asl nusxadan sekinroq bo'lishi mumkin, agar N 
etarlicha kichik edi va qo'shimcha qo'shimcha bajarishda juda tezroq bo'ladi pastadir 
ko'paytirish va bo'linishdan ko'ra operatsiyalar.
     Qachon optimallashtirish kerak
Optimallashtirish kamayishi mumkin o'qish qobiliyati va faqat yaxshilash uchun 
ishlatiladigan kodni qo'shing ishlash. Bu dasturlarni yoki tizimlarni 
murakkablashtirishi, ularni saqlash va disk raskadrovka qilishni qiyinlashtirishi 
mumkin. Natijada optimallashtirish yoki ishlashni sozlash ko'pincha oxirida amalga 
oshiriladi rivojlanish bosqichi.
Donald Knuth  optimallashtirish bo'yicha quyidagi ikkita bayonot berdi:
"Biz kichik samaradorlik haqida unutishimiz kerak, masalan, taxminan 97%: 
vaqtidan oldin optimallashtirish barcha yovuzliklarning ildizi. Ammo biz o'z 
imkoniyatlarimizni ushbu muhim 3% da ishlatmaslikimiz kerak"
(Shuningdek, u ushbu taklifni keltirdi Toni Xare bir necha yil o'tgach,[6] garchi bu 
xato bo'lishi mumkin edi, chunki Hoare bu iborani o'ylab topganini rad etdi.[7])
"O'rnatilgan muhandislik fanlarida osongina erishilgan 12% yaxshilanish hech 
qachon marginal deb hisoblanmaydi va men dasturiy ta'minot muhandisligida xuddi 
shu nuqtai nazar ustun turishi kerak deb o'ylayman"[5]
"Muddatidan oldin optimallashtirish" - bu dasturchi kodning dizayniga ta'sirchanlik 
ko'rsatkichlarini berishga imkon beradigan vaziyatni tavsiflash uchun ishlatiladigan 
ibora. Buning natijasi o'laroq toza bo'lmagan dizayni yoki noto'g'ri kodni keltirib 
chiqarishi mumkin, chunki kod optimallashtirish bilan murakkablashadi va dasturchi 
optimallashtirish bilan chalg'itadi.
Dasturning ma'lum bir qismini optimallashtirish to'g'risida qaror qabul qilganda, 
Amdahl qonuni har doim ham e'tiborga olinishi kerak: umumiy dasturga ta'sir qilish 
ushbu qismda aslida qancha vaqt sarflanishiga bog'liq, bu kodni har doim ham ishlash
tahlili.Entsiklopediya  site:uz.wikisvo.ru
Shuning uchun birinchi navbatda dizaynni, keyin kodni loyihalashtirish va undan 
keyin yaxshiroq yondashuv profil/etalon natijada qaysi qismlarni optimallashtirish 
kerakligini ko'rish uchun kod. Ushbu bosqichda sodda va oqlangan dizayni tez-tez 
optimallashtirish osonroq bo'ladi va profillar vaqtidan oldin optimallashtirish bilan 
hal qilinmagan kutilmagan ishlash muammolarini aniqlashi mumkin. Amalda ko'pincha dasturiy ta'minotni loyihalashda ishlash maqsadlarini yodda tutish 
kerak, ammo dasturchi dizayn va optimallashtirish maqsadlarini muvozanatlashtiradi.
Zamonaviy kompilyatorlar va operatsion tizimlar shunchalik samarali bo'ladiki, 
ko'zda tutilgan ishlash ko'rsatkichlari ko'pincha amalga oshmay qoladi. Misol 
tariqasida, operatsion tizim darajasida yana keshlangan dastur darajasidagi 
ma'lumotlarni keshlash ijro etishda yaxshilanishlarni keltirib chiqarmaydi. Shunday 
bo'lsa ham, dasturchi ishlab chiqarish kodidan muvaffaqiyatsiz optimallashtirishlarni 
olib tashlaydigan kamdan-kam holatlar. Bundan tashqari, qo'shimcha qurilmalardagi 
yutuqlar ko'pincha yaxshilanishlarni bekor qilmasligi mumkin, ammo xiralashgan 
kod kelajakda uning maqsadi bekor qilinganidan keyin ham saqlanib qoladi.
      Avtomatlashtirilgan va qo'lda optimallashtirish
Asosiy maqola: Kompilyatorni optimallashtirish
Shuningdek qarang Kategoriya: Kompilyatorni optimallashtirish
Optimallashtirish kompilyatorlar tomonidan avtomatlashtirilishi yoki dasturchilar 
tomonidan amalga oshirilishi mumkin. Odatda mahalliy optimallashtirish uchun 
yutuqlar cheklanadi, global optimallashtirish uchun katta. Odatda, eng kuchli 
optimallashtirish ustunni topishdir algoritm.
Butun tizimni optimallashtirish odatda dasturchilar tomonidan amalga oshiriladi, 
chunki u avtomatlashtirilgan optimizatorlar uchun juda murakkab. Bunday vaziyatda 
dasturchilar yoki tizim ma'murlari kodni aniq o'zgartiradilar, shunda umumiy tizim 
yaxshiroq ishlaydi. Garchi u samaradorlikni oshirishi mumkin bo'lsa-da, 
avtomatlashtirilgan optimallashtirishga qaraganda ancha qimmat. Ko'p parametrlar 
dasturning ishlashiga ta'sir qilganligi sababli, dasturni optimallashtirish maydoni 
katta. Meta-evristika va mashinalarni o'rganish dasturlarni optimallashtirishning 
murakkabligini hal qilish uchun ishlatiladi.[8]
A dan foydalaning profiler (yoki ishlash analizatori) dasturning eng ko'p manbalarni 
talab qiladigan bo'limlarini topish torlik. Dasturchilar ba'zida darzlik qaerda ekanligi 
to'g'risida aniq tasavvurga ega ekanligiga ishonishadi, ammo sezgi ko'pincha 
noto'g'ri.[iqtibos kerak] Kodning ahamiyatsiz qismini optimallashtirish odatda 
umumiy ishlashga yordam berishi mumkin emas.
Darzlik mahalliylashtirilganda, optimallashtirish odatda dasturda ishlatiladigan 
algoritmni qayta ko'rib chiqishdan boshlanadi. Ko'pincha, ma'lum bir algoritm 
ma'lum bir muammoga mos ravishda tuzilishi mumkin, bu umumiy algoritmga 
qaraganda yaxshiroq ishlashga olib keladi. Masalan, buyumlarning ulkan ro'yxatini 
saralash vazifasi odatda a bilan bajariladi tezkor muntazam, bu eng samarali umumiy 
algoritmlardan biridir. Ammo buyumlarning biron bir xususiyati ekspluatatsiya  qilinadigan bo'lsa (masalan, ular allaqachon ma'lum bir tartibda joylashtirilgan 
bo'lsa), boshqa usul yoki hattoki buyurtma bo'yicha odatlangan tartibda foydalanish 
mumkin.
Dasturchi eng yaxshi algoritm tanlanganligiga ishonch hosil qilgandan so'ng, kodni 
optimallashtirishni boshlash mumkin. Looplarni echib olish mumkin (pastki tsikl 
uchun), bu ko'pincha olib kelishi mumkin pastroq haddan tashqari yuklaydigan bo'lsa 
tezlik CPU keshi), imkon qadar kichik ma'lumotlar turlaridan foydalanish mumkin, 
suzuvchi nuqta o'rniga butun sonli arifmetikadan foydalanish mumkin va hokazo. 
(Qarang algoritmik samaradorlik ushbu va boshqa texnikalar uchun maqola.)
Ishlashdagi to'siqlar dasturda ishlatiladigan algoritmlar yoki ma'lumotlar 
tuzilmalariga emas, balki til cheklovlariga bog'liq bo'lishi mumkin. Ba'zan, 
dasturning muhim qismini boshqacha tarzda qayta yozish mumkin dasturlash tili bu 
asosiy mashinaga to'g'ridan-to'g'ri kirish imkoniyatini beradi. Masalan, bu juda keng 
tarqalgan yuqori darajadagi kabi tillar Python yozilgan modullarga ega bo'lish C katta
tezlik uchun. C da allaqachon yozilgan dasturlarda yozilgan modullar bo'lishi 
mumkin yig'ilish. In yozilgan dasturlar D. dan foydalanishi mumkin inline assembler.
Qayta yozish bo'limlari umumiy sharoitda "to'laydi" "bosh barmoq qoidasi"nomi 
bilan tanilgan 90/10 qonun, bu shuni ko'rsatadiki, vaqtning 90% kodning 10% ga 
sarflanadi va qolgan 90% da faqat 10% vaqt. Shunday qilib, dasturning kichik 
qismini optimallashtirishga intellektual kuch sarflash umumiy tezlikka katta ta'sir 
ko'rsatishi mumkin - agar to'g'ri qism (lar) joylashgan bo'lsa.
Qo'lda optimallashtirish, ba'zida o'qish qobiliyatiga putur etkazadi. Shunday qilib 
kodni optimallashtirish diqqat bilan hujjatlashtirilishi kerak (afzalroq qator ichidagi 
izohlar yordamida) va ularning kelajakdagi rivojiga ta'siri baholanishi kerak.
Avtomatlashtirilgan optimallashtirishni amalga oshiruvchi dastur an deb nomlanadi 
optimallashtiruvchi. Ko'pgina optimizatorlar kompilyatorlarga joylashtirilgan va 
kompilyatsiya paytida ishlaydi. Optimizatorlar ko'pincha yaratilgan kodni muayyan 
protsessorlarga moslashtirishi mumkin.
Bugungi kunda avtomatlashtirilgan optimallashtirish deyarli faqat cheklangan 
kompilyatorni optimallashtirish. Ammo, kompilyatorni optimallashtirish odatda 
belgilangan umumiy optimallashtirish to'plami bilan cheklanganligi sababli, 
muammo va tilga xos optimallashtirishlarning tavsiflarini qabul qila oladigan 
optimallashtirish vositalariga talab katta bo'lib, muhandisga maxsus 
optimallashtirishlarni ko'rsatishga imkon beradi. Optimallashtirish tavsiflarini qabul 
qiladigan vositalar chaqiriladi dasturni o'zgartirish tizimlari va C ++ kabi haqiqiy 
dasturiy ta'minot tizimlarida qo'llanila boshlandi. Ba'zi yuqori darajadagi tillar (Eyfel, Esterel) yordamida dasturlarini optimallashtirish 
oraliq til.
Tarmoqli hisoblash yoki tarqatilgan hisoblash vazifalarni ko'p ishlatadigan 
kompyuterlardan bo'sh vaqtli kompyuterlarga o'tkazish orqali butun tizimni 
optimallashtirishga qaratilgan.
Optimallashtirish uchun sarflangan vaqt
Ba'zida u erda optimallashtirishni amalga oshirish uchun sarflanadigan vaqt muammo
bo'lishi mumkin.
Mavjud kodni optimallashtirish odatda yangi xususiyatlarni qo'shmaydi va yomonroq
bo'lsa, yangi qo'shilishi mumkin xatolar ilgari ishlaydigan kodda (har qanday 
o'zgarish bo'lishi mumkin). Qo'lda optimallashtirilgan kod ba'zan 
optimallashtirilmagan kodga qaraganda kamroq "o'qilishi" ga ega bo'lishi mumkinligi
sababli, optimallashtirish uning saqlanib qolishiga ham ta'sir qilishi mumkin. 
Optimallashtirish bahoga to'g'ri keladi va sarmoyaning maqsadga muvofiqligiga 
ishonch hosil qilish muhimdir.
Avtomatik optimizator (yoki optimallashtiruvchi kompilyator, kodni 
optimallashtirishni amalga oshiradigan dastur) maqsadli dasturlarning 
samaradorligini yanada oshirish yoki o'z ishini tezlashtirish uchun o'zi 
optimallashtirilishi kerak. Optimallashtirish bilan "yoqilgan" kompilyatsiya odatda 
ko'proq vaqt talab etadi, ammo bu odatda dasturlar juda katta bo'lganida muammo 
bo'ladi.
Xususan, uchun hozirda kompilyatorlar ning ishlashi ishlash vaqti kompilyator 
komponentasi, maqsad kodi bilan birgalikda bajarilishning umumiy tezligini 
oshirishning kalitidir.
      Adabiyotlar
Jon Bentli: Samarali dasturlarni yozish, ISBN   0-13-970251-2.
Donald Knuth: Kompyuter dasturlash san'ati
^ Robert Sedvik, Algoritmlar, 1984, p. 84
^ Ichki ko'chadan dastur tuzilishi: Dasturni bajarilishining tezroq usuli
^ Ueskott, Bob (2013). Har bir kompyuterning ishlash kitobi, 3-bob: foydali 
qonunlar. CreateSpace. ISBN   978-1482657753.
^ "Fokus bilan ishlashni profillashtirish". Olingan 15 avgust 2017. ^ a b Knut, Donald (1974 yil dekabr). "Bayonotlarga o'tish bilan tuzilgan dasturlash". 
ACM hisoblash tadqiqotlari. 6 (4): 268. CiteSeerX   10.1.1.103.6084. 
doi:10.1145/356635.356640.
^ Texning xatolari, yilda Dasturiy ta'minot - amaliyot va tajriba, 19-jild, 7-son (1989 
yil iyul), 607–685-betlar, "Savodli dasturlash" kitobida qayta nashr etilgan (276-bet).
^ Tony Hoare, 2004 yil elektron pochta
^ Memeti, Suejb; Pllana, Sabri; Binotto, Alecio; Kolodziej, Joanna; Brandic, Ivona 
(2018 yil 26-aprel). "Parallel hisoblash tizimlarini dasturiy ta'minotni 
optimallashtirish uchun meta-evristika va mashinani o'rganishdan foydalanish: 
adabiyotlarni muntazam ravishda ko'rib chiqish". Hisoblash. Springer Vena. 101 (8): 
893–936. arXiv:1801.09444. Bibcode:2018arXiv180109444M. doi:10.1007 / s00607-
018-0614-9.

Reja: 1. Umumiy 2. Optimallashtirish darajalari 3. Kuchni kamaytirish 4. Qachon optimallashtirish kerak 5. Avtomatlashtirilgan va qo'lda optimallashtirish 6. Optimallashtirish uchun sarflangan vaqt 7. Adabiyotlar

Umumiy Garchi "optimallashtirish" so'zi "maqbul" bilan bir xil ildizga ega bo'lsa-da, optimallashtirish jarayonida haqiqatan ham maqbul tizim paydo bo'lishi kamdan-kam uchraydi. Tizim umuman absolyut ravishda emas, balki faqat ma'lum bir o'lchov ko'rsatkichlariga nisbatan maqbullashtirilishi mumkin, bu boshqa mumkin bo'lgan ko'rsatkichlardan farq qilishi mumkin. Natijada, optimallashtirilgan tizim odatda faqat bitta dasturda yoki bitta auditoriya uchun maqbul bo'ladi. Biror bir dastur ba'zi bir vazifalarni bajarish uchun sarflanadigan vaqtni qisqartirishi mumkin, chunki u ko'proq xotirani sarf qiladi. Xotira maydoni eng yuqori darajadagi dasturda ataylab sekinroqni tanlash mumkin algoritm kamroq xotiradan foydalanish uchun. Ko'pincha har qanday holatda ham yaxshi ishlaydigan "bitta o'lchov" dizayni mavjud emas, shuning uchun muhandislar qilish savdo-sotiq eng katta qiziqish xususiyatlarini optimallashtirish. Bundan tashqari, dasturiy ta'minotni to'liq optimallashtirish uchun zarur bo'lgan sa'y-harakatlar - har qanday takomillashtirishga qodir emas - deyarli har doim olinadigan foyda uchun oqilona emas; shuning uchun optimallashtirish jarayoni to'liq optimal echimga erishilishidan oldin to'xtatilishi mumkin. Yaxshiyamki, ko'pincha eng katta yaxshilanishlar jarayonning boshida sodir bo'ladi. Hatto ma'lum bir sifat ko'rsatkichi uchun (masalan, ijro etish tezligi), optimallashtirishning aksariyat usullari natijani yaxshilaydi; ular optimal ishlab chiqarishni ishlab chiqarishga qodir emaslar. Superoptimizatsiya bu haqiqatan ham optimal natijani topish jarayoni. Optimallashtirish darajalari Optimallashtirish bir qator darajalarda sodir bo'lishi mumkin. Odatda yuqori darajalar katta ta'sirga ega va keyinchalik ularni o'zgartirish zarur bo'lsa, jiddiy o'zgarishlarni yoki to'liq qayta yozishni talab qiladigan loyihada o'zgartirish qiyinroq bo'ladi. Shunday qilib, optimallashtirish odatda yuqori darajadan pastgacha takomillashtirish orqali davom etishi mumkin, dastlabki yutuqlar katta bo'ladi va kam ish bilan ta'minlanadi, keyinchalik yutuqlar kichikroq bo'ladi va ko'proq ishlashni talab qiladi. Biroq, ba'zi hollarda umumiy ishlash dasturning juda past darajadagi qismlarining ishlashiga bog'liq bo'lib, kech bosqichdagi kichik o'zgarishlar yoki past darajadagi tafsilotlarni erta ko'rib chiqish katta ta'sirga ega bo'lishi mumkin. Odatda, loyiha davomida samaradorlikka bir oz e'tibor beriladi - garchi bu sezilarli darajada farq qilsa ham - ammo katta optimallashtirish ko'pincha kechiktirilishi kerak deb hisoblanadi. Uzoq muddatli loyihalarda odatda optimallashtirish tsikllari mavjud bo'lib, ularda bir sohani takomillashtirish boshqasida cheklovlar mavjud bo'lib, ular

odatda ishlash maqbul bo'lganida yoki yutuqlar juda kichik yoki qimmatga tushganda qisqartiriladi. Ishlash dastur spetsifikatsiyasining bir qismi bo'lganligi sababli, juda sekin ishlaydigan dastur maqsadga muvofiq emas: 60 Hz (soniyasiga kvadrat) bo'lgan videoo'yin qabul qilinadi, ammo soniyasiga 6 kadr qabul qilinishi mumkin emas. ishlash - bu tizimning etarlicha ishlashini ta'minlay olishini ta'minlash uchun boshidan e'tiborga olinishi va dastlabki tizim (maqbullashtirish bilan) maqbul ishlashga erishishiga ishonch bo'lishi uchun dastlabki prototiplar taxminan maqbul ishlashga ega bo'lishi kerak. Bu ba'zan optimallashtirishni har doim keyinroq amalga oshirish mumkin degan e'tiqodda chiqarib tashlanadi, natijada prototip tizimlar juda sekin ishlaydi - ko'pincha kattalik tartibi yoki undan ko'prog'i - va oxir-oqibat muvaffaqiyatsizlikka uchragan tizimlar, chunki ular me'moriy jihatdan o'z maqsadlariga erisha olmaydilar, masalan Intel 432 (1981); yoki Java (1995) kabi maqbul ko'rsatkichlarga erishish uchun ko'p yillar davomida ish olib boradiganlar, faqatgina qabul qilinadigan ko'rsatkichlarga erishdilar HotSpot (1999). Prototip va ishlab chiqarish tizimi o'rtasidagi ishlash ko'rsatkichlarining o'zgarishi darajasi va optimallashtirishning qanchalik qulayligi muhim noaniqlik va xavf manbai bo'lishi mumkin. Kuchni kamaytirish Hisoblash vazifalari turli xil samaradorlik bilan bir necha xil usullar bilan bajarilishi mumkin. Ekvivalent funktsional imkoniyatga ega bo'lgan yanada samarali versiya a deb nomlanadi quvvatni kamaytirish. Masalan, quyidagilarni ko'rib chiqing C 1 dan to butun sonlar yig'indisini olish niyatida bo'lgan kod parchasi N: int men, sum = 0;uchun (men = 1; men <= N; ++men) { sum += men;} printf("sum:% d n", sum); Ushbu kod mumkin (yo'q deb hisoblasak) arifmetik toshish) quyidagi kabi matematik formuladan foydalanib qayta yoziladi: int sum = N * (1 + N) / 2; printf("sum:% d n", sum); Ba'zan optimallashtiruvchi kompilyator tomonidan avtomatik ravishda bajariladigan optimallashtirish usulni tanlashdir (algoritm), xuddi shu funktsiyani saqlab, hisoblash samaradorligi yanada yuqori. Qarang algoritmik samaradorlik ushbu metodlarning ayrimlarini muhokama qilish uchun. Biroq, ishlashning sezilarli yaxshilanishiga ko'pincha begona funktsiyalarni olib tashlash orqali erishish mumkin.

Optimallashtirish har doim ham aniq yoki intuitiv jarayon emas. Yuqoridagi misolda, "optimallashtirilgan" versiya aslida asl nusxadan sekinroq bo'lishi mumkin, agar N etarlicha kichik edi va qo'shimcha qo'shimcha bajarishda juda tezroq bo'ladi pastadir ko'paytirish va bo'linishdan ko'ra operatsiyalar. Qachon optimallashtirish kerak Optimallashtirish kamayishi mumkin o'qish qobiliyati va faqat yaxshilash uchun ishlatiladigan kodni qo'shing ishlash. Bu dasturlarni yoki tizimlarni murakkablashtirishi, ularni saqlash va disk raskadrovka qilishni qiyinlashtirishi mumkin. Natijada optimallashtirish yoki ishlashni sozlash ko'pincha oxirida amalga oshiriladi rivojlanish bosqichi. Donald Knuth optimallashtirish bo'yicha quyidagi ikkita bayonot berdi: "Biz kichik samaradorlik haqida unutishimiz kerak, masalan, taxminan 97%: vaqtidan oldin optimallashtirish barcha yovuzliklarning ildizi. Ammo biz o'z imkoniyatlarimizni ushbu muhim 3% da ishlatmaslikimiz kerak" (Shuningdek, u ushbu taklifni keltirdi Toni Xare bir necha yil o'tgach,[6] garchi bu xato bo'lishi mumkin edi, chunki Hoare bu iborani o'ylab topganini rad etdi.[7]) "O'rnatilgan muhandislik fanlarida osongina erishilgan 12% yaxshilanish hech qachon marginal deb hisoblanmaydi va men dasturiy ta'minot muhandisligida xuddi shu nuqtai nazar ustun turishi kerak deb o'ylayman"[5] "Muddatidan oldin optimallashtirish" - bu dasturchi kodning dizayniga ta'sirchanlik ko'rsatkichlarini berishga imkon beradigan vaziyatni tavsiflash uchun ishlatiladigan ibora. Buning natijasi o'laroq toza bo'lmagan dizayni yoki noto'g'ri kodni keltirib chiqarishi mumkin, chunki kod optimallashtirish bilan murakkablashadi va dasturchi optimallashtirish bilan chalg'itadi. Dasturning ma'lum bir qismini optimallashtirish to'g'risida qaror qabul qilganda, Amdahl qonuni har doim ham e'tiborga olinishi kerak: umumiy dasturga ta'sir qilish ushbu qismda aslida qancha vaqt sarflanishiga bog'liq, bu kodni har doim ham ishlash tahlili.Entsiklopediya site:uz.wikisvo.ru Shuning uchun birinchi navbatda dizaynni, keyin kodni loyihalashtirish va undan keyin yaxshiroq yondashuv profil/etalon natijada qaysi qismlarni optimallashtirish kerakligini ko'rish uchun kod. Ushbu bosqichda sodda va oqlangan dizayni tez-tez optimallashtirish osonroq bo'ladi va profillar vaqtidan oldin optimallashtirish bilan hal qilinmagan kutilmagan ishlash muammolarini aniqlashi mumkin.

Amalda ko'pincha dasturiy ta'minotni loyihalashda ishlash maqsadlarini yodda tutish kerak, ammo dasturchi dizayn va optimallashtirish maqsadlarini muvozanatlashtiradi. Zamonaviy kompilyatorlar va operatsion tizimlar shunchalik samarali bo'ladiki, ko'zda tutilgan ishlash ko'rsatkichlari ko'pincha amalga oshmay qoladi. Misol tariqasida, operatsion tizim darajasida yana keshlangan dastur darajasidagi ma'lumotlarni keshlash ijro etishda yaxshilanishlarni keltirib chiqarmaydi. Shunday bo'lsa ham, dasturchi ishlab chiqarish kodidan muvaffaqiyatsiz optimallashtirishlarni olib tashlaydigan kamdan-kam holatlar. Bundan tashqari, qo'shimcha qurilmalardagi yutuqlar ko'pincha yaxshilanishlarni bekor qilmasligi mumkin, ammo xiralashgan kod kelajakda uning maqsadi bekor qilinganidan keyin ham saqlanib qoladi. Avtomatlashtirilgan va qo'lda optimallashtirish Asosiy maqola: Kompilyatorni optimallashtirish Shuningdek qarang Kategoriya: Kompilyatorni optimallashtirish Optimallashtirish kompilyatorlar tomonidan avtomatlashtirilishi yoki dasturchilar tomonidan amalga oshirilishi mumkin. Odatda mahalliy optimallashtirish uchun yutuqlar cheklanadi, global optimallashtirish uchun katta. Odatda, eng kuchli optimallashtirish ustunni topishdir algoritm. Butun tizimni optimallashtirish odatda dasturchilar tomonidan amalga oshiriladi, chunki u avtomatlashtirilgan optimizatorlar uchun juda murakkab. Bunday vaziyatda dasturchilar yoki tizim ma'murlari kodni aniq o'zgartiradilar, shunda umumiy tizim yaxshiroq ishlaydi. Garchi u samaradorlikni oshirishi mumkin bo'lsa-da, avtomatlashtirilgan optimallashtirishga qaraganda ancha qimmat. Ko'p parametrlar dasturning ishlashiga ta'sir qilganligi sababli, dasturni optimallashtirish maydoni katta. Meta-evristika va mashinalarni o'rganish dasturlarni optimallashtirishning murakkabligini hal qilish uchun ishlatiladi.[8] A dan foydalaning profiler (yoki ishlash analizatori) dasturning eng ko'p manbalarni talab qiladigan bo'limlarini topish torlik. Dasturchilar ba'zida darzlik qaerda ekanligi to'g'risida aniq tasavvurga ega ekanligiga ishonishadi, ammo sezgi ko'pincha noto'g'ri.[iqtibos kerak] Kodning ahamiyatsiz qismini optimallashtirish odatda umumiy ishlashga yordam berishi mumkin emas. Darzlik mahalliylashtirilganda, optimallashtirish odatda dasturda ishlatiladigan algoritmni qayta ko'rib chiqishdan boshlanadi. Ko'pincha, ma'lum bir algoritm ma'lum bir muammoga mos ravishda tuzilishi mumkin, bu umumiy algoritmga qaraganda yaxshiroq ishlashga olib keladi. Masalan, buyumlarning ulkan ro'yxatini saralash vazifasi odatda a bilan bajariladi tezkor muntazam, bu eng samarali umumiy algoritmlardan biridir. Ammo buyumlarning biron bir xususiyati ekspluatatsiya