עריכת OpenCL ל- FPGA

Apple Special Event. October 22, 2013 (פברואר 2019).

Anonim

מסגרת OpenCL מטפלת באתגרים של מחשוב הטרוגני

מחשוב הטרוגני מתייחס למעמד הולך וגדל של מערכות שבהן היישום מבוצע בתערובת של מעבדי מעבד שונים ומאיצים כדי למקסם את התפוקה. ביצוע התוכנית על סוג זה של המערכת דורש פרדיגמה תכנות אשר מציג תצוגה מערכת עקבית למפתח היישום. מסגרת ה- OpenCL היא תקן תעשייתי שנוצר כדי לענות על הצרכים והאתגרים של מערכות מחשוב הטרוגניות.

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

המרכיב הראשון של מסגרת OpenCL הוא הפלטפורמה, המגדירה את המשאבים הזמינים לביצוע התוכנית. בפלטפורמת OpenCL, תמיד יש מעבד מארח ומכשיר האצה אחד לפחות. המעבד המארח אחראי על העברת משימות למאיץ, כמו גם ליזום העברת זיכרון מארח / מאיצים. מארח זה מיושם תמיד באמצעות המעבד ואת מאיץ יכול להיות מעבד, GPU, או FPGA. השליטה על התקני האצה אלה היא באמצעות סדרה משותפת של פונקציות API שהן חלק מהתקן ה- OpenCL.

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

איור 1: מתוך רצף ליישום מקבילי SATA ומשימה

בגרסה עוקבת של הקוד בתרשים 1, הפונקציות f, g, ו- h מבוצעות בתוך לולאה "for". כל פונקציה לוקחת את נתוני X ו- Y כמקורות קלט ומייצרת פלט T, שאינו נצרך על-ידי פונקציה אחרת בתוך הלולאה "for". לכן, לולאה בגירסה רציף של הקוד ניתן להפיץ את הפונקציות F, G ו- H כדי ליצור ייצוג במקביל המשימות של היישום כפי שמוצג על ידי עמודה מרכז של איור 1. אם כל קריאה של הפונקציה F, g ו- h היא עצמאית הן מן ההקדמה הקודמת והן הבאה, ואז היישום הוא גם משימה וגם נתונים מקבילים כפי שמוצג על ידי העמודה הימנית של איור 1. כל קריאה של פונקציה f, g או h מייצגת פריט עבודה המבוצע על ידי מכשיר ההאצה. בהתאם למשאבים החישוביים הקיימים, מאיץ יכול לבצע את כל פריטי העבודה במקביל או ברצף.

בנוסף להצגת מתכנת היישום עם התקן אגנוסטי מודל תכנות מקבילי במקביל, OpenCL מספק היררכיית מודל זיכרון אחיד כפי שמוצג באיור 2.

איור 2: מודל זיכרון OpenCL

ברמת היישום של המודל, שטח הזיכרון מחולק לזיכרון המארח ולזיכרון ההתקן. הזיכרון המשויך למכשיר מחולק לשלוש רמות של היררכיה, כולל זיכרון גלובלי, זיכרון מקומי וזיכרון פרטי. זיכרון גלובלי נוצר מרכיבי זיכרון המחוברים להתקן כגון SDRAM. ניהול המאגרים הממופים על הזיכרון העולמי מטופל על ידי יישום קוד המארח באמצעות שימוש בפונקציות ה- API של OpenCL. פונקציות OpenCL API משמשים כדי לקבוע את גודל המאגר, כמו גם לקרוא את הגישה לכתוב למאגר. מתוך כל סוגי הזיכרון הנתמכים על ידי מודל הזיכרון של OpenCL, חשוב לזכור שהזיכרון הגלובלי הוא הזיכרון בעל הקיבולת הגדולה ביותר וזמני ההשהיה הארוכים ביותר, ובכך מגדיר את התפוקה המקסימלית של נתונים בר השגה והוא הזיכרון היחיד שניתן לראות משני הכיוונים את המארח ואת המכשיר.

OpenCL ו- FPGA

