הבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה של קוד עצמאי

תוכן עניינים:

הבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה של קוד עצמאי
הבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה של קוד עצמאי

וִידֵאוֹ: הבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה של קוד עצמאי

וִידֵאוֹ: הבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה של קוד עצמאי
וִידֵאוֹ: Lec-25: What is Code Optimization | Machine Dependent vs Machine Independent Techniques 2024, דֵצֶמבֶּר
Anonim

הבדל מפתח – אופטימיזציה של קוד עצמאי במכונה לעומת קוד עצמאי

תוכניות מחשב הן קבוצות של הוראות שניתנו לחומרה, לביצוע משימות. תוכנות אלו כתובות לרוב בשפות ברמה גבוהה, והמחשב אינו מבין את השפה הזו. לכן, מהדר משמש להמרת הוראות אלה לקוד מכונה או לקוד יעד. זה עובר מספר שלבים כדי לבנות את קוד היעד. מיטוב קוד הוא אחד מהם. ישנן שתי טכניקות אופטימיזציה כמו, אופטימיזציה של קוד תלוי מכונה ואופטימיזציה של קוד עצמאי. ההבדל העיקרי בין אופטימיזציה של קוד תלוי מכונה ואופטימיזציה תלוית מכונה היא שהאופטימיזציה תלויה במכונה מוחלת על קוד אובייקט בעוד אופטימיזציה של קוד עצמאית במכונה מוחלת על קוד הביניים.

מהו אופטימיזציה של קוד תלוי-מכונה?

כאשר ממיר את קוד המקור לקוד אובייקט או לקוד יעד, המהדר עובר מספר שלבים. ראשית, קוד המקור ניתן ל-Lexical Analyzer שמייצר אסימונים. לאחר מכן, הפלט ניתן לנתח תחביר אשר חוקר האם האסימונים שנוצרו בסדר הגיוני. הפלט הזה ניתן לנתח הסמנטי. נניח שיש קטע קוד כמו p=q + r;

כאן, p, q הם מספרים שלמים, אבל r הוא צף. באמצעות הנתח הסמנטי, המשתנה השלם c מומר לצוף. לכן, הוא עושה את הניתוח הסמנטי. הפלט של המנתח הסמנטי עובר למחולל קוד הביניים. זה מחזיר קוד ביניים שלאחר מכן עובר למיטוב הקוד. אופטימיזציה של קוד היא תהליך של ביטול הצהרות התוכנית הלא חיוניות מבלי לשנות את המשמעות של קוד המקור בפועל. זה לא אופטימיזציה חובה אבל זה יכול לשפר את זמן הריצה של קוד היעד.הפלט של מייעל הקוד ניתן למחולל הקוד, ולבסוף נבנה קוד היעד.

ההבדל בין אופטימיזציה של קוד תלוי מכונה ואופטימיזציה של קוד עצמאי
ההבדל בין אופטימיזציה של קוד תלוי מכונה ואופטימיזציה של קוד עצמאי
ההבדל בין אופטימיזציה של קוד תלוי מכונה ואופטימיזציה של קוד עצמאי
ההבדל בין אופטימיזציה של קוד תלוי מכונה ואופטימיזציה של קוד עצמאי

איור 01: שלבי המהדר

באופטימיזציה של קוד תלוי מכונה, אופטימיזציה מוחלת על קוד המקור. הקצאת כמות מספקת של משאבים יכולה לשפר את ביצוע התוכנית באופטימיזציה זו.

מהו אופטימיזציה של קוד עצמאי במכונה?

כאשר נעשה אופטימיזציה על קוד הביניים, זה נקרא אופטימיזציה של קוד עצמאי במכונה. ישנן טכניקות שונות להשגת אופטימיזציה של קוד עצמאי במכונה. הם מתוארים באמצעות הדוגמאות הבאות.

קרא את שורות הקוד הבאות.

for (j=0; j<10; j ++) {

b=x+2;

a[j]=5 j;

}

לפי הקוד לעיל, b=x+2 מחושב שוב ושוב בכל איטרציה. ברגע ש-b מחושב, הוא לא משתנה. לכן, ניתן למקם את הקו הזה מחוץ ללולאה באופן הבא.

