You are on page 1of 5

‫פתרונות‬

‫תרגיל חובה מספר ‪ 1‬בארכיטקטורה ‪2022‬ב מועד הגשה ‪6.3.2022‬‬


‫יש להגיש דרך המודול בלבד !‬
‫שאלה ‪:1‬‬
‫א‪ .‬בסיס ‪:r = 7‬‬
‫‪2360r +236r = 2626r‬‬

‫‪2r3+3r2+6r1+0r0+2r2+3r1+6r0=2r3+6r2+2r1+6r0‬‬
‫‪5r2+9r=6r2+2r‬‬

‫‪0=r2-7r =r(r-7) → r=7‬‬


‫(כמובן שהפתרון ‪ 0‬לא מתקיים כי אין בסיס ‪)0‬‬

‫נבדוק שאכן עבור בסיס ‪ 7‬מתקיים השוויון‪:‬‬

‫‪1‬‬
‫‪23607‬‬
‫‪2367‬‬
‫‪26267‬‬

‫‪+‬‬

‫בסיס ‪:r = 6‬‬


‫‪532r - 223r = 305r‬‬

‫‪5r2+3r1+2r0-2r2-2r1-3r0=3r2+0r1+5r0‬‬
‫‪3r2+1r1-1=3r2+0r1+5‬‬
‫‪r-1=5‬‬
‫‪r=6‬‬

‫בשלב הבא נוודא שהתוצאה אכן נכונה‪:‬‬

