ایجاد سیستم های حافظه ناهمگن در 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
- اینتل FPGA SDK برای OpenCL راهنمای بهترین روش
- راهنمای انتقال پلت فرم پلت فرم مرجع کیت توسعه کیت مرجع FPGA اینتل برای OpenCL Arria 10 GX FPGA
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 به طور مستقل بررسی کنید.
شرکت اینتل تمامی حقوق محفوظ است. اینتل، آرم اینتل و سایر علائم اینتل علائم تجاری شرکت اینتل یا شرکت های تابعه آن هستند. اینتل عملکرد 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 Memory Bank برای ایجاد سیستمهای حافظه ناهمگن با تعداد بانکهای حافظه غیر توان از 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 اضافه کنید و Master 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(زمینه، CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA، sizeof(بدون علامت) * vectorSize، NULL، &وضعیت؛
اینتل اکیداً توصیه می کند که قبل از نوشتن بافر، مکان بافر را به عنوان آرگومان هسته تنظیم کنید. هنگام استفاده از یک حافظه جهانی، می توانید بافرها را قبل یا بعد از تخصیص آنها به آرگومان هسته بنویسید. در سیستم های حافظه ناهمگن، میزبان مکان بافر را قبل از نوشتن بافر تنظیم می کند. به عبارت دیگر، میزبان تابع clSetKernelArgument را قبل از فراخوانی تابع clEnqueueWriteBuffer فراخوانی می کند.
در کد میزبان خود، فراخوانی های clCreateBuffer، clSetKernelArg و clEnqueueWriteBuffer را به ترتیب زیر فراخوانی کنید:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA، sizeof(بدون علامت) * vectorSize، NULL، &وضعیت؛
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(صف، ddatain، CL_FALSE، 0، sizeof(بدون علامت) * vectorSize،hdatain، 0، NULL، NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file ترتیب مشابهی از این فراخوانی تابع را ارائه می دهد. - بعد از اینکه boardtest.cl را تغییر دادید file و کد میزبان، کد میزبان و هسته را کامپایل کرده و عملکرد آنها را بررسی کنید.
هنگام کامپایل کد هسته خود، باید interleaving پشت سر هم تمام سیستم های حافظه را با گنجاندن –no-interleaving غیرفعال کنید. گزینه در دستور aoc.
اطلاعات مرتبط
غیرفعال کردن Burst-Interleaving حافظه جهانی (-no-interleaving )
1.5. بررسی عملکرد حافظه ناهمگون شما سیستم
برای اطمینان از عملکرد صحیح سیستم حافظه ناهمگن، پرچم CL_CONTEXT_COMPILER_MODE_INTELFPGA را در کد میزبان خود تنظیم نکنید.
در سیستمهای OpenCL با حافظه همگن، باید برای غیرفعال کردن خواندن .aocx، پرچم CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 را در کد میزبان خود تنظیم کنید. 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 در یک ویرایشگر متن
- تابع reprogram را در acl_pcie_device.cpp تغییر دهید file با افزودن بازده 0؛ خط، همانطور که در زیر نشان داده شده است:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
بازگشت 0;
// شکست را فرض کنید
int reprogram_failed = 1;
// فرض کنید هیچ rbf یا هش در fpga.bin وجود ندارد
int rbf_or_hash_not_provided = 1;
// فرض کنید هش های بازبینی پایه و واردات مطابقت ندارند
int hash_mismatch = 1;
…
} - acl_pcie_device.cpp را دوباره کامپایل کنید file.
- بررسی کنید که پرچم CL_CONTEXT_COMPILER_MODE_INTELFPGA تنظیم نشده باقی بماند.
توجه: پس از اضافه کردن بازگشت 0; به تابع reprogram و کامپایل مجدد MMD file، محیط زمان اجرا .aocx را می خواند file و مکان های بافر را اختصاص دهید اما FPGA را دوباره برنامه ریزی نمی کند. شما باید به صورت دستی تصویر FPGA را با aocx. مطابقت دهید file. برای معکوس کردن این رفتار، بازگشت 0 را حذف کنید. از تابع reprogram و کامپایل مجدد 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
اسناد / منابع
![]() |
اینتل ایجاد سیستم های حافظه ناهمگن در FPGA SDK برای پلتفرم های سفارشی OpenCL [pdfدستورالعملها ایجاد سیستم های حافظه ناهمگن در FPGA SDK برای پلتفرم های سفارشی OpenCL، ایجاد سیستم های حافظه ناهمگن، FPGA SDK برای پلت فرم های سفارشی OpenCL |