160 likes | 434 Views
עיבוד מקבילי 361-1-3621. סודוקו מקבילי. אלון גוטרמן אופיר אלון. מה זה סודוקו?. פאזל לוגי בו על הפותר למלא לוח מספרים כך שהמספרים 1-9 צריכים להופיע פעם אחת בלבד עבור: כל שורה כל עמודה כל קובייה בגודל 3 x 3. Figure 1: 9x9 Sudoku Puzzle with solution. מורכבות הבעיה.
E N D
עיבוד מקבילי361-1-3621 סודוקו מקבילי אלון גוטרמן אופיר אלון
מה זה סודוקו? • פאזל לוגי בו על הפותר למלא לוח מספרים כך שהמספרים 1-9 צריכים להופיע פעם אחת בלבד עבור: • כל שורה • כל עמודה • כל קובייה בגודל 3x3 Figure 1: 9x9 Sudoku Puzzle with solution
מורכבות הבעיה • מספר לוחות הסודוקו האפשריים הוא: 6,670,903,752,021,072,936,960 • במידה ולוקח 1usec למציאת פתרון יחיד, ניתן לראות שידרשו 211,532,970,320שנים למציאת כל הפתרונות האפשריים.
אלגוריתם פתרון סריאלי אילוצי התפשטות וחיפוש (CPS – Constraint Propagation and Search ). • עבור כל תא, אם מספר כבר קיים בשורה, בטור או בקופסא (3x3) – נמחקת האפשרות שמספר זה יופי בתא. • עבור כל תא, אם עבור כל ה"שכנים" (מסומן בכחול) של אותו תא לא ניתן לשים מספר מסוים, אזי המספר המסוים חייב להופיע בתא זה. • במידה ולא נמצא דרך לבצע אילוץ לפי החוקים המתוארים למעלה, מנחשים מספר וחוזרים על התהליך.
למה לעבור למקבילי? • האלגוריתם הסיריאלי הינו רקורסיבי ומעמיס על המחשב מבחינת מקום בזיכרון וזמן ריצה. • ניתן לפצל את עיבוד הבעיה לתהליכונים (Threads) הרצים במקביל, וכך להקטין את העומס ולצמצם את זמן הריצה. • ניתן להשתמש בתקשורת בין התהליכונים לצורך סנכרון והעברת מידע לעיבוד ביניהם.
אלגוריתם פתרון מקבילי – Message Passing • כל תהליכון מקבל פאזל שונה לפי עקרון החיפוש (ניחוש). • כל תהליכון מבצע את האלגוריתם הסריאלי בנפרד מהתהליכונים האחרים. • ברגע שתהליכון מוצא פתרון, הוא מודיע לשאר התהליכונים להפסיק לחפש. • במידה ותהליכון סיים את החיפוש ולא נמצא פתרון מבוקש – הוא עוזר לתהליכון שעדיין בריצה, עד שימצא פתרון
Message Passing - המשך • התהליכונים מבקשים אחד מהשני בקשה לעיבוד מידע בצורה מעגלית (0->1->2->…->n) כאשר הם מסיימים את העיבוד שלהם. • כאשר תהליכון מזהה שתהליכון אחר מבקש עבודה הוא יעביר לו חצי מהעבודה שנותרה לו נכון לאותו הרגע. • העברת המידע מבוצעת בסיבוכיות של O(n).
אלגוריתם מקבילי עם זיכרון משותף – Using Locks • זיכרון משותף המכיל את כל הפאזלים • סנכרון הגישה לכל תהליך לעץ הראשי מבוצע על ידי פעולת נעילה רגעית של המידע בזיכרון • כל תהליך יכול לבצע את הפעולות: • לקחת ענף מהעץ לעיבוד עצמאי • להוסיף ענף לעץ המכיל פאזלים נוספים • במידה ותהליך גילה שהפתרון לא מצוי אצלו הוא יכול לזרוק את הפאזל שעליו עבד ולקחת פאזל חדש מהזיכרון המשותף.
יתרונות שיטת Using Locks • אין צורך בתקשורת בין התהליכונים • תהליכון לא צריך לבקש מתהליכונים אחרים מידע לעיבוד • תהליכונים עובדים ללא הפרעות בקשה מתהליכונים אחרים קיימות שתי וריאציות לאלגוריתם Using Locks • Fine-grain locking – מבצעים נעילה על המידע בעץ עבור תהליכון מסוים לפני ביצוע פעולה כמו הכנסת או הוצאת פאזל, ומיד לאחר מכן משחררים. • Coarse grain locking – מבצעים נעילה רגעית של כל התהליכונים למעט תהליכון בודד, מאפשרים לו לקחת פאזל מהעץ ורק כאשר הוא מסיים מוחזר המידע לזיכרון המשותף והשאר יוצאים מנעילה.
שיטת ביצוע הערכה ומדידות • מדידת הביצועים של האלגוריתמים השונים נעשה על מחשב בעל: Intel Core 2 Quad q9450 @ 2.66 GHz, 4 GB RAM , Linux Kernel • התוצאות מתייחסות לביצוע של 100 מדידות שונות של לוחות סודוקו מרושעים בגודל 16x16. • דיוק של מיקרו שניות במדידות.
תוצאות • זמן ריצה של האלגוריתם הסריאלי (CPS) הינו 17.5 שניות בממוצע • Message Passing • 2 תהליכונים: זמן ריצה ממוצע של 8.9 שניות וגורם האצה של 1.97. • 4 תהליכונים: זמן ריצה ממוצע של 4.8 שניות וגורם האצה של 3.64. • 5+ תהליכונים: זמן ריצה גדל ליניארית וגורם האצה קטן ליניארית. • Fine-grain locking • 2 תהליכונים: זמן ריצה ממוצע של 6.7 שניות וגורם האצה של 2.61. • 4 תהליכונים: זמן ריצה ממוצע של 3.8 שניות וגורם האצה של 4.6. • 5+ תהליכונים: אין שיפור ואין הרעה בזמן הריצה ובגורם ההאצה. • Coarse grain locking • ללא קשר למספר המעבדים – זמן הריצה ארוך יותר מהזמן הריצה של האלגוריתם הסריאלי.
ניתוח תוצאות ומסקנות • קבלת Speed-up ליניארי עד שימוש ב4 תהליכונים. • fine-grain locking – היעיל ביותר כי כל התהליכונים תמיד עסוקים בביצוע פעולות ואין העברת מידע בין המעבדים. • "צוואר הבקבוק": • Message Passing • אופן בקשת והעברת המידע בין התהליכונים (0->1->2..->n) גורם להאטה בזמן הביצוע. • fine-grain locking • מעל 4 תהליכונים לא חל שיפור בביצוע בגלל "צוואר בקבוק" שנגרם כתוצאה משימוש ב-Locking של הזיכרון. • יעילות • מקבול האלגוריתם הסריאלי משפר ברוב המקרים משמעותית את זמני הריצה. • שימוש ביותר מ4 תהליכונים פוגע ביעילות.
מקורות • http://individual.utoronto.ca/rafatrashid/Projects/2012/SudokuReport.pdf • http://alitarhini.wordpress.com/2011/04/06/parallel-depth-first-sudoku-solver-algorithm/ • http://www.andrew.cmu.edu/user/hmhuang/project_template/finalreport.html