לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > חומרה ורשתות
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 06-04-2005, 20:54
  erez20 erez20 אינו מחובר  
 
חבר מתאריך: 11.09.03
הודעות: 372
שלח הודעה דרך ICQ אל erez20 שלח הודעה דרך MSN אל erez20 שלח הודעה דרך Yahoo אל erez20
למבוגרים בלבד מה המהומה על כפולי הליבות !?!?

רבים חושבים שעם כפולי הליבות נגיע לעידן שבו המיחשוב המקבילי "יורד לעם" נוכל לשחק על מכונה עם עוצמה של שרת מרובה מעבדים - חלומו של כל ביצועיסט... אבל אז אתה מתעורר מהחלום ובדיוק באמצע הקורס בעיבוד מקבילי אתה מבין שמעבד מרובה ליבות זה לא עיבוד מקבילי... זה סה"כ יישום מעשי לקונספט של הייפרט'רדינג, פשוט במקום מעבד וורטואלי תהיה שם ליבה פיזית. "אבל... מה ההבדל ??" בהגדרה עיבוד מקבילי יכול לקרות רק כאשר יש מעבדים נפרדים עם זכרון (RAM) נפרד המסוגלים לתקשר אחד עם השני, או מעבדים עם זכרונות שיכולים לתקשר ... עדיין.. מה ההבדל ?
ההבדל הוא שבזמן שמעבד 0 (יש 2 מעבדים אז אחד הוא 0 והשני הוא 1) כותב/קורא לזכרון מעבד1 ממתין, התושבת לא מאפשרת גישה במקביל ובצדק... הם משתמשים בזכרון משותף ולא ניתן להפריד את הזכרון חלק אחד למעבד0 וחלק אחר הוא למעבד1.
אז מה קיבלנו ? שיפור קל במחיר גבוה, סיסמאות ומילים יפות במקום ביצועים...
בשונה דרך אגב מהשינוי ל64 ביט שבעבורו ניתן לקמפל בעזרת קומפיילר תומך גם תוכנות שתוכננו ל32 ביט וכך לנצל את הייתרונות שלו מבלי לשנות את הקוד, תכנות שיינצל את ייתרונות המעבד כפול הליבות יידרוש שינויים ותכנון מחדש של קוד ישן או כתיבה של קוד חדש במיוחד בשביל זה.
לסיכום: לדעתי אין מה להתלהב יותר מדיי מהמעבר לכפולי ליבות, אולי אם וכאשר יעברו למצב בו 2 המעבדים יוכלו לתקשר במקביל עם הזכרון אז זה ייקרא עיבוד מקבילי, עד אז לא התקדמנו יותר מדי...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 06-04-2005, 22:02
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,776
אני לא מסכים איתך...
בתגובה להודעה מספר 1 שנכתבה על ידי erez20 שמתחילה ב "מה המהומה על כפולי הליבות !?!?"

ה Dual-Core זה לא "חיקוי של ריבוי מעבדים" - זה ריבוי מעבדים לכל דבר ועניין (SMP). ולא צריך לכתוב "תוכנות מיוחדות" בשביל זה. מערכת ההפעלה (או כך לפחות אמור להיות), יודעת לקחת את הפרוססים השונים שממתינים לביצוע במעבד (Waiting Queue), וברגע שהמעבד מסיים לטפל בפרוסס מסויים (אם בגלל שהפרוסס לא דורש יותר CPU ואם בגלל שה Scheduler של הקרנל מפסיק אותו), הקרנל שולח את הפרוסס הבא לטיפול במעבד. ברגע שיש שני מעבדים, או מעבד Dual Core, שני המעבדים יכולים לעבד מידע בו זמנית ואז ה Scheduler מעביר 2 פרוססים ממצב Waiting למצב Running - נכון שהם לא יכולים לגשת לאותו תא בזיכרון בו זמנית (במצב קריאה גם? לא יודע, לא חקרתי עד כדי כך) - אבל למה שהם ינסו לעשות את זה? הם מעבדים תוכנות שונות. אז אם מעבד אחד שלך עסוק מאוד בקאזה שמוריד 20 קבצים של 700 מגה - והמעבד השני שלך עסוק בלקודד סרט וידאו, המחשב שלך ימשיך לרוץ חלק, לעומת מחשב עם מעבד בודד שיקרטע בצורה כזאת שאתה תעזוב את המחשב...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 06-04-2005, 22:20
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
שניכם צודקים(למרות שאתה "צודק יותר")
בתגובה להודעה מספר 2 שנכתבה על ידי שימי שמתחילה ב "אני לא מסכים איתך..."

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