‫‪5326‬‬
‫‪- 223‬‬
‫‪6‬‬
‫‪3066‬‬
‫שאלה ‪:2‬‬
‫א‪ .‬תחום ייצוג המספרים כתלות במספר הסיביות ‪ n‬בשיטת ייצוג ‪:sign and magnitude‬‬
‫‪-(2n-1-1) …..+2n-1-1‬‬
‫ולכן ב ‪ 11‬סיביות נייצג את המספרים בין ‪. -1023 … +1023‬‬
‫הפתרון הראשוני והאינטואיטיבי להצגת מספרים חיוביים ושליליים היה ע"י הוספת סיבית סימן‬
‫נפרדת להגדרת הסימן‪ .‬כך נוצרה שיטת ייצוג מספרים גודל סימן ‪. sign and magnitude‬‬
‫כמה בעיות היו בשיטה במהלך יישומה במחשבים‪.‬‬
‫‪ -‬לא הייתה מוסכמה איפה לשים את סיבית הסימן (משמאל או מימין)‬
‫‪ -‬האריתמטיקה מורכבת יותר ויש צורך בשלב נוסף לבדיקה האם המספר חיובי או שלילי ‪,‬‬
‫זהו למעשה חיסרון גדול המסבך וגורם לזמן החישוב להיות ארוך יותר‪.‬‬
‫‪ -‬לייצוג הערך אפס קיימות שתי אפשריות ‪,‬דבר העלול לעשות בעיות בפעולות השוואה‬
‫ועיגול מספרים בתכניות‪.‬ולכן שיטה זו נזנחה וכיום על מנת לייצג מספרים שלמים עם‬
‫סימן אנו משתמשים בשיטת המשלים ל ‪.2‬‬
‫ב‪ .‬נפרק את המספר ‪ 345610‬לסיביות (בסיס ‪ )2‬לפי אלגוריתם הפירוק‪.‬‬
‫)‪3456/2=1728 (mod 0‬‬
‫)‪1728/2=864 (mod 0‬‬
‫)‪864/2=432 (mod 0‬‬
‫)‪432/2=216 (mod 0‬‬
‫)‪216/2=108 (mod 0‬‬
‫)‪108/2=54 (mod 0‬‬
‫)‪54/2=27 (mod 0‬‬
‫)‪27/2=13 (mod 1‬‬
‫)‪13/2=6 (mod 1‬‬
‫)‪6/2=3 (mod 0‬‬
‫)‪3/2=1 (mod 1‬‬
‫)‪1/2=0 (mod 1‬‬
‫כלומר קיבלנו‪110110000000bin :‬‬
‫ואמנם ‪211+210+28+27=345610 :‬‬
‫המעבר לבסיסים ‪ 16 8 4‬הוא מיידי‪:‬‬
‫( כל שתי סיביות הן סיפרה בבסיס ‪ ,4‬כל ‪ 3‬סיביות הן סיפרה בבסיס ‪ 3‬וגל ‪ 4‬סיביות הן סיפרה‬
‫בבסיס ‪)4‬‬
‫‪110110000000bin=3120004=66008=0xD80‬‬

‫קיימות כמה טכניקות להגיע לערך ‪ -3456‬לפי משלים ל ‪ 2‬ב ‪ 16‬סיביות‪.‬‬


‫ניקח את המספר ‪0000110110000000bin‬‬ ‫‪.I‬‬
‫נבצע ‪ not‬ונוסיף ‪ 1‬לקבלת ‪-3456dec=1111001010000000bin :‬‬
‫(זו הטכניקה המוצעת בסעיף ‪ 2.4‬בספר להיפוך סימן משלים ל ‪) 2‬‬

‫‪ .II‬ניתן להגיע לערך של ‪ -3456‬ב ‪ 16‬סיביות במשלים ל ‪ 2‬גם ע"י ביצוע הפעולה‪:‬‬
‫‪216-3456=62,080=1111001010000000bin‬‬

‫‪ .III‬טכניקה נוספת לקבלת ‪ -3456‬היא לקחת את המספר ‪ 3456‬בהצגה בינארית ב ‪ 16‬סיביות ‪,‬נעתיק את‬
‫הסיביות מהסיבית הימנית כלפי שמאל עד לסיבית הראשונה שערכה אחד (אותה נעתיק ללא שינוי) החל‬
‫מהסיבית הבאה יש לבצע העתקה עם ‪ not‬על כל הסיביות ‪,‬לקבלת המספר הנגדי ‪ -3456‬ב ‪ 16‬סיביות‪ .‬כמובן‬
‫שגם כאן תתקבל אותה התוצאה‪.‬‬

‫הערה‪ :‬ההגדרה המתמטית למשלים ל ‪ 2‬מתארת את המספרים ב ‪ n‬סיביות כשייכים לחבורה‬


‫מעגלית מודולו ‪ 2n‬עבור כל ‪ N‬חיובי )‪ (N<2n-1‬יהיה הנגדי ‪ –N=2n-N‬כלומר עם נחבר את ‪N‬‬
‫)‪(N+2n-N=2n‬‬ ‫ואת ‪ –N‬נקבל ‪.2n‬‬
‫‪n‬‬
‫ההשלמה היא ל ‪ 2‬ולכן השיטה נקראת משלים ל ‪ 2‬בחזקת ‪ n‬או בקיצור משלים לשתיים‪.‬‬
‫ההערה נוספת‪ :‬המשמעות של ההגדרה חבורה מעגלית מודולו ‪ 2n‬היא ש ‪ 2n=0‬ולכן ההשלמה של‬
‫המספר והנגדי נכונה מתמטית ע"פ ההגדרה שלמעשה ממנה נובעות את טכניקות היפוך הסימן)‬

‫ג‪ 1.‬הכפלה של מספר בארבע שקולה להזזה של שתי סיביות )‪ (bit‬שמאלה‪ ,‬עבור שיטת ייצוג ללא‬
‫סימן גלישה תהיה אם"ם ערך לפחות אחת משתי הסיביות השמאליות לפני הזזה יהיה ‪ .1‬כלומר‪,‬‬
‫יש לבדוק את שתי הסיביות השמאליות ‪.an-1 OR an-2=1‬‬
‫ג‪ 2.‬הכפלה של מספר בארבע שקולה להזזה של שתי סיביות )‪ (bit‬שמאלה‪ ,‬עבור שיטת ייצוג‬
‫משלים לשתיים כדי שתהיה גלישה אם במהלך תהליך ההזזה שמאלה תתבצע החלפת סימן‬
‫(סכום חיוביים יהיה שלילי או סכום שליליים יהיה חיובי) ‪ .‬כלומר תהיה גלישה אם"ם שלוש‬
‫הסיביות השמאליות לא יהיו זהות זו לזו בערכן‪ .‬במידה וכולן הן אפס או כולן ‪ 1‬יישמר הסימן‬
‫ולא תתבצע גלישה במהלך התהליך‪.‬‬
‫‪)an-1 xor an-2) OR (an-3 xor an-2)=1‬‬

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

‫יתרונות נוספים‪:‬‬
‫ניתן לבדוק את הסימן של כל ערך בינארי בקלות על ידי בדיקת הסיבית השמאלית‬ ‫•‬
‫ביותר‪( .‬קיים בכל השיטות המקובלות לייצוג מספרים שלילים )‬
‫לכל מספר בתחום הייצוג יש ייצוג יחיד‪ ,‬בניגוד למשל לשיטת המשלים ל‪ 1-‬שבה ל‪ 0-‬יש‬ ‫•‬
‫שני ייצוגים‪ ,‬דבר המסבך מימוש של חומרה ותוכנה‪( .‬אבל זה מייצר גם מספר שלילי שלא‬
‫ניתן לייצוג בחיוביים)‬

