לכל הוראת מעבד יש מספר שלבים לפעולתה. כל אחד מהשלבים הללו לוקח מחזור מעבד בודד כדי להשלים. שלבים אלה הם אחזור הוראות, פענוח הוראות, ביצוע, גישה לזיכרון וכתיבה חוזרת. בהתאמה אלו מקבלים את ההוראה שצריך להשלים, מפרידים את הפעולה מהערכים המופעלים על, בצע את התהליך, פתח את האוגר שעליו תיכתב התוצאה, וכתוב את התוצאה לפתוח הירשם.
מעבדי הזמנה היסטוריים
במחשבים מוקדמים, ה-CPU לא השתמש בצינור הוראות. במעבדים אלה, כל פעולה במחזור בודד צריכה להתרחש עבור כל הוראה. המשמעות היא שנדרשו חמישה מחזורי שעון עד שההוראה הממוצעת תעובד במלואה לפני שניתן היה להתחיל את ההוראה הבאה. ייתכן שפעולות מסוימות לא יצטרכו לכתוב תוצאה כלשהי לרישום, כלומר ניתן לדלג על שלבי הגישה לזיכרון ושלבי הכתיבה חזרה.
עם זאת, יש בעיה שאורבת כאשר מפעילים הוראה שלמה לפי הסדר לפני שניתן לעבור להוראה הבאה. הבעיה היא החמצת המטמון. ה-CPU מאחסן נתונים שהוא מעבד באופן פעיל במאגר. ניתן לגשת לזה עם חביון של מחזור אחד. הבעיה היא שהאוגר זעיר מכיוון שהוא מובנה בליבת המעבד. המעבד חייב לעבור למטמון L1 הגדול אך האיטי יותר אם הנתונים עדיין לא נטענו. אם הוא לא שם, הוא חייב לעבור שוב למטמון L2 הגדול והאיטי יותר. השלב הבא הוא מטמון L3; האפשרות האחרונה היא זיכרון RAM של המערכת. כל אחת מהאפשרויות הללו דורשת יותר ויותר מחזורי מעבד כדי לבדוק.
כעת, זמן השהיה הנוסף הזה יכול להוות בעיה גדולה במערכת שחייבת להשלים כל הוראה לפי הסדר במלואו לפני תחילת ההוראה הבאה. מה שהיה מעבד של 5 מחזורים לכל הוראות, יכול פתאום להיתקע בהוראה אחת במשך עשרות או מאות מחזורי שעון. כל הזמן שום דבר אחר לא יכול לקרות במחשב. מבחינה טכנית, ניתן להקל במידת מה על ידי קיומו של שתי ליבות עצמאיות. עם זאת, שום דבר לא מונע את שניהם לעשות את אותו הדבר, אולי בו-זמנית. אז ירידה במסלול מרובה ליבות לא פותר את זה.
צינור RISC הקלאסי
RISC ראשי תיבות של Reduced Instruction Set Computer. זהו סגנון עיצוב מעבד שמייעל את הביצועים על ידי הפיכת פענוח כל הוראה לקל יותר. זאת בהשוואה ל-CISC או Complex Instruction Set Computer, אשר מתכננת ערכות הוראות מורכבות יותר המאפשרות צורך בפחות הוראות לביצוע אותן משימות.
עיצוב RISC הקלאסי כולל צינור הוראות. במקום להפעיל כל אחד מחמשת שלבי ההוראה בכל מחזור נתון, הצינור מאפשר לבצע את כל חמשת השלבים. כמובן, אתה לא יכול להפעיל את כל חמשת השלבים של הוראה אחת במחזור. אבל אתה יכול לעמוד בתור חמש הוראות רצופות עם היסט של שלב אחד כל אחת. בדרך זו, ניתן להשלים הוראה חדשה בכל מחזור שעון. מציע תוספת ביצועים פוטנציאלית פי 5 לעלייה נמוכה יחסית במורכבות הליבה.
מעבדים שאין להם צינור יכולים להיות רק תת סקלרים, מכיוון שהם לא יכולים לבצע הוראה אחת שלמה בכל מחזור. עם צינור חמישה שלבים ראשוני זה, אתה יכול ליצור מעבד סקלארי שיכול להשלים הוראה עבור כל תהליך. על ידי יצירת צינורות מרחיקי לכת עוד יותר, אתה יכול ליצור מעבדים על-סקלאריים שיכולים לבצע יותר מהוראה אחת בכל מחזור שעון. כמובן, עדיין יש בעיות פוטנציאליות.
עדיין ברצף
כל זה לא פותר את הבעיה של המתנה של מחזורים רבים לתגובה כאשר צריך לשאול את הרמות השונות של מטמון ו-RAM. זה גם מציג בעיה חדשה. מה אם הוראה אחת מסתמכת על הפלט של ההוראה הקודמת? בעיות אלו נפתרות באופן עצמאי עם שדר מתקדם. הוא מתכנן בקפידה את סדר הביצוע כך ששום הוראות המסתמכות על פלט של אחר לא יהיו קרובות מדי זו לזו. הוא גם מטפל בהחמצות מטמון על ידי חניית הוראה והחלפתה בצנרת באחרת הוראות שמוכנות להפעלה ואינן דורשות את התוצאה שלהן, חידוש ההוראה כשהיא מגיעה מוּכָן.
פתרונות אלה יכולים לעבוד על מעבדים ללא צינורות, אך הם נדרשים עבור מעבד על-סקלארי המריץ יותר מהוראה אחת לכל שעון. מנבא ענפים הוא גם שימושי מאוד מכיוון שהוא יכול לנסות לחזות את התוצאה של הוראה עם יותר מתוצאה פוטנציאלית אחת ולהמשיך בהנחה שהיא נכונה אלא אם הוכח אחרת.
סיכום
צינור מאפשר שימוש בכל היכולות הייחודיות של המעבד בכל מחזור. זה עושה זאת על ידי הפעלת שלבים שונים של הוראות שונות בו זמנית. זה אפילו לא מוסיף מורכבות רבה לעיצוב המעבד. זה גם סולל את הדרך לאפשר ליותר מהוראה אחת לבצע שלב בודד בכל מחזור.