לגבי השאלה הטכנית לגבי קריאה: לא ידוע לי על "תקן" בנושא, וזה תלוי אך ורק
ביצרן המערכת.

לגבי ה-64ביט: אין שום צורך בקימפול מחדש אם מדברים על השיפור בביצועים
שהציגה AMD ב-AMD64 שלה. אם אנחנו מדברים על שיפור שמושג ע"י הידור
מחדש - הוא לא יהיה קיים עבור תוכנות 32ביט. (מלבד המקרה המיוחד שבו
משתמשים במשתני 64 ביט שלא קיימים במערכת, ולכן יש אמולציה כבדה
שלהם וכו')
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 08-04-2005, 12:30
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
אז איך תפתור את בעיית הסנכרון במקרה הזה?
בתגובה להודעה מספר 7 שנכתבה על ידי תפוחים שמתחילה ב "אני שואל מה המקור להנחה שכל ליבה בפני עצמה"

במערכת עם מעבד אחד, אם יש לנו שני ת'רדים שניגשים לאותו זכרון, אפשר להגן עליו
באמצעות מנגנונים של מערכת ההפעלה(כמו סמפורים, לדוגמה), או, במידה ורוצים "לעשות
את זה לבד", משתמשים בפקודה XCHG(נדמה לי שזה השם).

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

הבעיה: יכול להיות מצב שבו ת'רד ב' מתחיל לעבוד, בודק שביט הגישה שווה ל-0, ומבין שמותר
לו לגשת לכתובת מסויימת. באותו רגע מתרחשת פסיקה והשליטה מועברת לת'רד ב', שגם
הוא בודק את ביט הגישה, וגם הוא רואה שהוא קבוע ל-0, ומבין שגם לו מותר לגשת למידע....
מה שקורה עכשיו זה ששניהם יקבעו את הביט ל-1, ושניהם יעבדו עם המידע, וידפקו אחד
תש'ני... לא טוב.

הפתרון הוא פקודת אסמבלי מיוחדת, שנקראת XCHG למיטב זכרוני, וכשמה כן היא: הפקודה
הזו מחליפה(exchanges) בין כתובת מסויימת לאוגר. כל היופי הוא שמדובר בפקודת אסמבלי
אחת, ולא בכמה פקודות כמו שהיה למעלה.

ת'רד ב' מכניס לאוגר מסויים את הערך 1, ואז מבצע XCHG עם ביט הגישה. כעת הוא בודק
את ערך האוגר: אם באוגר רשום 0, זה אומר שלפני ה-XCHG היה 0 בביט הגישה, ומותר
לגשת לאותה כתובת(ועכשיו כבר כתוב שם 1 בגלל ה-XCHG); אם רשום באוגר 1, זה אומר
שלפני ה-XCHG היה בביט הגישה 1 - ואסור לפעול עם הכתובת, אבל ביט הגישה לא השתנה,
היה 1 ונשאר 1. בעזרת XCHG הבדיקה האם בביט רשום 0, וכתיבת 1 לתוכו לא מתבצעות
בנפרד, ולא יכולה להתרחש פסיקה "באמצע הפקודה".

עד כאן הכל טוב - אבל מה יקרה כשיהיו לנו שני מעבדים ושני ת'רדים שיתבצעו בנפרד עליהם?
כאן הטריק של XCHG כבר לא פועל - כי שני המעבדים יכולים לבצע XCHG בו-זמנית.


איך פותרים את הבעיה הזו במערכת מרובת מעבדים?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 08-04-2005, 16:23
  תפוחים תפוחים אינו מחובר  
 
חבר מתאריך: 27.01.04
הודעות: 21,177
חוששיני שאתה מערבב בין פיתוח תוכנה מרובה משימות
בתגובה להודעה מספר 13 שנכתבה על ידי AlexKarpman שמתחילה ב "אה באמת? טוב לדעת..."

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

חשוב להבין את ההבדל בין היישום של אינטל ל AMD.

אצל אינטל המעבד מובר על ידי איפיק תקשורת לבקר הזכרון
בגשר הצפוני, כך שיש אכן בעיה כל שהי, לא יכול להיות
ניצול מקביל של אפיק התקשורת, הוא חייב להיות סדרתי
(אגב, אם הוא מהיר מספיק אז הבעיה לא חמורה) - אצל
AMD יש "CROSSBAR" (ואין אפיק תקשורת, בקר הזכרון
מוכלל במעבד), מנגנון שנועד לשרת את שתי הליבות באופן
יעיל, עד כמה יעיל אינני יודע, אבל מי שמעונין בלמידת הנושא
צריך להיתמקד במנגנון זה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 19:49

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר