שימוש בחבילת ה XMT סביבת XMT נועדה על מנת לאפשר מימוש של תוכניות לפי גישת ה-.XMT ניתן לכתוב תוכניות בשפת C המוכרת לנו, אך בתוספת מספר אופרטורים שבאמצעותם כותב התכניות יוכל להגדיר קטעי קוד שיתבצעו במקביל. סביבת ה XMT שאיתה נעבוד היא מימוש אפשרי למודל החישובי.PRAM פרופסור עוזי וישקין וקבוצתו בנו שבב שבו למעשה מימשו את המודל בחומרה. ניתן לכתוב תכנית בסביבת ה,XMT ולהריץ אותה באופן מקבילי על החומרה שבנו. בקורס אנחנו נעבוד על סימולטור בתוכנה שהוא חלק מסביבת ה.XMT 1. סביבת עבודה יש שתי אפשרויות להשתמש בסביבת העבודה. הראשונה מתוארת ב- 1.1 והשניה ב- 1.2 (אפשר גם להשתמש בשתי האפשרויות). 1.1 גישה לסביבה ברשת המכללה לצורך הקורס הוקמה סביבה עובדת בשרת zeus8 ברשת המכללה. נתאר להלן באופן עילי איך מתבצעת הגישה לשרת (זה יספיק בד"כ לסטודנטים שהתנסו בעבודה עם שרתי.(Unix לאחר מכן יינתנו הוראות מפורטות והדגמה שיאפשרו גם לסטודנטים חסרי רקע ב- Unix להתחבר ולעבוד. גישה לשרת מתבצעת באופן הבא: התחברות ב- SSH ל,public.mta.ac.il ממנו ל,zeus1 וממנו ל.zeus8 ה homefolder ממופה לכונן הרשתי שלכם ברשת המכללה. העלאת הקבצים מתבצעת ב SFTP ל.public.mta.ac.il ההתחברות לשרת היא באמצעות החשבון ברשת במכללה (שתקף גם למחשבי ה.(windows לכל סטודנט קיים חשבון ברשת המכללה, במידה ואתם לא זוכרים/לא קיבלם את המשתמש ו/או הסיסמא, פנו לתמיכה של המכללה. הנחיות מפורטות (מי שהתנסה בעבר בעבודה מול שרתי unix יכול לדלג לסוף החלק הזה): לצורך ההתחברות לשרת public.mta.ac.il תוכלו להשתמש ב,Putty ניתנת להורדה מ: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html הכניסו את הכתובת למקום המתאים והתחברו לשרת:
תדרשו לשם ההתחברות לשרת לספק שם משתמש וססמא. זהו החשבון הרגיל שלכם ברשת המכללה (שתקף גם למחשבי ה.(windows לכל סטודנט קיים חשבון ברשת המכללה, במידה ואתם לא זוכרים/לא קיבלם את המשתמש ו/או הסיסמא, פנו לתמיכה של המכללה. אחרי התחברות מוצלחת תקבלו את הפלט הבא: login as: mcnulty mcnulty@public.mta.ac.il's password: Last login: Thu Mar 12 10:05:13 2009 from 0.0.0.0 Sun Microsystems Inc. SunOS 5.9 Generic May 2002 You have mail. [mcnulty] public:/users/stud06co/mcnulty> הספרייה הנוכחית ממופה לכונן הרישתי שלכם במכללה, כלומר אם שמרתם קבצים בכונן הרישתי שלכם, כעת תוכלו לראות אותם (בעזרת פקודת :(ls כעת נתחבר לשרת שלנו באמצעות הרצת הפקודות הבאות, ותקבלו את ה prompt הבא: [mcnulty] public:/users/stud06co/mcnulty > ls 1.c Maildir@ a.b* a.sim [mcnulty] public:/users/stud06co/mcnulty > תתבקשו להכניס את הסיסמא שוב: ssh zeus1 ssh zeus8
[mcnulty] public:/users/stud06co/mcnulty > תריצו את הפקודת xmtcc,xmtsim ותוודאו שמתקבל הפלט הבא: [mcnulty] zeus8:/users/stud06co/mcnulty > xmtsim ERROR: Input file not set. Type "xmtsim -h" for help. [mcnulty] zeus8:/users/stud06co/mcnulty > xmtcc xmtcc ERROR: Wrong use of command line options. Use -h for help [mcnulty] zeus8:/users/stud06co/ mcnulty > פלט אחר עלול להעיד על בעיה בגישה לכלי ה.XMT הערה: xmtcc הוא קומפיילר לתוכנית המקבילית, ו- xmtsim הוא סימולטור שמאפשר להריץ את התוכנית המקומפלת. בפרק 2 להלן תמצאו הנחיות לשימוש בסביבה. בשביל להעלות קבצים לשרת zeus8 ניתן להשתמש ב WinSCP (נרצה להעלות קבצים לשרת zeus8 למשל כדי שנוכל לכתוב תוכניות בחלון רגיל של Windows ולהשתמש בהן בשרת.(zeus8 WinSCP ניתנת להורדה מ: http://winscp.net/eng/download.php לאחר ההתחברות, בצד אחד תראו את הכוננים המקומיים שלכם, ובצד השני את תוכן ה homefolder בשרת.
1.2 התקנת הסביבה במחשב שלכם (גם אם מערכת ההפעלה שלכם היא (Windows אם אתם משתמשי,Linux ניתן להוריד את הכלים עצמם ולהשתמש בהם על מכונת linux שלכם. מי שמשתמש ב linux בבית בוודאי לא יתקשה בכך... ניתן גם להתקין את כל הסביבה (כולל ה- (linux על מערכת הפעלה של.Windows זה נעשה ע"י הורדת Virtual Machine שכולל ( ubuntu )מותקן, linux עם כל סביבת ה XMT עליו. הוראות ניתן למצוא ב: http://www.umiacs.umd.edu/users/vishkin/xmt/sw-release.html התהליך הוא די פשוט, אבל ארוך (צריך להתקין,Virtual Box ולהוריד VM שגודלו בערך גיגה מכווץ).
2. שימוש ב XMT #include <xmtc.h> #include <xmtio.h> להלן דוגמא לתכנית ב :XMT #define NUM (3) int main() int A[NUM] = 1,2,3, B[NUM] = 3,2,1, C[NUM] = 0,0,0; int i; for(i=0 ; i < NUM ; ++i) printf("%d %d\n",a[i],b[i]); spawn(0, NUM-1) C[$] = A[$] + B[$]; for(i=0 ; i < NUM ; ++i) printf("%d ",C[i]); printf("\n"); return 0; הגדרנו שלושה מערכים בגודל 3. אתחלנו את A ו B, חישבנו את הסכום ואותו הצבנו ב C. האופרטור spawn יוצר threadים (שממוספרים מ 0 עד,(NUM-1 וכל אחד מהם מבצע במקביל את הפקודה שבתוך האופרטור. כלומר במחשב מקבילי בעל שלושה מעבדים (לפחות) חישוב הסכום יתבצע במקביל, וייקח יחידת זמן אחת (כמובן שהמעבד מבצע פקודות אסמבלי, ומאחורי החישוב מסתתרות כמה פקודת אסמבלי). כעת נקמפל ונריץ את התכנית: [mcnulty] zeus8:/users/stud06co/mcnulty> xmtcc prg1.c -o prg1 # STAGE 0 : Checking for errors. If this check passes you should not encounter # other compilation errors before the post processing and linking
# prg1.c xmtcc-core32 -S -O1 -fxmt-linear-prefetch -fschedule-insns prg1.c -o checktmp.0964 /usr/local/xmt/xmtcc-0.81.2.i386/gcc-xmt32/bin/xmt32-xmt32-elf-gcc -fno-delayedbranch -mno-check-zero-division -mno-explicit-relocs -S -O1 -fxmt-linear-prefetch - fschedule-insns prg1.c -o checktmp.0964 prg1.c: In function 'main': prg1.c:28:2: warning: no newline at end of file Total Number of errors detected = 0 Checking (prg1.c) was successful # STAGE 1 : Pre-Processing # prg1.c -> prg1.i xmtcc-core32 -E prg1.c -o /tmp/xmtcc.mhnxb30963/prg1.i /usr/local/xmt/xmtcc-0.81.2.i386/gcc-xmt32/bin/xmt32-xmt32-elf-gcc -fno-delayedbranch -mno-check-zero-division -mno-explicit-relocs -E prg1.c -o /tmp/xmtcc.mhnxb30963/prg1.i prg1.c:28:2: warning: no newline at end of file Pre-Processing (prg1.c) was successful # STAGE 2 : CIL : Source to source transformations (outlining, clustering,...) # ATTENTION: An error like 'prg1.i:12...' means there is something wrong # on line 12. And please forgive CIL's cryptic error messages! :) # prg1.i -> prg1.cil.c /usr/local/xmt/xmtcc-0.81.2.i386/xmtcilly.asm.exe --disallowduplication /tmp/xmtcc.mhnxb30963/prg1.i --out /tmp/xmtcc.mhnxb30963/prg1.cil.c CIL (prg1.i) was successful # STAGE 3 : Compiling CIL output File. # prg1.cil.c -> prg1.s xmtcc-core32 -S -O1 -fxmt-linear-prefetch -fschedule-insns /tmp/xmtcc.mhnxb30963/prg1.cil.c -o /tmp/xmtcc.mhnxb30963/prg1.s /usr/local/xmt/xmtcc-0.81.2.i386/gcc-xmt32/bin/xmt32-xmt32-elf-gcc -fno-delayedbranch -mno-check-zero-division -mno-explicit-relocs -S -O1 -fxmt-linear-prefetch - fschedule-insns /tmp/xmtcc.mhnxb30963/prg1.cil.c -o /tmp/xmtcc.mhnxb30963/prg1.s prg1.c:12: warning: conflicting types for built-in function 'printf' Compiling File (prg1.cil.c) was successful End of Compiler Pass
# STAGE 4 : Post Processing # prg1.s -> prg1.p xmt-post -xmt32 /tmp/xmtcc.mhnxb30963/prg1.s /tmp/xmtcc.mhnxb30963/prg1.p Post-Processing File (prg1.s) was successful End of Post-Processing # STAGE 5 : Linking. # /tmp/xmtcc.mhnxb30963/prg1.p -> prg1.sim + prg1.b xmt-linker -xmt32 /tmp/xmtcc.mhnxb30963/prg1.p -o prg1.sim Linking was successful End of Linking # THE COMPILATION PROCESS WAS SUCCESSFUL # במידה והייתה שגיאה בשלב ה compilation או ה linkage היינו מקבלים הודעה מתאימה. כשהתהליך מצליח נוצרים מספר קבצים. אחד מהם הוא בעל סיומת,sim זוהי התכנית שלנו מתורגמת לאסמבלי, ובו נשתמש כקלט לסימולטור. [mcnulty] zeus8:/users/stud06co/ mcnulty /prg1> xmtsim prg1.sim 1 3 2 2 3 1 4 4 4 End of simulation. [mcnulty] zeus8:/users/stud06co/ mcnulty /prg1> שימו לב שיש מספר מגבלות על השפה.xmtc למשל אין עדיין double,float ו-.char אפשר להדפיס int רק ע"י "d%" ולא למשל "%3d" ועוד. מומלץ לקרוא את התיעוד המורחב של השפה והכלים: http://www.umiacs.umd.edu/users/vishkin/xmt/manual4xmtc1out-of2.pdf קיים גם tutorial שבעזרתו אפשר להתנסות בשימוש בשפה: http://www.umiacs.umd.edu/users/vishkin/xmt/tutorial4xmtc2out-of2.pdf בהצלחה