‫שאלה ‪: 3‬‬
‫מספר מחזורי השעון הדרושים לריצת כל התכנית הוא‪:‬‬
‫‪1‬‬
‫∙ ‪10 ∙ 0.5 ∙ 108 + 12‬‬ ‫]𝑐𝑐[ ‪∙ 108 + 1 ∙ 3 ∙ 108 = 10 ∙ 108‬‬
‫‪6‬‬
‫מכיוון שקצב השעון קבוע‪ ,‬על מנת שהמעבד ירוץ פי ‪ 4‬יותר מהר יש להקטין את מספר מחזורי השעון פי‬
‫‪ ,4‬כלומר להקטין את מספר מחזורי השעון ב‪ ) . 7.5 ∙ 108 -‬החלק היחסי ‪ F‬שיש לשפר על מנת להגיע‬
‫להאצה של ‪ 4‬הוא ‪.(1/(1-0.75)=4 0.75‬‬
‫‪1‬‬
‫פקודות החילוק מהוות רק ‪ 12 ∙ 6 ∙ 108 = 2 ∙ 108‬ממחזורי השעון‪ ,‬ולכן לפי חוק אמדל לא ניתן‬
‫להגיע לשיפור הרצוי על ידי האצה של פקודות החילוק ‪.‬‬
‫( החסם העליון של אמדל במקרה זה הוא ‪) 1/(1-0.2)=1.25‬‬
‫גם פקודות הכפל מהוות רק ‪ 10 ∙ 0.5 ∙ 108 = 5 ∙ 108‬ממחזורי השעון ולכן לא ניתן להגיע לשיפור‬
‫הרצוי בעזרת האצה של פקודות הכפל‪ .‬אז לא ניתן לשפר את זמן הריצה באופן המבוקש‪.‬‬
‫(החסם העליון של אמדל במקרה זה הוא ‪) 1/(1-0.5)=2‬‬
‫ב‪.‬‬
‫‪10‬‬
‫לאחר השיפור‪ ,‬ה‪ CPI-‬של פקודות הכפל הוא ‪= 1.25‬‬
‫‪8‬‬
‫‪12‬‬
‫וה‪ CPI-‬של פקודות החילוק הוא ‪ . = 4‬נקבל שמספר מחזורי השעון לאחר השיפור הוא‪:‬‬
‫‪3‬‬
‫‪1‬‬
‫]𝐶𝐶[ ‪1.25 ∙ 0.5 ∙ 10 + 4 ∙ ∙ 10 + 1 ∙ 3 ∙ 10 = 4.292 ∙ 108‬‬
‫‪8‬‬ ‫‪8‬‬ ‫‪8‬‬
‫‪6‬‬
‫והשיפור ביחס למעבד המקורי הוא‪:‬‬
‫‪10 ∙ 108‬‬
‫‪= 2.330‬‬
‫‪4.292 ∙ 108‬‬
‫שאלה ‪:4‬‬
‫ל‪ ,P1-‬נמצא ‪ CPI‬ממוצע‪:‬‬
‫]‪Cpi (P1)=1/6*1+3/6*1+1/6*2+1/6*3=9/6=1.5[Cc/Inc‬‬
‫]‪Cpi(P2)=1/6*2+3/6*4+1/6*2+1/6*3=19/6=3.16667[Cc/Inc‬‬
‫]‪CPUtime(P1)=IC*CPI/CR=IC*1.5/1.2[Ghz‬‬
‫]‪CPUtime(P2)=IC*CPI/CR=IC*3.16667/1.7[Ghz‬‬
‫באותו ‪ IC ISA‬הינו זהה ולכן‪:‬‬
‫‪CPUtime(P2)/CPUtime(P1)=(3.16667/1.7)/(1.5/1.2)=1.49‬‬
‫יוצא ש‪ P1-‬יותר מהיר (יותר פקודות לשנייה)‪ ,‬פי ‪1.49‬‬
‫שאלה ‪:5‬‬

‫) ‪Instructio n count ( instructions‬‬ ‫)‪clock rate( cycle / sec‬‬


‫= ‪MIPS‬‬ ‫‪6‬‬
‫=‬
‫‪CPU time (sec) *10‬‬ ‫‪CPI (cycle/ins truction) *10 6‬‬
‫א‪ .‬סידרת הפקודות האידיאלית ל‪ P1-‬היא זו שמורכבת מפקודות מקבוצה ‪ B‬בלבד (שיש להן ‪.)2 CPI‬‬
‫לכן‪ ,‬ביצוע השיא של ‪ P1‬הוא‬
‫‪(2.5*109 cycles/second) / (2 cycle/instruction*106) = 1250 MIPS‬‬
‫באופן דומה‪ ,‬סדרת הפקודות האידיאלית ל‪ P2 -‬מכילה את הפקודות מהקבוצות ‪( B C D‬שלכולן יש ‪CPI‬‬
‫‪ .)2‬לכן‪ ,‬ביצוע השיא של ‪ P2‬הוא‬
‫‪(2*10 cycles/second) / (2 cycle/instruction*106) = 1000 MIPS‬‬
‫‪9‬‬

‫ב‪ .‬נחשב את ‪ CPI-‬עבור כל מעבד‪:‬‬


‫]‪CPI(P1)=0.2*5[Cc/Ins]+0.2*2[Cc/Ins]+ 0.4*5[Cc/Ins]+ 0.2*6[Cc/Ins] = 4.6 [Cc/Ins‬‬

‫]‪CPI(P2)=0.2*4[Cc/Ins]+0.2*2[Cc/Ins]+ 0.4*2[Cc/Ins]+ 0.2*2[Cc/Ins] = 2.4[Cc/Ins‬‬


‫ג‪ .‬מספר מחזורי שעון לכל תוכנית הינו מספר הפקודות מוכפל ב ‪.CPI‬‬
‫]‪# CC(P1)=CPI*IC=4.6 [Cc/Ins]*107[Ins/P]=4.6*107[CC/P‬‬
‫]‪# CC(P2)=CPI*IC=2.2 [Cc/Ins]*106[Ins/P]=2.4*107[CC/P‬‬

