math.haifa.ac.ilmath.haifa.ac.il/ronn/CompArch/lectures/lecture07/7.OutOfOrder.docx · Web viewDual pipelining –אלו מעבדים שיש בהם מספר pipelines העובדים
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Parallel processing
CPU Timeהמטרה היא להקטין את ה-
CPU Time=clock cycle*CPI*IC
CPU Time.כמה זמן לקח למעבד כלשהו לבצע תוכנית – CPI (cycles per instruction)שעון המעבד צריך כדי לבצע- מדד שאומר כמה מחזורי
פקודה כלשהי.IC-Instruction Count.מספר הפקודות בתוכנית –
עד כה למדנו:
Minimize clock cycle Þmore GHZ (add more pipe stages)
Minimize CPI Þ µArch (more execution unit)
)AVXTM( Minimize IC Þ architecture
ILP - Instruction level parallel processingמקבילות ברמת המעבד, הוא מטפל במספר – פקודות
-בpipelineסרט נע, פקודה בכל תחנה, צריך להרחיב לכל האורך – כל התחנות inצריכות להיות באותו רוחב אחרת יהיה לנו צוואר בקבוק בתחנה הצרה ביותר.
order execution, CPI>=1(Cycle Per Instruction) הוספת pipe stage מפחית clock cycle .CPIאבל מעלה
Dual pipeliningאלו מעבדים שיש– העובדיםpipelinesבהם מספר
במקביל, ניתן ליצור צינור בו כל שלב יכול לטפל בשתי פקודות עוקבות
בתוכנית – זה יפה אך מה עם רוצים צינור רחב יותר? הבעיה בשיטה – אם יש תלות בין שתי הפקודות, הן
לא יכולות להישלח בו זמנית.
אבל עם פוטנציאלI-מומש בפנטיום מוגבל.
Very Large Instruction Word- VLIW עוד לפני שהתוכנית מוזנת למעבד, המהדר מנתח את הקוד ומבצע את אותם סוגים של החלטות אשר
על השבב עצמו. ברגע שהוא החליט איזה נתיבים לבחור, הוא אוסף את כל היו מתבצעות בזמן ריצה בצורה כזו בתוכנית העברתאוגד אותם להוראה גדולה יותרהפקודות שהוא יודע שניתן להריץ במקביל,
משימה זו מהמעבד למהדר היא בעלת מספר יתרונות. ראשית, המהדר יכול להשקיע יותר זמן בניתוח הקוד, יתרון שלמעבד אין כיוון שהוא חייב לסיים את המשימה כמה שיותר מהר. לכן גרסת המהדר
יכולה להיות מדויקת באופן מהותי יותר מאשר אותו קוד אשר רץ דרך האלגוריתמים של המעבד. שנית, הניבוי של תוכנית המעגל החשמלי של המעבד היא מסובכת למדי, והעברת הניבוי למהדר מורידה את הסיבוכיות מהמעבד בצורה רבה. המעבד לא צריך יותר לנתח שום דבר; הוא פשוט מפרק את ההוראה
לחלקים ומזין את חלקיה לליבות השונות. שלישית, ביצוע הניבוי על ידי המהדר היא "הוצאה" חדפעמים, לעומת הניבוי במעבד שמתרחש כל פעם שהתוכנית רצה.
החסרון בכך הוא שהתנהגות תוכנית שרצה לא תמיד מובנת מאליו ולא נובעת ישירות מהקוד שאיתו נוצרה, ויכולה להשתנות מאוד כתלות במידע שמעובד. מעבד ממוצע יכול מעשית לבצע החלטות עיבוד
לפי המידע אשר מועבר, לעומת המהדר שיכול רק לנחש זאת. מכך, זה אפשרי מאוד שהמהדר יטעה VLIWבניבוי שלו אפילו באופן יותר תדיר מאשר לוגיקה מקבילה הנמצאת על המעבד. לכן, תכנון ה-
מסתמך רבות על הביצועים של המהדרים, פשרה המאפשרת להפחית את מורכבות החומרה של – הוא מעבד מסוג זה itaniumהאיטניום המעבד על חשבון הגדלת המורכבות של תוכנת המהדר.
נכל כישלון.
Superscalar
השיפור - צריך לנהל את הפקודות שאפשר לשלוח יחד- החיפוש אחר פקודות לביצוע על ידי ניתוח התלויות בין הפקודות ושליחה במקביל פקודות שאינן תלויות בפקודות
שקודמות להן.
scheduling השפעת שינוי הסדר בקוד- א.
for(i=1000;i>0;i--)X[i]=x[i]+50
MIPS איברים של מספרים שלמים, כתוב לולאה בשפת אסמבלי של ה-1000נתון מערך בעל כפי שמסורטט בעמודMips לכל איברי המערך. מבנה ה50המבצעת הוספה של הערך
הקודם (למטה), תאר מבחינת מחזורי מכונה, את תהליך ביצוע הפקודות בתוך המערכת (לאכולל הבאה ופיענוח).
-שלבי הFetch -וה Decode -ממלאים את ה Instruction Pool, בצורת in-orderזהו אותו ),execution"חלון פקודות" בו מחפשים פקודות בלתי תלויות שאפשר לשלוח לביצוע (
כלומר שלא על פי סדר הופעתן בתכנית.Out Of Orderהפקודות נישלחות הפקודות שבוצעו חוזרות חזרה ומסיימיםin order Retirementכלומר פקודות למעשה
משנות את מצב המכונה, עפ"י סדר הופעתן בתוכנית, -כתוצאה מOOOE תלויות מדומות נוצרות ,WAR(Write After Read), RAW (read after
write) -ו WAW (Write After Write):
Data Hazard
RAWתלות מידע מסוג -
WARתלות מידע מסוג
הוראת החילוק הארוכה מעכבת את פעולת החיבור שאחריה, פעולת החיבור ממתינה לערךR1 מכיוון שמאפשרים ,OOOההוראה השלישית, שלא תלויה תתבצע, ואז ההוראה השנייה
כפי שנכתב על ידי ההוראה השלישית ולא כפיR6לכשתתבצע עלולה לקרוא את הערך של שהתכוון המתכנת.
WAWתלות מידע מסוג DIV R5,R2,R3
ADD R5,R6,R1ADD R9,R5,R5ADD R5,R7,R8 ההוראה השנייה והשלישית מעוכבות, ואילו הרביעית עלולה להתבצע, הוא ההוראה הרביעית
יישאר עם הערך הלא נכון מבין השניים.R5 לפני ההוראה השנייה, בסוף ערך R5תשנה את
(1 )r1¬R9/17
(2 )r2¬r2+r1
(3 )r1¬23
(4 )r3¬r3+r1
(5 )jc L3
תתבצע לפני3אם פקודה מס' 1פקודה מס'
R1יקבל ערך סופי שגוי WAWבעיה מסוג
(6 )r1¬35
(7 )L3: r4¬r3+r1
(8 )r3¬2
Control Hazard.הוראה התלויה בהוראות סיעוף – אין לקדמה למקום לפני הוראת סיעוף.הוראה שאינה תלויה בהוראות סיעוף – אין להעבירה למקום לאחר הוראת הסיעוף
כאשר נשלח לביצוע פקודות שנמצאות אחרי קפיצה – כלומר יתכן שבפועל עד שהיינו מגיעים התכנית תקפוץ והן כלל לא יבוצעו. in orderאליהן בביצוע
Registerגם את פתרון התלויות המדומות וגם את בעיית הביצוע הספקולטיבי פתרו בעזרת Renamingשבעצם אומר שבמקום שפקודה תכתוב לרגיסטר הארכיטקטוני של המכונה היא
תכתוב לרגיסטר זמני, פיסיקלי.
נעשה לפי סדר הופעת הפקודות בתכנית: renamingביצוע דוגמא:
False Dependencies ( WAW,WAR) גורמת שלא יהיו תלויות מסוג renamingפעולת ה-
עדיין קיים RAW מסוג data hazardאבל
מקצים את הפקודות בשני מבנים.Renaming ואז Fetch, Decodeאחרי שלבי ה-
) ROB (Re-order Buffer -ו RS (Reservation Stations) הקצאת פקודות אליהן נעשית .in order -ומתרחשת במקביל. ההוצאה מ ROB היא in order -אך ההוצאה מה RS היא out of order.
תתבצע לפני8אם פקודה WAR בעיה מסוג 7פקודה
R1#0R2#1R2#2R4#3
#4#5
WAW
WAR
RAW
Fetch &
Decod
renam
Commit
In order
In order
RS
ROB
הפקודות נכנסות ליחידתRS-ו ROB בצורת in orderכאשר המערכת מזהה פקודה , שהאופרנדים שלה מוכנים, ויחידת הביצוע שלה מוכנה, הפקודה מועברת אל יחידת
הביצוע, לא לפי סדר הופעת הפקודה בתכנית.בגלל העובדה שמוציאים את הפקודות לא לפי הסדר, סדר הפקודות משתנה (לא כפי שמופיע
בתוכנית). -יחידת הROB משמשת לסידור חזרה, הפקודות נרשמו בצורת in –orderוהן חוזרות אחרי ,
. in order יבוא commit, ה- out of orderביצוע בצורה -לכל פקודה בROB -נוצר אוגר פיזי, מספרו הוא כמספר הכניסה ב ROBבו הפקודה מוקצת . .אל האוגר הפיזי תירשם התשובה המוחזרת מיחידת הביצועRS -יכול לשלוח פקודה לביצוע ואחר כך להעביר את הערך שהיא חישבה לפקודה אחרת ב RS
ברגע שהוא יהיה מוכן. -בשלב הretire/commitנעשית כתיבה בפועל מהרגיסטרים הפיזיים אל ה-זכרון או
לרגיסטרים הארכיטקטונים.
Reservation station-RS - לכל אופרדפקודות שעדיין לא בוצעוביחידה זו קיים תור של , ') וכן יחידת הביצוע אותה צריך.1סיבית המסמנת האם ערך האופרד זמין ('
בכל מחזור שעון נבדקות הפקודות ומועברות על פי זמינותם וזמינות יחידות הביצוע הפנויות.
, נוצר "בלגן"- מי ששומר עלout of order אבל מוציאים RS in orderמכיוון שממלאים את . in order ויוצאות out-of-order אליו פקודות נכנסות FIFO שהוא ROBהסדר, זה ה-
אז אפשר להתחייב על שינוי מצב המכונהretire (commite) ל- ROBכאשר פקודה יוצאת מה- בעקבותיה ולכן שם נעשית כתיבה בפועל לזכרון או העתקת רגיסטרים פיזיים לארכיטקטונים.
- ROB- Re-order Bufferכותבים ליחידה זוin-orderומסמנים בו מתי באיור כל הפקודות שהסתיימו לפקודה, commitאפשר לעשות
, ורק ברגע שנוצר רצף של פקודות או מספיקמסומנות באדום אפשר לעשותROB ה- מתחילתפקודה אחת ראשונה, שסיימו
commit.
לכמה פקודות במקביל, תלוי ברוחב היחידה,commitניתן לבצע פקודות במקביל.8 ,4 ל- commitישנן מערכות יכולות לבצע
Out Of order
Execute
vsrc1vsrc2Pdst
add197H112H37
מסמנים את הפקודה עםexecution, בשלב ה- 0חריגה, לדוגמא: חלוקה ב- במקרה של אבל עדיין לא מטפלים בשגיאה. faultהסימון
לאחר בדיקה שהפקודה אכן צריכה להתבצע. (יתכן שביצענו את הפקודהcommitבשלב ה- ), רקflushבעקבות חיזוי קפיצה שגוי ולא היינו אמורים להגיע אליה כלל, במקרה כזה יתבצע
תתקבל הפסיקה, כאשר היא תגיע לראשcommitבמקרה של אימות והגעת הפקודה ל- התור.
-in. ומביאים בבת אחת מספר פקודות – זה קורה cache instזהו השלב הראשון, פונים ל- order -הפקודות נשמרות ב .instruction queue) כולל את חיזוי פקודת הקפיצה .branch
predictor.( יחידה זוCISC הפקודות באורך זהה, והן מועברות לפיענוח. במערכות מסוג RISCבמערכות
כוללת את שלב ההחלטה איפה פקודה מתחילה ואיפה היא מסתיימת (ישנן פקודות בגודלbyte 16 ועד bytes -ב .instruction queue .הפקודות יוכנסו לכל כניסה פקודה בנפרד
Decode – 2שלב
– הוא שלב בו מתורגמות הפקודות2 אל שלב instruction queueפקודות מועברות מה- לאותות חשמליים, בעזרתם הפקודות ינותבו ליחידות המתאימות לביצוע הפקודה. לדוגמא
פקודה מסוג חילוק של מספרים ממשיים ינותבו ליחידה המתאימה, חיבור של מספריםשלמים וען הלאה.
בסיסיים, ומרגע זה ואילךµopcodes פקודות מורכבות יחולקו למספר CISCבמערכות מסוג במובן זה שהיא מבצעת רק פקודות פשוטות יחסית.RISCהמכונה מתנהגת כמכונת
המפוענחות.µops – הוא מכיל את הIDQאחרי שלב הפענוח יש תור נוסף שנקרא
FetchIQ
DecodeIDQ
AllocRS
ExecutionROB
Commit
FetchIQ
DecodeIDQ
AllocRS
ExecutionROB
Commit
renaming = שלב ה- Alloc – 3שלב
) על פי הקצאת מיקום הפקודה)Renameing: הקצאת שמות לאוגרים פיזיים Allocateשלב ה-
.in-order, כל התהליך עד כה מבוצעROBב-
Execution – 4שלב
בשלב זה עוברים לביצוע הפקודות שלא על פי סדר כתיבתם בתוכנית, אלא פקודות נבחרות
ומועברות לביצוע בכל מחזור מכונה על פי מוכנות האופרנדים וזמינות יחידת הביצוע המתאימה לפקודה. ישנן מערכות שיבדקו כמה פקודות אחרות תלויות בפקודה זו ויעבירו את
הפקודה, שיש בה יותר פקודות תלויות.
Commit – 5שלב
השלב האחרון בצינור, "מוציאים" את הפקודות בראש התור אלו הפקודות הישנות ביותר מה-
ROB ,exception/fault) וכן לא מסומנות ב- executed" bit=1וזאת בתנאי שהן בוצעו (מסומנות "
.fault וטיפול ב- pipline ב- flush מתבצע faultבמקרה שיש
מעתיקים את המידע מהרגיסטר הפיסי לרגיסטר הארכיטקטוני או לזיכרון ובכך הביצוע נעשה באותוcommit פקודות שניתן לבצע עליהן 8, 6, 4רשמי וסופי. ישנן מערכות בעלות כמות של
מחזור מכונה.
(ללא חיזוי) בעלת: Super-Scalar OOOE נתונה מערכת : 1 שאלה שניPipes . עבור גישה לזיכרון שניPipes עבור FP ADDD/SUBD. שתי יחידות עבורInt/Branch. Pipe אחד עבור MULTD FP. פקודות 4ניתן לבצע עד memory -ו WBבמקביל
הבאה:RAW Hazardכמו כן נתונה טבלת ההשהיות במקרה של Stall Cyclesהפקודה
MULTD FP5ADD/SUB FP3
- המבצעת:MIPS כתבו תוכנית בא.
FetchIQ
DecodeIDQ
AllocRS
ROB
ExecutionROB
Commit
FetchIQ
DecodeIDQ
AllocRS
ROB
ExecutionROB
Commit
FetchIQ
DecodeIDQ
AllocRS
ROB
ExecutionROB
Commit
בזיכרון.1000 תאים המתחיל מכתובת 20 בן FP הוא מערך של A כאשר מערך
והם גדולים ואינםRS וב-ROBהניחו שהפקודות נמצאות ב- , Super-Scalarהזינו את הקוד ל ב. .Cycles Per Iteration ו CPI חשבו מתמלאים.
עותקים ביחס למה שעשית ב א'!), הזינו את הקוד 2 עותקים (2 של Loop Unrollingבצעו ג. .Cycles Per Iteration ו CPI הנתון, וחשבו Super-Scalar ל
.tc=1ns ואחריה אם ידוע ש Unrollingחשבו זמן ריצה כולל של התוכנית לפני גרסת ה ד. (כלומר עבור הקוד של א' ועבור הקוד של ג' .)
(נמקו) האם יכול להיות שהאיטרציה הראשונה תארך זמן שונה מהאיטרציות שאחריה?ה. תנו דוגמא למקרה שבו האיטרציה הראשונה ארוכה מהאיטרציות שאחריה.תנו דוגמא למקרה שבו האיטרציה הראשונה קצרה מהאיטרציות שאחריה.