ניתן לתכנת FPGA עבור אלגוריתמים שונים לאחר הייצור, וכפי שמוצג באיור 3, יש טבלאות צפייה (LUT) לביצוע פעולות לוגיות, כפכפים (FF) כדי לאחסן את התוצאה של LUT והקשרים בין אלמנטים ו I / O כריות כדי לקבל נתונים פנימה והחוצה של IC. ארכיטקטורות FPGA בת זמננו משלבות נתונים חישוביים נוספים (DSP), אחסון נתונים (BRAM), מקמ"ש סדרתי מהיר וקוביות בקר זיכרון מחוץ לזיכרון. השילוב של רכיבים אלה מספק את FPGA עם הגמישות ליישם לוגיקה מותאמת אישית עבור עומס עבודה תוכנה נתון.

איור 3: מבנה בסיסי של FPGA

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

גרסאות ליישום OpenCL שבוצעו על יחידות מחשוב מאיצות. יחידת חישוב מתייחסת ליבת המעבד או לוגיקת ההאצה המפעילה את הפעולות בתפקוד הקרנל.

SHA-1 אלגוריתם

האלגוריתם SHA-1 הוא אחד הפונקציות הקריפטוגרפיות הנפוצות ביותר. היכולת להבטיח ולבדוק את שלמות הנתונים באמצעות סוגים אלה של פונקציות כבר הבסיס לחתימות מקוונות ושכבת שקע מאובטחת (SSL) שנמצאת במרכז פתרונות מסחר אלקטרוני. פונקציה זו מתאימה באופן אידיאלי עבור FPGA שכן הוא מורכב ו, xor, סיבוב, להוסיף, או להעביר פעולות נגד קבוצה נתונים של 512 סיביות דרך 80 סיבובים של עיבוד. עומס הנתונים של 512 סיביות המשמש בכל סבב חישוב יכול להיות מחושב באופן מקביל או בלוק.

איור 4: יחידת חישוב FPGA עבור SHA-1

יישום FPGA של פונקציית SHA-1 מוצג באיור 4. בתכנון זה, אלמנט המפתח הוא יצירת יחידת חישוב מותאמת אישית כדי להקיף את 80 סיבובי העיבוד הדרושים לחישוב SHA-1 יחיד. על ידי קיבוץ כל 80 סיבובים של עיבוד בתוך ההיגיון עיבוד אותו, מעצב יישומים למזער אינטראקציות עם המטמון או אלמנטים זיכרון כפי שיידרש ביישום מעבד סטנדרטי. זה בתורו מגדיל את התפוקה עבור פונקציה זו מקטין את צריכת החשמל הדרושה כדי לקיים את התפוקה שהושגה. היתרונות של יישום FPGA לעומת יישום CPU מסוכמים בטבלה הבאה:

לשם השוואה זו, למעבד Intel Haswell יש 12 ליבות שמסוגלות לבצע קוד ליבה של OpenCL, אך אינן מותאמות לכל עומס עבודה ספציפי. לעומת זאת, ליישום FPGA יש 16 ליבות המותאמות לביצוע עומס העבודה של SHA1 בלבד. ההבדל ברמת ההתאמה האישית עבור יחידת מחשוב המאיץ מתרגם ישירות להפרש הביצועים בין שני המכשירים עבור עומס עבודה זה.

תוצאות ה- FPGA של Xilinx נוצרו על-ידי עיבוד האלגוריתם SHA1 תוך שימוש בסביבת הפיתוח של SDAccel עבור OpenCL, C ו- C ++ והפעלת התוכנית הבינאארית המתקבלת על מכשיר Xexinx Virtex 7. SDAccel מאפשרת ביצועים של עד 25x ביצועים טובים יותר / ואט עבור יישום מרכזי נתונים מינוף FPGAs ומשלבת המהדר הראשון ארכיטקטורה אופטימיזציה של התעשייה התומכת כל שילוב של גרסאות OpenCL, C ו- C + +, יחד עם ספריות, לוחות הפיתוח, ואת הראשון להשלים CPU / GPU כמו פיתוח וניסיון ריצה עבור FPGA.

מאת: SPENSER GILLILAND, FERNANDO MARTINEZ VALLINA, וינאי סינג, Xilinx, www.xilinx.com