‫ד‪.‬‬

‫]‪MIPS (P1)=2.5*109[cycle/sec]/4.6*106[CC/ins*106]=.543.48[MIPS‬‬
‫]‪MIPS (P2)=2*109[cycle/sec]/2.4*106[CC/ins*106]=833.33[MIPS‬‬
‫היות ומדובר על אותו סט פקודות מדד ה ‪ MIPS‬נותן אינדיקציה לגבי הביצועים ואנו רואים ש ‪ p2‬יותר טוב מ‬
‫)‪(833.33/543.48=1.533‬‬ ‫‪ p1‬פי ‪ 1.533‬במדד ה ‪.MIPS‬‬

‫ה‪ .‬זמן הריצה ‪ cpu time‬מוגדר‪:‬‬


‫𝑛𝑜𝑖𝑡𝑐𝑢𝑟𝑡𝑠𝑛𝐼 𝑟𝑒𝑃 𝑠𝑒𝑙𝑐𝑦𝐶 ∗ 𝑡𝑛𝑢𝑜𝐶 𝑛𝑜𝑖𝑡𝑐𝑢𝑟𝑡𝑠𝑛𝐼‬
‫= 𝑒𝑚𝑖𝑡 ‪CPU‬‬
‫𝑒𝑡𝑎𝑅 𝑘𝑐𝑜𝑙𝐶‬
‫‪:P1‬‬
‫‪7‬‬ ‫‪9‬‬
‫]‪CPUtimeP1= 4.6*10 [CC/P]/2.5*10 [Cc/sec] = 0.0184[sec/P‬‬
‫‪:P2‬‬
‫]‪CPUtimeP2= 2.4*107[CC/P] [Cc/P]/2*109[Cc/sec] = 0.012[sec/P‬‬

‫כמובן שכמו בסעיף הקודם ‪,‬גם כאן‪ ,‬אנו רואים ש ‪ P2‬יותר מהיר פי ‪.1.533‬‬
‫‪)Speedup) = 0.0184/0.012 = 1.533‬מדד ההאצה‬
‫ו‪.‬‬
‫]𝑃‪0.0184[𝑠𝑒𝑐/‬‬ ‫‪$‬‬
‫∗ ]𝑃[‪𝐶𝑜𝑠𝑡𝑃1 = 30,000‬‬ ‫‪2‬‬
‫[ ‪∗ 1000‬‬ ‫‪] = 153.3$‬‬
‫]𝑟𝑢𝑜‪60 [𝑠𝑒𝑐/ℎ‬‬ ‫𝑟𝑢𝑜‪ℎ‬‬
‫]𝑃[‪30,000‬‬
‫= ‪𝐶𝑜𝑠𝑡𝑃2‬‬ ‫‪= 3000$‬‬
‫𝑃‬
‫] [‪10‬‬
‫‪$‬‬

‫במצב זה למרות ש ‪ P2‬יותר מהיר פי ‪ 1.533‬בזמן עבור המשימה הנדרשת עלות ההשכרה של ‪ P1‬הינה‬
‫פי ‪ 19.6‬יותר זולה‪(3000$/153.3$) .‬‬

You might also like