b=x+2;

for (j=0; j< 10; j++)

{a[j]=5j;

}

זה נקרא תנועת קוד.

קרא את שורות הקוד הבאות.

j=5;

if (j==10) {

a=b+20;

}

לפי הקוד לעיל, 'אם בלוק' לעולם לא יתבצע מכיוון שערך j לעולם לא יהיה שווה ל-10. הוא כבר מאותחל לערך 5. לכן, ניתן להסיר את הבלוק הזה אם. טכניקה זו היא חיסול קוד מת.

שיטה נוספת היא הפחתת חוזק. פעולות אריתמטיות כמו כפל דורשות יותר זיכרון, זמן ומחזורי מעבד. ניתן להחליף את הביטויים היקרים הללו בביטויים זולים כמו b=a2; או שניתן להחליף בתוספת, b=a + a;

עיין בקוד שלהלן.

for (j=1; j <=5; j ++) {

value=j5;

}

במקום הכפל, ניתן לשנות את הקוד באופן הבא.

int temp=5;

for (j=1; j<=5; j++) {

temp=temp + 5;

value=temp;

}

אפשר להעריך את הביטויים שהם קבועים בזמן ריצה. זה נקרא קיפול מתמיד. ניתן לציין כמו b[j+1]=c [j+1];

במקום זאת, ניתן לשנות אותו באופן הבא.

n=j +1;

b[n]=c[n];

יכולות להיות לולאות כדלקמן.

for (j=0; j<5; j++) {

printf(“a\n”);

}

for (j=0; j <5; j++) {

printf(“b\n”);

}

הדפסת a ו-b, לשניהם מספר זהה של איטרציות. ניתן לשלב את שניהם ללולאה אחת כדלקמן.

for (j=0; j <5; j++) {

printf(“a \n”);

printf(“b\n”);

}

טכניקה חשובה נוספת היא חיסול המשנה של ביטוי המשנה. זה להחליף את הביטויים הזהים במשתנה יחיד כדי לבצע את החישוב. עיין בקוד הבא.

a=bc + k;

d=b c + m;

ניתן להמיר את הקוד הזה באופן הבא.

temp=bc;

a=temp + k;

d=temp + m;

אין צורך לחשב bc שוב ושוב. ניתן לאחסן את הערך המוכפל במשתנה ולעשות בו שימוש חוזר.

מהו הדמיון בין אופטימיזציה של קוד תלוי-מכונה לאופטימיזציה של קוד עצמאי?

שני אלה שייכים לקוד אופטימיזציה

מה ההבדל בין אופטימיזציה של קוד תלוי-מכונה לאופטימיזציה של קוד עצמאי?

אופטימיזציה של קוד עצמאי מול מכונה

אופטימיזציה של קוד תלוי מכונה מוחלת על קוד אובייקט. אופטימיזציה של קוד בלתי תלוי במכונה מוחלת על קוד ביניים.
מעורבות בחומרה
אופטימיזציה תלויה במכונה כוללת אוגרי CPU והפניות זיכרון מוחלטות. אופטימיזציית קוד עצמאית של מכונה אינה כרוכה ברישומי CPU או הפניות זיכרון מוחלטות.

סיכום – אופטימיזציית קוד עצמאית מול מכונה

אופטימיזציה של קוד מורכבת משתי טכניקות אופטימיזציה, כלומר, אופטימיזציה של קוד תלוי מכונה ואופטימיזציה בלתי תלויה במכונה. ההבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה תלוית מכונה היא שהאופטימיזציה תלויה במכונה מוחלת על קוד אובייקט ואילו אופטימיזציית קוד עצמאית במכונה מוחלת על קוד ביניים.

הורד את גרסת ה-PDF של אופטימיזציית קוד עצמאית מול מכונה

ניתן להוריד את גרסת ה-PDF של מאמר זה ולהשתמש בה למטרות לא מקוונות לפי הערת ציטוט. אנא הורד כאן גרסת PDF ההבדל בין אופטימיזציה של קוד תלוי מכונה לאופטימיזציה של קוד עצמאי

מוּמלָץ: