Optimallashtirish darajalari
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