ABA


"שאלת זמני ריצה"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10933 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10933
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   18:24   08.10.12   
אל הפורום  
  שאלת זמני ריצה  
 
   קודם כל אציין שזו לא שאלה תאורטית (לא עוסקת בסדרי גודל), סתם משהו שאני רוצה להבין.

יש 2 תוכניות:

1. התוכנית הראשונה מבצעת לולאה מ-1 עד n, ובתוך הלולאה מחזיקה 2 קאונטרים i ו- j שעולים ב-1 כל הזמן.

2. התוכנית השניה עושה את אותה הפעולה אבל היא משתמשת ב-2 לולאות במקום ב-1, כלומר בהתחלה מריצה לולאה מ-1 עד n, ומעלה את הקאונטר i ב-1 כל פעם, ואחרי שהלולאה מסתיימת, היא מריצה לולאה נוספת מ-1 עד n ומעלה את הקאונטר j ב-1.

האם התוכניות יפעלו בדיוק אותו זמן? (נגיד מריצים את שניהם על אותו מחשב)
האם בכל מצב שבו נפרק את אוסף הפעולות בתוך לולאה מסוימת למספר לולאות, פרק הזמן לא ישתנה (או כן ישתנה)?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  זה מאד זניח Deuce  08.10.12 18:32 1
     אבל לא באמת הוספתי עוד n פעולות MrSus 08.10.12 19:13 3
         יש לך את בנוסף את המונים של הלולאה עצמה Deuce  08.10.12 19:49 5
  תיאורתית VeNom  08.10.12 18:32 2
     ואם הלולאה השניה הייתה ריקה? MrSus 08.10.12 19:15 4
         קח דוגמא של לולאה VeNom  08.10.12 21:26 6
  אתם צודקים, לא ניסחתי את השאלה טוב MrSus 09.10.12 19:18 7
  ההיגיון שלי אומר שאתה מבצע אקסטרה n פעולות ללא סיבה, יוחאי 10.10.12 06:35 8
     ברור שזה שגוי, זו סתם שאלה מתוך סקרנות MrSus 10.10.12 12:49 9
  בשניה אתה בודק את התנאי פי 2 פעמים.. פחות יעיל inno3D 10.10.12 17:49 10

       
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   18:32   08.10.12   
אל הפורום  
  1. זה מאד זניח  
בתגובה להודעה מספר 0
 
אם להתעלם מכל האילוצים, אז בתכנית השנייה אתה מוסיף עוד n פעולות שנגזרות מה-counter של הלולאה השנייה.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   19:13   08.10.12   
אל הפורום  
  3. אבל לא באמת הוספתי עוד n פעולות  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 08.10.12 בשעה 19:18 בברכה, MrSus
 
תשים לב בשני התוכניות יש בדיוק אותם קאנוטרים.. רק שהתוכנית הראשונה משתמשת בלולאה אחת ובתוכה עולים 2 הקאונטרים (אחד אחרי השני), והתוכנית השניה נותנת לכל קאנוטר לולאה משלו..

אבל בסה"כ שתי התוכניות מבצעות בדיוק אותו דבר, ושניהן מכילות 2 קאנוטרים שמשתנים אותו מספר של פעמים (n פעמים כל קאונטר).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   19:49   08.10.12   
אל הפורום  
  5. יש לך את בנוסף את המונים של הלולאה עצמה  
בתגובה להודעה מספר 3
 
נניח אפילו שנכתוב:

while (i < n)
i++;
while (j < n)
j++;

Versus
while (i < n)
{
i++;
j++;
}


איך לולאה עובדת? בכל איטרציה מתבצע if שבודק האם אתה יכול להכנס פנימה. במקרה הראשון יש לך פי שניים IFים על פני המקרה השני.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   18:32   08.10.12   
אל הפורום  
  2. תיאורתית  
בתגובה להודעה מספר 0
 
   אותם סדרי גודל(לינארי).

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

כאן זה די ברור שהשני עושה יותר פעולות.

הראשון רץ על לולאה ובכל איטרציה מבצע 2 פעולות.

השני רץ פעמיים על לולאה ובכל איטרציה מבצע פעולה.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   19:15   08.10.12   
אל הפורום  
  4. ואם הלולאה השניה הייתה ריקה?  
בתגובה להודעה מספר 2
 
   נניח יש תוכנית שמבצעת בדיוק מה שהתוכנית הראשונה עושה, ואחרי שהיא מסיימת היא מריצה עוד לולאה מ-1 עד n אבל ריקה.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   21:26   08.10.12   
אל הפורום  
  6. קח דוגמא של לולאה  
בתגובה להודעה מספר 4
 
  

for(i = 0 ; i < 100 ; i++)
{
}

לולאה נראת משהו כזה..שים לב שהמשתנה i כאן הוא לא משתנה זמני שנועד רק לסקופ של הלולאה(מה שב"דכ קורה ומוסיף עוד פעולות לעסק).
הלולאה רצה 100 פעמים. בכל פעם בודקים האם תנאי העצירה ומתקיים ומבצעים i++. אלה פעולות שלא מתבצעות לחינם.
תחזוקת קאונטר הכוונה כמו ל i כאן..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   19:18   09.10.12   
אל הפורום  
  7. אתם צודקים, לא ניסחתי את השאלה טוב  
בתגובה להודעה מספר 0
 
   אבל לא חשוב בנתיים, אני אנסה פעם אחרת תודה על התשובות!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   06:35   10.10.12   
אל הפורום  
  8. ההיגיון שלי אומר שאתה מבצע אקסטרה n פעולות ללא סיבה,  
בתגובה להודעה מספר 0
 
   אם יש לך 2 משתנים ששניהם צריכים להגיע לn וכבר קיימת לך לולאה שמקדמת את x לn אז למה לא לקדם גם את y במקום ליצור 2 לולאות בנפרד ולרוץ פעמיים כשאפשר לרוץ פעם אחת?

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   12:49   10.10.12   
אל הפורום  
  9. ברור שזה שגוי, זו סתם שאלה מתוך סקרנות  
בתגובה להודעה מספר 8
 
   אבל כמו שאמרתי ניסחתי אותה בצורה לא נכונה, זה לא בדיוק מה שהתכוונתי לשאול.. אני אחזור ושאשאל את השאלה בהזדמנות אחרת... זה לא חשוב לי כרגע, סתם זה עלה לי במהלך משהו שעשיתי, ועכשיו כבר לא כ"כ רלוונטי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
inno3D
חבר מתאריך 21.4.02
4533 הודעות
   17:49   10.10.12   
אל הפורום  
  10. בשניה אתה בודק את התנאי פי 2 פעמים.. פחות יעיל  
בתגובה להודעה מספר 0
 
   אבל סדר הגודל זהה.. שניהם סדר גודל של n


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net