ძირითადი განსხვავება – მანქანაზე დამოკიდებული და მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაცია
კომპიუტერული პროგრამები არის ინსტრუქციების ერთობლიობა, რომელიც მოცემულია აპარატურაზე დავალებების შესასრულებლად. ეს პროგრამები ძირითადად მაღალი დონის ენებზეა დაწერილი და კომპიუტერს ეს ენა არ ესმის. მაშასადამე, შემდგენელი გამოიყენება ამ ინსტრუქციების მანქანის ან სამიზნე კოდად გადასაყვანად. ის გადის რამდენიმე ფაზას სამიზნე კოდის შესაქმნელად. კოდის ოპტიმიზაცია ერთ-ერთი მათგანია. არსებობს ორი ოპტიმიზაციის ტექნიკა, როგორიცაა, მანქანაზე დამოკიდებული და მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაცია. მანქანაზე დამოკიდებულ და მანქანაზე დამოუკიდებელ კოდის ოპტიმიზაციას შორის მთავარი განსხვავება ისაა, რომ მანქანაზე დამოკიდებული ოპტიმიზაცია გამოიყენება ობიექტის კოდზე, ხოლო მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაცია გამოიყენება შუალედურ კოდზე.
რა არის მანქანაზე დამოკიდებული კოდის ოპტიმიზაცია?
საწყისი კოდის ობიექტურ ან სამიზნე კოდად გადაქცევისას, შემდგენელი გადის რამდენიმე ფაზას. პირველ რიგში, წყაროს კოდი გადაეცემა ლექსიკურ ანალიზატორს, რომელიც აწარმოებს ტოკენებს. შემდეგ, გამომავალი გადაეცემა სინტაქსის ანალიზატორს, რომელიც იკვლევს, არის თუ არა გენერირებული ნიშნები ლოგიკური თანმიმდევრობით. ეს გამომავალი მოცემულია სემანტიკური ანალიზატორისთვის. დავუშვათ, რომ არსებობს კოდის ნაწილი, როგორც p=q + r;
აქ, p, q არის მთელი რიცხვები, მაგრამ r არის ათწილადი. სემანტიკური ანალიზატორის გამოყენებით c მთელი რიცხვი ცვლადი გარდაიქმნება float-ად. ამიტომ აკეთებს სემანტიკურ ანალიზს. სემანტიკური ანალიზატორის გამომავალი მიდის შუალედური კოდის გენერატორში. ის აბრუნებს შუალედურ კოდს, რომელიც შემდეგ გადადის კოდის ოპტიმიზატორში. კოდის ოპტიმიზაცია არის პროგრამის არაარსებითი განცხადებების აღმოფხვრის პროცესი, ფაქტობრივი კოდის მნიშვნელობის შეცვლის გარეშე. ეს არ არის სავალდებულო ოპტიმიზაცია, მაგრამ მას შეუძლია გააუმჯობესოს სამიზნე კოდის მუშაობის დრო.კოდის ოპტიმიზატორის გამომავალი გადაეცემა კოდის გენერატორს და ბოლოს, სამიზნე კოდი აგებულია.
სურათი 01: შემდგენელის ფაზები
მანქანაზე დამოკიდებული კოდის ოპტიმიზაციაში ოპტიმიზაცია გამოიყენება წყაროს კოდზე. საკმარისი რაოდენობის რესურსების გამოყოფას შეუძლია გააუმჯობესოს პროგრამის შესრულება ამ ოპტიმიზაციაში.
რა არის მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაცია?
როდესაც ოპტიმიზაცია კეთდება შუალედურ კოდზე, მას უწოდებენ მანქანის დამოუკიდებელი კოდის ოპტიმიზაციას. არსებობს სხვადასხვა ტექნიკა მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაციის მისაღწევად. ისინი აღწერილია შემდეგი მაგალითების გამოყენებით.
წაიკითხეთ კოდის ქვემოთ მოცემული სტრიქონები.
-ისთვის (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
ზემოხსენებული კოდის მიხედვით, b=x+2 გამოითვლება ისევ და ისევ თითოეულ გამეორებაში. მას შემდეგ, რაც b გამოითვლება, ის არ იცვლება. ამრიგად, ეს ხაზი შეიძლება განთავსდეს მარყუჟის გარეთ შემდეგნაირად.
b=x+2;
-ისთვის (j=0; j< 10; j++)
{a[j]=5j;
}
ამას ეწოდება კოდის მოძრაობა.
წაიკითხეთ კოდის ქვემოთ მოცემული სტრიქონები.
j=5;
თუ (j==10) {
a=b+20;
}
ზემოხსენებული კოდის მიხედვით, "if block" არასოდეს შესრულდება, რადგან j მნიშვნელობა არასოდეს იქნება 10-ის ტოლი. ის უკვე ინიციალიზებულია 5-მდე. ამიტომ, ეს if ბლოკი შეიძლება წაიშალოს. ეს ტექნიკა არის მკვდარი კოდის აღმოფხვრა.
კიდევ ერთი მეთოდი სიძლიერის შემცირებაა. არითმეტიკული ოპერაციები, როგორიცაა გამრავლება, მოითხოვს მეტ მეხსიერებას, დროს და CPU ციკლებს. ეს ძვირადღირებული გამონათქვამები შეიძლება შეიცვალოს იაფი გამონათქვამებით, როგორიცაა b=a2; ან შეიძლება შეიცვალოს მიმატებით, b=a + a;
იხილეთ ქვემოთ მოცემული კოდი.
-ისთვის (j=1; j <=5; j ++) {
მნიშვნელობა=j5;
}
გამრავლების ნაცვლად კოდი შეიძლება შეიცვალოს შემდეგნაირად.
int temp=5;
-ისთვის (j=1; j<=5; j++) {
ტემპერატურა=ტემპერატურა + 5;
მნიშვნელობა=ტემპერატურა;
}
შესაძლებელია გამოსახულებების შეფასება, რომლებიც მუდმივებია გაშვების დროს. მას მუდმივი დასაკეცი ჰქვია. შეიძლება ითქვას, როგორიცაა b[j+1]=c [j+1];
სანაცვლოდ, ის შეიძლება შეიცვალოს შემდეგნაირად.
n=j +1;
b[n]=c[n];
შეიძლება იყოს მარყუჟები შემდეგნაირად.
-ისთვის (j=0; j<5; j++) {
printf("a\n");
}
-ისთვის (j=0; j <5; j++) {
printf("b\n");
}
a და b ბეჭდვა, ორივეს აქვს იგივე რაოდენობის გამეორება. ორივე შეიძლება გაერთიანდეს ერთ ციკლში შემდეგნაირად.
-ისთვის (j=0; j <5; j++) {
printf("a \n");
printf("b\n");
}
კიდევ ერთი მნიშვნელოვანი ტექნიკა არის საერთო ქვეგამოსახულების აღმოფხვრა. ეს არის იდენტური გამონათქვამების ჩანაცვლება ერთი ცვლადით, რათა მოხდეს გაანგარიშება. იხილეთ ქვემოთ მოცემული კოდი.
a=bc + k;
d=b c + m;
ამ კოდის გარდაქმნა შესაძლებელია შემდეგნაირად.
ტემპერატურა=bc;
a=ტემპერატურა + k;
d=ტემპერატურა + m;
არ არის საჭირო bc გამოთვლა ისევ და ისევ. გამრავლებული მნიშვნელობა შეიძლება შეინახოს ცვლადში და ხელახლა გამოიყენოს.
რა მსგავსებაა მანქანაზე დამოკიდებული და მანქანაზე დამოუკიდებელ კოდის ოპტიმიზაციას შორის?
ორივე ეკუთვნის კოდის ოპტიმიზაციას
რა განსხვავებაა მანქანაზე დამოკიდებულ და მანქანაზე დამოუკიდებელ კოდის ოპტიმიზაციას შორის?
მანქანაზე დამოკიდებული მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაცია |
|
მანქანაზე დამოკიდებული კოდის ოპტიმიზაცია გამოიყენება ობიექტის კოდზე. | მანქანისგან დამოუკიდებელი კოდის ოპტიმიზაცია გამოიყენება შუალედურ კოდზე. |
ჩართვა აპარატურაში | |
მანქანაზე დამოკიდებული ოპტიმიზაცია მოიცავს CPU რეგისტრებს და მეხსიერების აბსოლუტურ მითითებებს. | მანქანის დამოუკიდებელი კოდის ოპტიმიზაცია არ მოიცავს CPU რეგისტრებს ან მეხსიერების აბსოლუტურ მითითებებს. |
შეჯამება – მანქანაზე დამოკიდებული კოდის ოპტიმიზაცია მანქანებზე დამოკიდებული
კოდის ოპტიმიზაცია შედგება ორი ოპტიმიზაციის ტექნიკისგან, კერძოდ, მანქანაზე დამოკიდებული და მანქანაზე დამოუკიდებელი კოდის ოპტიმიზაცია. განსხვავება მანქანაზე დამოკიდებულ და მანქანაზე დამოუკიდებელ კოდის ოპტიმიზაციას შორის არის ის, რომ მანქანაზე დამოკიდებული ოპტიმიზაცია გამოიყენება ობიექტის კოდზე, ხოლო მანქანიდან დამოუკიდებელი კოდის ოპტიმიზაცია გამოიყენება შუალედურ კოდზე.
ჩამოტვირთეთ მანქანებზე დამოკიდებული მანქანებზე დამოკიდებული კოდის ოპტიმიზაციის PDF ვერსია
შეგიძლიათ ჩამოტვირთოთ ამ სტატიის PDF ვერსია და გამოიყენოთ იგი ოფლაინ მიზნებისთვის ციტირების შენიშვნის მიხედვით. გთხოვთ გადმოწეროთ PDF ვერსია აქ განსხვავება მანქანაზე დამოკიდებულ და მანქანაზე დამოუკიდებელ კოდის ოპტიმიზაციას შორის