Создание гетерогенных систем памяти в 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 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 или ее дочерних компаний. Корпорация 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 присваивает аргументы ядра памяти на основе указанного вами аргумента местоположения буфера.
1. Перейдите к файлу board_spec.xml. file в каталоге оборудования вашей пользовательской платформы.
2. Откройте файл board_spec.xml. file в текстовом редакторе и соответствующим образом измените XML.
НапримерampФайл, если ваша аппаратная система имеет две памяти DDR в качестве глобальной памяти по умолчанию и два банка QDR, которые вы моделируете как гетерогенную память, измените разделы памяти в файле board_spec.xml. file выглядеть следующим образом:
1.3. Настройка нескольких разделителей памяти в Qsys
В настоящее время разделитель банков памяти OpenCL в конструкции Qsys не поддерживает количество банков памяти, отличное от степени 2, что не является ограничением для типичных конфигураций. Однако существуют сценарии, в которых необходимо количество интерфейсов памяти, отличное от степени 2. Чтобы разместить количество интерфейсов памяти, не равное степени 2, используйте несколько разделителей банков памяти OpenCL для создания гетерогенных систем памяти с числом банков памяти, отличным от степени 2. Если у вас действительно гетерогенная система памяти, вам необходимо создать несколько разделителей банков памяти OpenCL. Рассмотрим систему с одним интерфейсом памяти 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.
Примечание:
Эта известная проблема исправлена в программном обеспечении Intel Quartus Prime и Intel FPGA SDK для OpenCL версии 16.1.
Рисунок 2. Блок-схема трехбанковой гетерогенной системы памяти с конвейерным мостом. 1.4. Изменение программы Boardtest и хост-кода для вашего решения с гетерогенной памятью
Используйте ядро boardtest.cl, входящее в состав набора средств Intel FPGA SDK для специальной платформы OpenCL, чтобы протестировать функциональность и производительность вашей пользовательской платформы.
Программа 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);
… статус = 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.
Сопутствующая информация
Отключение пакетного чередования глобальной памяти (–no-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;
// предполагаем неудачу
интервал reprogram_failed = 1;
// предполагаем, что в fpga.bin нет rbf или хеша
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
Пользовательские платформы
Отправить отзыв
Онлайн версия
Отправить отзыв
ИД: 683654
Версия: 2016.12.13
Документы/Ресурсы
![]() |
Intel Создание гетерогенных систем памяти в SDK FPGA для пользовательских платформ OpenCL [pdf] Инструкции Создание гетерогенных систем памяти в FPGA SDK для пользовательских платформ OpenCL, Создание гетерогенных систем памяти, FPGA SDK для пользовательских платформ OpenCL |