Өндүрүмдүүлүктү оптималдаштыруу
Алгач ченеп ал, бир нерсени гана өзгөрт жана кайра чыгарыла турган сандарга гана ишен
- болжолдоонун ордуна чыныгы ысык чекиттерди табуу үчүн профайлерди колдоно аласыз,
- эстутум иерархиясы жөнүндө ой жүгүртүп, кэшке ыңгайлуу маалымат жайгаштырууну жаза аласыз,
- шилтемелер, жылдыруу,
reserveжана көрүнүштөр менен ашыкча көчүрмөлөрдү жоё аласыз, - инлайнинг жана компоновка учурундагы оптималдаштыруу чын эле эмне кыларын түшүнөсүз,
- оптимизаторду аман өтүүчү чынчыл микробенчмарктарды жаза аласыз.
1. Оптималдаштыруудан мурун профилдө
Өндүрүмдүүлүк боюнча иштеги эң кымбат ката - эч качан жай болбогон кодду оптималдаштыруу. Программалар убактысынын көбүн коддун кичине бөлүгүндө өткөрөт, жана бул бөлүк көбүнчө тажрыйбалуу инженер күткөн жерде эмес. Профайлер убакыт кайда чын эле кетээрин ченейт, ошондо сиз маанилүү бөлүктү оңдойсуз.
Профайлердин эки үй-бүлөсү кеңири таралган:
- Сэмплдөөчү профайлерлер (perf, VTune, Instruments) программаны секундасына көп жолу үзгүлтүккө учуратып, чакыруу стегин жазат. Алар дээрлик кошумча жүк бербей, ысык чекиттердин статистикалык сүрөтүн берет. Чыныгы жүктү биринчи караш үчүн эң сонун.
- Инструменттөөчү профайлерлер (callgrind, gprof) ар бир функциянын тегерегине эсептөө кодун коёт. Алар так чакыруу санын берет, бирок программаны бир нече эсе жайлатат жана кичинекей функцияларды бурмалайт.
Оптималдаштырууну арифметика да чектейт. Амдал мыйзамы айтат: эгер убакыттын p үлүшү тездетилген бөлүктө кетсе жана сиз аны чексиз ылдам кылсаңыз, бүт программа эң көп дегенде 1 / (1 - p) эсе ылдамдайт. Эгер функцияда убакыттын 10% болсо, аны идеалдаштыруу жалпысынан 10% дан ашык үнөмдөбөйт - демек чоң p ди табуу үчүн профилдеңиз, калганын елебеңиз.