יצירת מערכות זיכרון הטרוגניות ב-FPGA SDK עבור פלטפורמות מותאמות אישית של OpenCL
הוראות
יצירת מערכות זיכרון הטרוגניות ב-Intel® FPGA SDK עבור פלטפורמות מותאמות אישית של OpenCL
הטמעת זיכרון הטרוגני בפלטפורמה מותאמת אישית מאפשרת יותר רוחב פס של ממשק זיכרון חיצוני (EMIF) וכן גישה גדולה ומהירה יותר לזיכרון. השילוב של גישה הטרוגנית לזיכרון עם אופטימיזציה
ליבת OpenCL™(1) יכולה לגרום לשיפורי ביצועים משמעותיים עבור מערכת ה-OpenCL שלך.
הערת יישום זו מספקת הנחיות ליצירת מערכות זיכרון הטרוגניות בפלטפורמה מותאמת אישית לשימוש עם Intel® FPGA SDK עבור OpenCL(2). אינטל מניחה שאתה מעצב FPGA מנוסה שמפתח פלטפורמות מותאמות אישית המכילות מערכות זיכרון הטרוגניות.
לפני יצירת מערכות הזיכרון ההטרוגניות, הכר את Intel FPGA SDK עבור מסמכי OpenCL המפורטים להלן.
מידע קשור
- Intel FPGA SDK עבור OpenCL מדריך תכנות
- מדריך שיטות עבודה מומלצות של Intel FPGA SDK עבור OpenCL
- Intel FPGA SDK עבור OpenCL Arria 10 GX FPGA Development Kit מדריך העברת פלטפורמות
1.1. אימות הפונקציונליות של לוח FPGA וממשקי EMIF
אמת כל ממשק זיכרון באופן עצמאי ולאחר מכן הפעל את הפלטפורמה המותאמת אישית שלך באמצעות זיכרון גלובלי.
- אמת כל ממשק זיכרון באמצעות עיצובי חומרה שיכולים לבדוק את המהירות והיציבות של כל ממשק.
- הצג את הפלטפורמה המותאמת אישית שלך באמצעות זיכרון גלובלי.
- למשלampאם יש לך שלושה ממשקי DDR, יש למפות אחד מהם כזיכרון הטרוגני. במקרה זה, ודא את הפונקציונליות של מחסנית OpenCL עם כל ממשק DDR בנפרד.
OpenCL והלוגו של OpenCL הם סימנים מסחריים של Apple Inc. המשמשים בהרשאה של Khronos Group™. - Intel FPGA SDK עבור OpenCL מבוסס על מפרט Khronos שפורסם, ועבר את תהליך בדיקת התאימות של Khronos. ניתן למצוא את סטטוס ההתאמה הנוכחי בכתובת www.khronos.org/conformance.
- למשלampאם יש לך שלושה ממשקי DDR, יש למפות אחד מהם כזיכרון הטרוגני. במקרה זה, ודא את הפונקציונליות של מחסנית OpenCL עם כל ממשק DDR בנפרד.
תאגיד אינטל. כל הזכויות שמורות. Intel, הלוגו של Intel וסימני Intel אחרים הם סימנים מסחריים של Intel Corporation או של חברות הבת שלה. אינטל מתחייבת לביצועים של מוצרי ה-FPGA והמוליכים למחצה שלה למפרטים הנוכחיים בהתאם לאחריות הסטנדרטית של אינטל, אך שומרת לעצמה את הזכות לבצע שינויים בכל מוצר ושירות בכל עת ללא הודעה מוקדמת. אינטל אינה נושאת באחריות או חבות הנובעת מהיישום או השימוש בכל מידע, מוצר או שירות המתוארים כאן, למעט כפי שהוסכם במפורש בכתב על ידי אינטל. ללקוחות אינטל מומלץ להשיג את הגרסה העדכנית ביותר של מפרטי המכשיר לפני הסתמכות על מידע שפורסם ולפני ביצוע הזמנות של מוצרים או שירותים. *שמות ומותגים אחרים עשויים להיטען כרכושם של אחרים.
ISO 9001:2015 רשום
לחלופין, אם יש לך שני ממשקי DDR וממשק אחד של קצב נתונים מרובע (QDR), ודא את הפונקציונליות של מחסנית ה-OpenCL של שני ממשקי ה-DDR וממשק ה-QDR באופן עצמאי.
אינטל ממליצה להשתמש בעיצובים בלעדיים של PCI Express® – (PCIe® -) או EMIF כדי לבדוק את ממשקי הזיכרון שלך. לאחר שתוודא שכל ממשק זיכרון פונקציונלי ושעיצוב OpenCL שלך עובד עם תת-קבוצה של ממשקי הזיכרון, המשך
ליצור מערכת זיכרון הטרוגנית מתפקדת במלואה.
1.2. שינוי ה-board_spec.xml File
שנה את ה-board_spec.xml file כדי לציין את סוגי מערכות הזיכרון ההטרוגניות הזמינות לגרעיני OpenCL.
במהלך הידור ליבה, Intel FPGA SDK עבור OpenCL Offline Compiler מקצה ארגומנטים של ליבה לזיכרון בהתבסס על ארגומנט מיקום המאגר שאתה מציין.
1. דפדף אל ה-board_spec.xml file בספריית החומרה של הפלטפורמה המותאמת אישית שלך.
2. פתח את הקובץ board_spec.xml file בעורך טקסט ושנה את ה-XML בהתאם.
למשלampאם למערכת החומרה שלך יש שני זכרונות DDR כברירת מחדל לזיכרון גלובלי ושני בנק QDR שאתה מדגמן כזיכרון הטרוגני, שנה את קטעי הזיכרון של ה-board_spec.xml file להידמות לדברים הבאים:
1.3. הגדרת מחלקי זיכרון מרובים ב-Qsys
נכון לעכשיו, OpenCL Memory Bank Divider בעיצוב ה-Qsys אינו תומך במספר לא-כוח של 2 של בנקי זיכרון, דבר שאינו מהווה הגבלה לתצורות טיפוסיות. עם זאת, ישנם תרחישים שבהם יש צורך בממשקי זיכרון שאינם בעלי עוצמה של מספר 2. כדי להכיל ממשקי זיכרון שאינם בעלי עוצמה של 2, השתמש במספר מחלקי זיכרון מחלקי זיכרון OpenCL כדי ליצור מערכות זיכרון הטרוגניות עם מספר לא-כוח של 2 של מאגר זיכרון. עליך ליצור מספר מחלקי OpenCL Memory Bank כאשר יש לך מערכת זיכרון הטרוגנית אמיתית. שקול מערכת עם ממשק זיכרון DDR אחד וממשק זיכרון QDR אחד. מכיוון שלשני הבנקים יש טופולוגיות זיכרון שונות, לא ניתן לשלב אותם תחת זיכרון גלובלי אחד.
איור 1. תרשים בלוקים של מערכת זיכרון הטרוגנית עם שלושה גדות
מערכת זיכרון הטרוגנית זו מכילה שני ממשקי זיכרון DDR וממשק זיכרון QDR אחד.אם אתה משתמש בגרסה 16.0, 16.0.1 או 16.0.2 של תוכנת Intel Quartus® Prime ו-Altera SDK עבור OpenCL, מחלק הזיכרון של OpenCL מטפל בצורה שגויה בפרצי זיכרון מעבר לגבולות הכתובות. כדי לעקוף בעיה ידועה זו, הוסף גשר צינורות בגודל פרץ של 1 וחבר את המאסטר של Avalon ®Memory-Mapped (Avalon-MM) שלו ליציאת העבדים של OpenCL Memory Bank Divider.
פֶּתֶק:
בעיה ידועה זו תוקנה בתוכנת Intel Quartus Prime וב- Intel FPGA SDK עבור OpenCL גרסה 16.1.
איור 2. תרשים בלוקים של מערכת זיכרון הטרוגנית בעלת שלושה גדות עם גשר צינור 1.4. שינוי תוכנית ה-Boardtest וקוד המארח עבור פתרון הזיכרון ההטרוגני שלך
השתמש בקרנל boardtest.cl שמגיע עם Intel FPGA SDK עבור OpenCL Custom Platform Toolkit כדי לבדוק את הפונקציונליות והביצועים של הפלטפורמה המותאמת אישית שלך.
תוכנית ה-boardtest היא ליבת OpenCL המאפשרת לך לבדוק רוחב פס מארח למכשיר, רוחב פס זיכרון ופונקציונליות כללית של הפלטפורמה המותאמת אישית שלך.
- דפדף אל ה /board/ custom_platform_toolkit/tests/boardtest ספריית.
- פתח את ה-boardtest.cl file בעורך טקסט והקצה מיקום מאגר לכל ארגומנט זיכרון גלובלי.
למשלampעל:
_ריקל ריק
mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, uint arg, uint arg2)
כאן, uint *src מוקצה לזיכרון DDR, ו-uint *dst מוקצה לזיכרון QDR. הקובץ board_spec.xml file מפרט את המאפיינים של שתי מערכות הזיכרון. - כדי למנף את פתרון הזיכרון ההטרוגני שלך במערכת ה-OpenCL שלך, שנה את קוד המארח שלך על ידי הוספת הדגל CL_MEM_HETEROGENEOUS_INTELFPGA לקריאת clCreateBuffer שלך.
למשלampעל:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(לא חתום) * vectorSize, NULL, &status);
אינטל ממליצה בחום להגדיר את מיקום המאגר כארגומנט ליבה לפני כתיבת המאגר. בעת שימוש בזיכרון גלובלי יחיד, אתה יכול לכתוב את המאגרים לפני או אחרי הקצאתם לארגומנט ליבה. במערכות זיכרון הטרוגניות, המארח מגדיר את מיקום המאגר לפני כתיבת המאגר. במילים אחרות, המארח יקרא לפונקציה clSetKernelArgument לפני קריאת הפונקציה clEnqueueWriteBuffer.
בקוד המארח שלך, הפעל את הקריאות clCreateBuffer, clSetKernelArg ו-clEnqueueWriteBuffer בסדר הבא:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(לא חתום) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
ה-ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file מציג סדר דומה של קריאות פונקציות אלו. - לאחר שתשנה את ה-boardtest.cl file וקוד המארח, קומפלו את קוד המארח והקרנל ואמתו את הפונקציונליות שלהם.
בעת קומפילציה של קוד הליבה שלך, עליך להשבית שזירה מתפרצת של כל מערכות הזיכרון על ידי הכללת ה- –no-interleaving אפשרות בפקודה aoc.
מידע קשור
השבתת פרץ-שזירה של זיכרון גלובלי (-ללא שזירה )
1.5. אימות הפונקציונליות של הזיכרון ההטרוגני שלך מַעֲרֶכֶת
כדי להבטיח שמערכת הזיכרון ההטרוגני תפעל כראוי, בטל את הגדרת הדגל CL_CONTEXT_COMPILER_MODE_INTELFPGA בקוד המארח שלך.
במערכות OpenCL עם זיכרון הומוגני, עליך להגדיר את הדגל CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 בקוד המארח שלך כדי להשבית את הקריאה של ה-.aocx file ותכנות מחדש של ה-FPGA. הגדרת הדגל CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 שימושית בעת יצירת הלוח שלך כדי לאמת את הפונקציונליות של הפלטפורמה המותאמת אישית שלך מבלי לעצב את תוכנית הקומה ולציין את אזורי LogicLock™.
עם מערכות זיכרון הטרוגניות, סביבת זמן הריצה חייבת לקרוא את מיקומי המאגר של כל מאגר, המתוארים ב-.aocx file, כדי לאמת את הפונקציונליות של מערכות הזיכרון. עם זאת, ייתכן שתרצה לאמת את הפונקציונליות של הפלטפורמה המותאמת אישית שלך מבלי ליישם את התכונות הסופיות של עיצוב הלוח, כגון עיצוב תוכנית הרצפה וציון אזורי LogicLock.
- ודא שהדגל CL_CONTEXT_COMPILER_MODE_INTELFPGA אינו מוגדר בקוד המארח שלך.
- דפדף ללוח/ ספריית /source/host/mmd של הפלטפורמה המותאמת אישית שלך.
- פתח את התקן ממופי זיכרון acl_pcie_device.cpp (MMD) file בעורך טקסט.
- שנה את פונקציית התכנות מחדש ב-acl_pcie_device.cpp file על ידי הוספת החזר 0; קו, כפי שמוצג להלן:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
החזר 0;
// נניח כישלון
int reprogram_failed = 1;
// נניח שאין rbf או hash ב-fpga.bin
int rbf_or_hash_not_provided = 1;
// נניח שה-hash של גרסת הבסיס והייבוא אינם תואמים
int hash_mismatch = 1;
…
} - הידור מחדש של acl_pcie_device.cpp file.
- ודא שדגל CL_CONTEXT_COMPILER_MODE_INTELFPGA לא מוגדר.
תְשׁוּמַת לֵב: לאחר הוספת החזר 0; לפונקציה לתכנת מחדש ולהרכיב מחדש את ה-MMD file, סביבת זמן הריצה תקרא את ה-.aocx file ולהקצות את מיקומי המאגר אך לא יתכנת מחדש את ה-FPGA. עליך להתאים באופן ידני את תמונת ה-FPGA ל-.aocx file. כדי להפוך התנהגות זו, הסר את return 0; מהפונקציה לתכנת מחדש ולהרכיב מחדש את ה-MMD file.
1.6. היסטוריית תיקונים של מסמכים
תַאֲרִיך | גִרְסָה | שינויים |
דצמבר-17 | 2017.12.01 | • מיתוג מחדש CL_MEM_HETEROGENEOUS_ALTERA ל-CL_MEM_HETEROGENEOUS_INTELFPGA. |
דצמבר-16 | 2016.12.13 | • מיתוג מחדש CL_CONTEXT_COMPILER_MODE_ALTERA ל-CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
יצירת מערכות זיכרון הטרוגניות ב-Intel® FPGA SDK עבור OpenCL
פלטפורמות מותאמות אישית
שלח משוב
גרסה מקוונת
שלח משוב
מזהה: 683654
גרסה: 2016.12.13
מסמכים / משאבים
![]() |
intel יצירת מערכות זיכרון הטרוגניות ב-FPGA SDK עבור פלטפורמות מותאמות אישית של OpenCL [pdfהוראות יצירת מערכות זיכרון הטרוגניות ב-FPGA SDK עבור פלטפורמות מותאמות אישית של OpenCL, יצירת מערכות זיכרון הטרוגניות, FPGA SDK עבור פלטפורמות מותאמות אישית של OpenCL |