לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 02-08-2005, 17:56
צלמית המשתמש של fat fish
  fat fish fat fish אינו מחובר  
 
חבר מתאריך: 20.06.03
הודעות: 5,616
אופטימיזציה של קוד - מבוא

אופטימיזציה של קוד
פרק ראשון בסדרה
נכתב עיי זיו פרי, מבוסס על מידע של microsoft
MSDN, Microsoft Press


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

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

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

הרמה הגבוהה
הרמה האלגוריתמית שייכת לרמת הפיתוח, לדוגמה אלגוריתמי חיפוש כמו quick sort שהוא מהיר
יותר מ insertion sort. כמו שנוכל לראות מהצצה באלגוריתמים אלו – בדרך כלל, האלגוריתמים
המהירים יותר הם הגדולים יותר (מבחינת קוד).

הרמה הנמוכה
רמה בסיסית של אופטימיזציה השייכת למהדר, נקראת peephole. ברמה זו המהדר משתמש
בתכונות מסוימות של הקוד על מנת לחסוך מחזורי שעון. שימוש בשיטה זו יוצר קוד שבדרך כלל קטן
יותר ומהיר יותר - אך הוא בא לידי ביטוי רק כאשר מצטברות הרבה הוראות שעוברות אופטימיזציה.
דוגמאות
ההוראה הבאה:
קוד PHP:
 and dword ptr [x], 

קטנה בשלושה בתים ואיטית פי 3 מהפקודה:
קוד PHP:
 mov dword ptr [x], 

שתי הוראות אלו מציבות 0 במשתנה x, אך במהירות שונה (ובהבדלי גודל קוד).

דוגמה נוספת:
קוד PHP:
 push 1 
 
pop eax 

אמנם יותר קטנה יותר מההוראה הבאה, אך היא איטית פי 2 מההוראה הבאה:
קוד PHP:
 mov eax


הרמה הבינונית
רמה נוספת של אופטימיזציה היא טכניקות הנמצאות בין שני הרמות שהוזכרו למעלה.
נדגים שימוש ב-loop jamming או "דחיסת לולאות":
קוד PHP:
 for (i=0;i<50;i++) 
 
            
x[i] = 0;
 
for (
j=0;j<50;j++)
 
            
y[j] = j

תהליך הדחיסה מאחד את שתי הלולאות לחסוך את כל מחזורי השעון הנדרשים לביצוע שתי לולאות:
קוד PHP:
 for (i=0;i<50;i++) 
{
     
x[i] = 0;
     
y[i] = i;


במקרה כזה המהדר אינו יכול להבחין באפשרות לאחד את הלולאות וזה תפקידו של המפתח.
שיטות נוספות (שיסקרו בהמשך) של רמה זו הינם loop hoisting, copy propagation ו-subexpression elimination.

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

בדרך כלל, אופטימיזציה ברמה הגבוהה, כלומר אופטימיזציה אלגוריתמית היא זו שתראה חיסכון
מורגש במהירות ההרצה.
לכן האסכולה המקובלת כיום גורסת כי עדיף לבצע אופטימיצזיה ברמת הקוד (אלגוריתמיקה) ולכוון
את המהדר לבצע אופטימיזציה של גודל. שילוב זה יוביל לקובץ ביצוע מהיר יותר וקטן יותר.
מדוע בכלל אנו צריכים בגל זאת לחסוך בגודל הקובץ בעולם של מחשבים עם מאות ג'יגה של כונן
וזיכרון כמעט בלתי נדלה?
התשובה היא שמאחר שהמחשוב כיום משתמש בריבוי משימות, קובץ גדול שלא ישב כולו בזיכרון
יגרום ל page fault (פסיקה המורה למעבד שהמידע שהוא מחפש לא נמצא ב-ram אלא על הדיסק
כחלק מה"זיכרון הוירטואלי"). ריבוי פסיקות כאלו, מאיט את כל!! פעולת המחשב ומצריך קריאה
מהדיסק שהיא תהליך מאוד מאוד בזבזני של זמן.

לסיכום פרק ראשון
1. עדיף לבצע אופטימיזציה ברמת הקוד ככל שנוכל, כל זה תלוי בך - במפתח!!
2. עדיף לכוון את המהדר (לכל מהדר יש אופציות הידור שונות) לקבלת קוד ביצוע קטן ככל האפשר.


בפרק הבא, שיטות אופטימיזציה
_____________________________________
[ זיו ]
[ fat fish ]


נערך לאחרונה ע"י fat fish בתאריך 02-08-2005 בשעה 18:03.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 17:43

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר