צינור עיבוד נתונים

במחשבים, צינור עיבוד נתונים (באנגלית: Pipeline) הוא אוסף של תהליכי עיבוד נתונים המקושרים זה לזה בסדרה, כך שהפלט של תהליך אחד הוא הקלט של התהליך העוקב בסדרה. לעיתים קרובות התהליכים בצינור עיבוד נתונים מופעלים במקביל ובכך מאפשרים את הגדלת הספק המערכת. צינורי עיבוד נתונים שקשורים למחשבים כוללים: צינורי עיבוד נתונים של סט פקודות מכונה, נמצא במעבד. לדוגמה, בצינור עיבוד הנתונים של ארכיטקטורת RISC, מופעלים מספר תהליכים באופן חופף. תהליך העיבוד מחולק למספר שלבים: שלב הפיענוח, שלב של הביצוע של יחידה אריתמטית־לוגית, שלב הבאת מידע (fetching). שלבים אלו מופעלים ברצף זה אחרי זה. כאשר שלב אחד מסתיים, הפקודה שהייתה בטיפולו עוברת לטיפול השלב הבא, והשלב הקודם מיד מתחיל בטיפול הפקודה הבאה. כך מתאפשר טיפול במספר פקודות במקביל. צינור עיבוד נתונים גרפי. בעל אופי דומה לצינור עיבוד של מעבד. נמצא ברוב הכרטיסים הגרפיים. צינור עיבוד נתונים זה משלב תהליכים שמפעילים מספר יחידות אריתמטיות לוגיות ואף מספר מעבדים. השלבים בצינור עיבוד זה הם שלבים ייחודיים לתצוגה גרפית כמו חישובי צבע ואור. צינור עיבוד נתונים בתוכנה. בצינור עיבוד נתונים בתוכנה מספר תהליכים מסודרים ברצף כך שפלט של תהליך אחד יפעיל מיד תהליך שני באופן אוטומטי. דוגמה קלאסית היא קו צינור של Unix. מטרת השימוש בצינור עיבוד נתונים בחומרה ובתוכנה היא הגברת הספק של תהליכים, על ידי שמירת כל התהליכים בפעולה כל הזמן. המקור לרעיון נמצא בחיי היומיום. ניקח לדוגמה פס הרכבה במפעל מכוניות. נניח שהתחנות לאורך פס ההרכבה הם: התקנת מנוע, הרכבת מכסה מנוע והתקנת גלגלים. כמו כן נניח שסדר התהליכים הזה מחייב, ושרכב עובר בפס ההרכבה מתחנה לתחנה, ויכול לבצע רק שלב אחד מהשלושה בכל רגע נתון. רכב שיותקן בו מנוע יעבור להרכבת מכסה המנוע, וישאיר את תחנת התקנת המנוע לרכב שאחריו. לאחר מכן, הרכב הראשון ימשיך לשלב השלישי להתקנת גלגלים, בעוד שהרכב השני עובר לשלב מכסה המנוע. כעת נכנס רכב שלישי לפס ההרכבה לצורך התקנת מנוע. נניח שהזמן שלוקח כל שלב אינו אחיד: התקנת מנוע לוקחת 20 דקות, מכסה מנוע 5 דקות וגלגלים 10 דקות. לכן, רכב שנכנס לפס ההרכבה יצא ממנו לאחר 35 דקות בדיוק. אם היינו מרכיבים את שלושת הרכבים כאשר כל רכב נמצא על פס ההרכבה לבד, סך הפעילות הייתה 105 דקות – 35 דקות לכל רכב. אך אם נשתמש בקו הרכבה כפי שתיארנו, בו בכל שלב יש רכב אחד בכל רגע – נצטרך רק 75 דקות – 35 דקות לרכב הראשון ו־20 דקות נוספות לכל רכב נוסף. צינור עיבוד נתונים לא מוריד את כמות הזמן לביצוע אובייקט יחיד, אך הוא מגדיל את ההספק של המערכת. כלומר לכל רכב ייקח 35 דקות, אך על ידי עבודה במספר תחנות במקביל ניתן להגביר את הספק המערכת ולהרכיב יותר כלי רכב בכל פרק זמן. בצורה זו ניתן להגביר את היעילות של חומרת מחשב ותוכנות מחשב. עם זאת, מערכות המשתמשות בצינור עיבוד נתונים לרוב צורכות יותר משאבים כמו זיכרון ויחידות עיבוד, זאת כיוון שהתהליכים השונים לא יכולים להשתמש במשאבים של התהליך שקדם להם, שכן גם תהליך זה נמצא בפעילות. שיקול חשוב אחד בתכנון צינור עיבוד נתונים הוא איזון בין השלבים. בדוגמה לעיל, נוכל להגדיל את התפוקה אם שלב המנוע והגלגלים ייקחו כל אחד 15 דקות במקום 20 דקות לשלב המנוע ו־10 דקות לגלגלים. חלוקת השלבים בצורה כזו תאפשר לפס ההרכבה להוציא רכב חדש כל 15 דקות במקום כל 20 דקות ובכך להגביר את ההספק ב־25%, זאת אף על פי שהזמן לרכב בודד, מרגע שנכנס לפס ההרכבה ועד שיצא, נשאר 35 דקות. לעיתים קרובות, חלוקת המשימות בין תהליכים שונים בתוכנה ואף בחומרה היא גמישה, ולכן תכנון נכון יכול להוביל לייעול נוסף. שיקול נוסף הוא הכנסת חוצצים בין השלבים וקביעת גודלם. שיקול זה חשוב במיוחד כאשר פרק הזמן שלוקח כל שלב לא קבוע, וייתכן שמידע ייווצר או ימחק במהלך השלבים. התמלאות הצינור – צינור עיבוד נתונים נכנס להספק מלא מרגע שהאובייקט הראשון מגיע לשלב האחרון בצינור. בנקודה זו, בשלב הלפני אחרון נמצא אובייקט נוסף, וכן בשלב שלפניו. כך למשל, בדוגמת מפעל הרכבים, הרכב הראשון מסיים את ההרכבה לאחר 35 דקות, אך מרגע זה כל 20 דקות יוצא רכב חדש. במצב זה המפעל בתפוקה מלאה. התרוקנות הצינור – מרגע סיום הכנסת הנתונים לצינור, פרק הזמן שייקח לו להתרוקן לחלוטין זהה לזמן השהות של אובייקט בודד בצינור העיבוד, שכן האובייקט האחרון שהוכנס צריך גם הוא לבצע את כל השלבים. בועות – שגיאות במהלך העיבוד עלולות לגרום ל"בועות" בצינור העיבוד – מצב בו תהליכים מסוימים לאורך צינור העיבוד לא מבצעים פעולות, ובכך להביא לפגיעה בהספק. הדבר שקול לרכב שבזמן הרכבת המנוע התגלה כי שלדתו פגומה ולכן נזרק ולא יעבור לתחנות ההרכבה הבאות. בשלב הבא יגיע לתחנת הרכבת המנוע רכב חדש, אך כעת בסדנת הרכבת מכסה המנוע לא עובדים, כיוון שלא קיבלו רכב מתחנת הרכבת המנוע. בשלב הבא סדנה זו תקבל את הרכב הבא, אך הבועה נודדת הלאה והפעם בתחנת הרכבת הגלגלים לא יעבדו. בשלב שלאחר מכן ה"בועה" שנוצרה בצינור תשתחרר והצינור שוב מלא – אך לא יצא רכב חדש מפס ההרכבה. התפוקה היומית פחתה. בועות מסוג זה הן בעיה נפוצה מאוד בצינורות עיבוד מידע בתוכנה ובחומרה, ואם הן לא מטופלות כראוי, עלולות לפגוע רבות ביעילות. ריקון פתאומי של הצינור (flush) – על צינור עיבוד נתונים במעבדים לבצע פקודות שמופיעות ברצף בקוד המכונה. אם במהלך אחד השלבים מתברר כי יש לבצע קפיצה בקוד (Branch) לקטע קוד אחר, הרי שכל הפקודות שמבוצעות לאחר פקודה זו בקוד המכונה כלל לא היו צריכות להיכנס לצינור העיבוד. במצב זה יש לבטל את ביצוע הפקודות שנמצאות בצינור על ידי ריקון מיידי של צינור עיבוד הנתונים (בהנחה שהקפיצה בקוד זוהתה עוד בטרם הפקודות הבאות בוצעו ותוצאתם נשמרה), וממלאים אותו בפקודות הנכונות. ריקון זה גורם לבועות רבות בצינור עיבוד הנתונים ולפגיעה ביעילות המעבד. כדי להתגבר על בעיה זו, מעבדים מתוכננים לזהות בשלב מוקדם ככל האפשר בצינור העיבוד את הקפיצות בקוד (להקטנת הבועות שנוצרות) וכן לנסות ולחזות מראש קפיצות בקוד על ידי שימוש בהיוריסטיקות שונות. עיבוד מקבילי