Створення гетерогенних систем пам’яті в 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 for OpenCL Best Practices Guide
- Intel FPGA SDK для OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
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 або її дочірніх компаній. Intel гарантує роботу своїх FPGA та напівпровідникових продуктів відповідно до поточних специфікацій відповідно до стандартної гарантії Intel, але залишає за собою право вносити зміни в будь-які продукти та послуги в будь-який час без попередження. Корпорація Intel не бере на себе жодної відповідальності чи зобов’язань, що виникають у зв’язку із застосуванням або використанням будь-якої інформації, продукту чи послуги, описаних у цьому документі, за винятком випадків, чітко наданих корпорацією Intel у письмовій формі. Клієнтам Intel рекомендується отримати останню версію специфікацій пристрою, перш ніж покладатися на будь-яку опубліковану інформацію та перед тим, як розміщувати замовлення на продукти чи послуги. *Інші назви та бренди можуть бути власністю інших осіб.
ISO 9001: 2015 Зареєстровано
Крім того, якщо у вас є два інтерфейси DDR і один інтерфейс quad data rate (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, якщо у вас справжня неоднорідна система пам’яті. Розглянемо систему з одним інтерфейсом пам’яті DDR та одним інтерфейсом пам’яті QDR. Оскільки два банки мають різні топології пам’яті, ви не можете об’єднати їх в одну глобальну пам’ять.
Рисунок 1. Блок-схема трибанкової гетерогенної системи пам'яті
Ця гетерогенна система пам'яті містить два інтерфейси пам'яті DDR і один інтерфейс пам'яті QDR.Якщо ви використовуєте програмне забезпечення Intel Quartus® Prime версії 16.0, 16.0.1 або 16.0.2 і 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 for 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, &status);
Intel наполегливо рекомендує встановити розташування буфера як аргумент ядра перед написанням буфера. При використанні однієї глобальної пам’яті ви можете записати буфери до або після призначення їх аргументу ядра. У гетерогенних системах пам'яті хост встановлює розташування буфера перед записом у буфер. Іншими словами, хост викличе функцію clSetKernelArgument перед викликом функції clEnqueueWriteBuffer.
У коді хоста викличте виклики clCreateBuffer, clSetKernelArg і clEnqueueWriteBuffer у такому порядку:
ddatain = clCreateBuffer(контекст, 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 або хешу у 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 |