Създаване на хетерогенни системи за памет в FPGA SDK за потребителски платформи OpenCL
Инструкции
Създаване на хетерогенни системи за памет в Intel® FPGA SDK за персонализирани платформи OpenCL
Внедряването на хетерогенна памет в персонализирана платформа позволява по-голяма честотна лента на интерфейса на външната памет (EMIF), както и по-големи и по-бързи достъпи до паметта. Комбинацията от разнороден достъп до паметта с оптимизиран
OpenCL ™(1)ядрото може да доведе до значителни подобрения на производителността на вашата OpenCL система.
Тази бележка за приложението предоставя насоки за създаване на хетерогенни системи с памет в персонализирана платформа за използване с Intel® FPGA SDK за OpenCL(2). Intel приема, че сте опитен дизайнер на FPGA, който разработва персонализирани платформи, които съдържат разнородни системи с памет.
Преди да създадете хетерогенни системи с памет, запознайте се с документите на Intel FPGA SDK за OpenCL, посочени по-долу.
Свързана информация
- Intel FPGA SDK за OpenCL Ръководство за програмиране
- Intel FPGA SDK за OpenCL Ръководство за най-добри практики
- Intel FPGA SDK за OpenCL Arria 10 GX FPGA комплект за разработка Референтна платформа Ръководство за пренасяне
1.1. Проверка на функционалността на FPGA платката и EMIF интерфейсите
Проверете всеки интерфейс на паметта поотделно и след това създайте екземпляр на вашата персонализирана платформа с помощта на глобална памет.
- Проверете всеки интерфейс на паметта, като използвате хардуерни проекти, които могат да тестват скоростта и стабилността на всеки интерфейс.
- Създайте екземпляр на вашата персонализирана платформа, като използвате глобална памет.
- Напримерample, ако имате три DDR интерфейса, единият от тях трябва да бъде картографиран като разнородна памет. В този случай проверете функционалността на OpenCL стека с всеки DDR интерфейс поотделно.
OpenCL и логото на OpenCL са търговски марки на Apple Inc., използвани с разрешение на Khronos Group™. - Intel FPGA SDK за OpenCL е базиран на публикувана спецификация на Khronos и е преминал процеса на тестване за съответствие на Khronos. Текущият статус на съответствие може да бъде намерен на www.khronos.org/conformance.
- Напримерample, ако имате три DDR интерфейса, единият от тях трябва да бъде картографиран като разнородна памет. В този случай проверете функционалността на OpenCL стека с всеки DDR интерфейс поотделно.
Корпорация Intel. Всички права запазени. Intel, логото на Intel и други марки на Intel са търговски марки на Intel Corporation или нейните филиали. Intel гарантира производителността на своите FPGA и полупроводникови продукти според настоящите спецификации в съответствие със стандартната гаранция на Intel, но си запазва правото да прави промени на продукти и услуги по всяко време без предизвестие. Intel не поема никаква отговорност или задължения, произтичащи от приложението или използването на каквато и да е информация, продукт или услуга, описани тук, освен в случаите, когато Intel е изрично договорено в писмен вид. Клиентите на Intel се съветват да получат най-новата версия на спецификациите на устройството, преди да разчитат на публикувана информация и преди да направят поръчки за продукти или услуги. *Други имена и марки могат да бъдат заявени като собственост на други.
Регистрирано по ISO 9001: 2015
Като алтернатива, ако имате два DDR интерфейса и един интерфейс с четворна скорост на данни (QDR), проверете функционалността на OpenCL стека на двата DDR интерфейса и QDR интерфейса независимо.
Intel препоръчва да използвате 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.
Напримерample, ако вашата хардуерна система има две DDR памети като глобална памет по подразбиране и две QDR банки, които моделирате като разнородна памет, променете секциите на паметта на board_spec.xml file да прилича на следното:
1.3. Настройване на множество разделители на паметта в Qsys
Понастоящем OpenCL Memory Bank Divider в дизайна на Qsys не поддържа брой банки с памет без степен 2, което не е ограничение за типичните конфигурации. Въпреки това, има сценарии, при които са необходими различни от степен 2 интерфейси на паметта. За да приспособите броя интерфейси на паметта, който не е на степен 2, използвайте множество разделители на банки памет OpenCL, за да създадете хетерогенни системи с памет с брой банки памет, който не е на степен 2. Трябва да създадете множество OpenCL Memory Bank Dividers, когато имате истинска хетерогенна система с памет. Помислете за система с един интерфейс на DDR памет и един интерфейс на QDR памет. Тъй като двете банки имат различни топологии на паметта, не можете да ги комбинирате в една глобална памет.
Фигура 1. Блокова диаграма на трибанкова хетерогенна памет
Тази хетерогенна система с памет съдържа два интерфейса на DDR памет и един интерфейс на QDR памет.Ако използвате версия 16.0, 16.0.1 или 16.0.2 на софтуера Intel Quartus® Prime и Altera SDK за OpenCL, OpenCL Memory Bank Divider неправилно обработва изблици на памет през адресните граници. За да заобиколите този известен проблем, добавете тръбопроводен мост с размер на пакета 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(контекст, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Intel силно препоръчва да зададете местоположението на буфера като аргумент на ядрото, преди да напишете буфера. Когато използвате единична глобална памет, можете да запишете буферите преди или след присвояването им на аргумент на ядрото. В хетерогенни системи с памет хостът задава местоположението на буфера, преди да запише буфера. С други думи, хостът ще извика функцията clSetKernelArgument, преди да извика функцията clEnqueueWriteBuffer.
Във вашия хост код извикайте извикванията clCreateBuffer, clSetKernelArg и clEnqueueWriteBuffer в следния ред:
ddatain = clCreateBuffer(контекст, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * 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 и кода на хоста, компилирайте кода на хоста и ядрото и проверете тяхната функционалност.
Когато компилирате вашия код на ядрото, трябва да деактивирате burst-interleaving на всички системи с памет, като включите –no-interleaving опция в командата aoc.
Свързана информация
Деактивиране на Burst-Interleaving на глобалната памет (–не-interleaving )
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 или хеш във fpga.bin
int rbf_or_hash_not_provided = 1;
// приемем, че хешовете на базовата и импортираната версия не съвпадат
int hash_mismatch = 1;
…
} - Прекомпилирайте acl_pcie_device.cpp file.
- Проверете дали флагът CL_CONTEXT_COMPILER_MODE_INTELFPGA остава ненастроен.
Внимание: След като добавите return 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
Персонализирани платформи
Изпратете обратна връзка
Онлайн версия
Изпратете обратна връзка
ID: 683654
Версия: 2016.12.13
Документи / Ресурси
![]() |
intel Създаване на системи с хетерогенна памет в FPGA SDK за потребителски платформи OpenCL [pdfИнструкции Създаване на хетерогенни системи за памет в FPGA SDK за потребителски платформи OpenCL, Създаване на хетерогенни системи за памет, FPGA SDK за персонализирани платформи OpenCL |