Intel - логоСоздавање хетерогени мемориски системи во 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
  • Интел FPGA SDK за OpenCL Arria 10 GX FPGA развојен комплет за референтна платформа за пренесување

1.1. Потврдување на функционалноста на одборот FPGA и интерфејсите на EMIF

Потврдете го секој мемориски интерфејс независно, а потоа истанцирајте ја вашата сопствена платформа користејќи глобална меморија.

  1. Потврдете го секој мемориски интерфејс користејќи хардверски дизајни што можат да ја тестираат брзината и стабилноста на секој интерфејс.
  2. Инстанцирајте ја вашата сопствена платформа користејќи глобална меморија.
    1. За прample, ако имате три DDR интерфејси, еден од нив мора да биде мапиран како хетерогена меморија. Во овој случај, проверете ја функционалноста на стекот OpenCL со секој DDR интерфејс независно.
      OpenCL и логото OpenCL се заштитни знаци на Apple Inc. кои се користат со дозвола на Khronos Group™.
    2.  Intel FPGA SDK за OpenCL се заснова на објавена Khronos спецификација и го помина процесот на тестирање на усогласеност на Khronos. Тековниот статус на усогласеност може да се најде на www.khronos.org/conformance.

Интел корпорација. Сите права се задржани. Intel, логото на Intel и другите ознаки на Intel се заштитни знаци на Intel Corporation или нејзините подружници. Интел гарантира изведба на своите FPGA и полупроводнички производи според тековните спецификации во согласност со стандардната гаранција на Интел, но го задржува правото да прави промени на сите производи и услуги во секое време без претходна најава. Интел не превзема никаква одговорност или одговорност што произлегува од апликацијата или употребата на какви било информации, производ или услуга опишани овде, освен како што е изрично договорено во писмена форма од страна на Intel. На клиентите на Intel им се препорачува да ја добијат најновата верзија на спецификациите на уредот пред да се потпрат на какви било објавени информации и пред да направат нарачки за производи или услуги. *Други имиња и брендови може да се бараат како сопственост на други.
Регистриран 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 компајлер доделува аргументи на јадрото на меморијата врз основа на аргументот за локација на баферот што го наведовте.
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 Dividers кога имате вистински хетероген мемориски систем. Размислете за систем со еден DDR мемориски интерфејс и еден QDR мемориски интерфејс. Бидејќи двете банки имаат различни мемориски топологии, не можете да ги комбинирате под една глобална меморија.
Слика 1. Блок дијаграм на хетероген мемориски систем со три банки
Овој хетероген мемориски систем содржи два DDR мемориски интерфејси и еден QDR мемориски интерфејс.intel Креирање хетерогени мемориски системи во FPGA SDK за прилагодени платформи OpenCL - сл 1Ако користите верзија 16.0, 16.0.1 или 16.0.2 на софтверот Intel Quartus® Prime и Altera SDK за OpenCL, OpenCL Memory Bank Divider неправилно се справува со изливите на меморијата преку границите на адресата. За да го надминете овој познат проблем, додајте цевководен мост со големина на рафал од 1 и поврзете го неговиот Avalon ®Memory-Mapped (Avalon-MM) господар со slave-портата на OpenCL Memory Bank Divider.
Забелешка:
Овој познат проблем е поправен во софтверот Intel Quartus Prime и Intel FPGA SDK за OpenCL верзија 16.1.
Слика 2. Блок дијаграм на хетероген мемориски систем со три банки со цевководен мост intel Креирање хетерогени мемориски системи во FPGA SDK за прилагодени платформи OpenCL - сл 21.4. Изменување на програмата Boardtest и кодот на домаќинот за вашето хетерогено решение за меморија
Користете го кернелот boardtest.cl што доаѓа со Intel FPGA SDK за OpenCL прилагодена платформа со алатки за да ги тестирате функционалноста и перформансите на вашата сопствена платформа.
Програмата boardtest е OpenCL кернел што ви овозможува да го тестирате пропусниот опсег од домаќин до уред, пропусниот опсег на меморијата и општата функционалност на вашата прилагодена платформа.

  1. Прелистајте до /board/ custom_platform_toolkit/tests/boardtest директориум.
  2. Отворете го 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. Таблата_spec.xml file ги специфицира карактеристиките на двата мемориски системи.
  3. За да го искористите вашето хетерогено решение за меморија во вашиот OpenCL систем, изменете го кодот на домаќинот со додавање на знамето CL_MEM_HETEROGENEOUS_INTELFPGA на вашиот повик clCreateBuffer.
    За прampле:
    ddatain = clCreateBuffer(контекст, CL_MEM_READ_WRITE | мемзнамиња
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(непотпишана) * vectorSize, NULL, &status);
    Интел силно препорачува да ја поставите локацијата на тампон како аргумент на јадрото пред да го напишете баферот. Кога користите единствена глобална меморија, можете да ги напишете баферите или пред или откако ќе ги доделите на аргумент на јадрото. Во хетерогени мемориски системи, домаќинот ја поставува локацијата на баферот пред да го запише баферот. Со други зборови, домаќинот ќе ја повика функцијата clSetKernelArgument пред да ја повика функцијата clEnqueueWriteBuffer.
    Во кодот на вашиот домаќин, повикајте ги повиците clCreateBuffer, clSetKernelArg и clEnqueueWriteBuffer по следниот редослед:
    ddatain = clCreateBuffer(контекст, CL_MEM_READ_WRITE | мемзнамиња |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(непотпишана) * vectorSize, NULL, &status);
    … статус = clSetKernelArg(јадро[k], 0, sizeof(cl_mem), (празнина*)&ddatain);
    … статус = clEnqueueWriteBuffer(редица, ddatain, CL_FALSE, 0, sizeof(непотпишана) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file претставува сличен редослед на овие повици на функции.
  4.  Откако ќе го измените boardtest.cl file и кодот на домаќинот, компајлирајте го кодот на домаќинот и кернелот и потврдете ја нивната функционалност.
    Кога го компајлирате кодот на јадрото, мора да го оневозможите рафалното преплетување на сите мемориски системи со вклучување на -не-преплетување опција во командата aoc.

Поврзани информации
Оневозможување Burst-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.

  1. Потврдете дека знамето CL_CONTEXT_COMPILER_MODE_INTELFPGA не е поставено во кодот на вашиот домаќин.
  2. Прелистајте на табла/ /source/host/mmd директориумот на вашата прилагодена платформа.
  3. Отворете го acl_pcie_device.cpp мемориски уред (MMD) file во текстуален уредувач.
  4.  Изменете ја функцијата за репрограмирање во acl_pcie_device.cpp file со додавање на враќање 0; линија, како што е прикажано подолу:
    int ACL_PCIE_DEVICE::репрограма(неважечки *податоци, големина_t_големина на податоци)
    {
    врати 0;
    // претпостави неуспех
    int reprogram_failed = 1;
    // да претпоставиме дека нема rbf или хаш во fpga.bin
    int rbf_or_hash_not_provided = 1;
    // да претпоставиме дека хашот за ревизија на базата и увозот не се совпаѓа
    int hash_mismatch = 1;

    }
  5. Прекомпајлирајте го acl_pcie_device.cpp file.
  6. Потврдете дека знамето CL_CONTEXT_COMPILER_MODE_INTELFPGA останува непоставено.
    Внимание: Откако ќе додадете враќање 0; до функцијата за репрограмирање и повторно компајлирајте го MMD file, опкружувањето за траење ќе чита .aocx file и доделете ги тампон локациите, но нема да го репрограмирате FPGA. Мора рачно да ја усогласите сликата FPGA со .aocx file. За да го промените ова однесување, отстранете го враќањето 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 - логоКреирање на хетерогени мемориски системи во Intel® FPGA SDK за OpenCL
Прилагодени платформи
intel Креирање хетерогени мемориски системи во FPGA SDK за приспособени платформи OpenCL - икона 1 Испрати повратни информации
intel Креирање хетерогени мемориски системи во FPGA SDK за прилагодени платформи OpenCL - икона Онлајн верзија
intel Креирање хетерогени мемориски системи во FPGA SDK за приспособени платформи OpenCL - икона 1 Испрати повратни информации
ID: 683654
Верзија: 2016.12.13

Документи / ресурси

intel Креирање хетерогени мемориски системи во FPGA SDK за прилагодени платформи OpenCL [pdf] Инструкции
Создавање хетерогени мемориски системи во FPGA SDK за прилагодени платформи OpenCL, Креирање хетерогени мемориски системи, FPGA SDK за прилагодени платформи OpenCL

Референци

Оставете коментар

Вашата адреса за е-пошта нема да биде објавена. Задолжителните полиња се означени *