intel - logoVytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL
Instrukce

Vytváření heterogenních paměťových systémů v Intel® FPGA SDK pro OpenCL Custom Platforms

Implementace heterogenní paměti na vlastní platformě umožňuje větší šířku pásma externího paměťového rozhraní (EMIF) a také větší a rychlejší přístupy k paměti. Kombinace heterogenního přístupu k paměti s optimalizovaným
Jádro OpenCL™(1) může vést k výraznému zlepšení výkonu vašeho systému OpenCL.
Tato aplikační poznámka poskytuje návod k vytváření heterogenních paměťových systémů na vlastní platformě pro použití s ​​Intel® FPGA SDK pro OpenCL(2). Intel předpokládá, že jste zkušený návrhář FPGA, který vyvíjí vlastní platformy, které obsahují heterogenní paměťové systémy.
Před vytvořením heterogenních paměťových systémů se seznamte s Intel FPGA SDK pro dokumenty OpenCL specifikované níže.
Související informace

  • Intel FPGA SDK pro OpenCL Programming Guide
  • Průvodce doporučenými postupy Intel FPGA SDK pro OpenCL
  • Průvodce portováním referenční platformy Intel FPGA SDK pro OpenCL Arria 10 GX FPGA Development Kit

1.1. Ověření funkčnosti desky FPGA a rozhraní EMIF

Ověřte každé paměťové rozhraní nezávisle a poté vytvořte instanci vaší vlastní platformy pomocí globální paměti.

  1. Ověřte každé paměťové rozhraní pomocí návrhů hardwaru, které mohou otestovat rychlost a stabilitu každého rozhraní.
  2. Vytvořte instanci vaší vlastní platformy pomocí globální paměti.
    1. NapřampPokud máte tři rozhraní DDR, jedno z nich musí být mapováno jako heterogenní paměť. V takovém případě ověřte funkčnost zásobníku OpenCL s každým rozhraním DDR nezávisle.
      OpenCL a logo OpenCL jsou ochranné známky společnosti Apple Inc. používané se svolením společnosti Khronos Group™.
    2.  Intel FPGA SDK pro OpenCL je založeno na publikované specifikaci Khronos a prošlo procesem testování shody Khronos. Aktuální stav shody lze nalézt na www.khronos.org/conformance.

Intel Corporation. Všechna práva vyhrazena. Intel, logo Intel a další značky Intel jsou ochranné známky společnosti Intel Corporation nebo jejích dceřiných společností. Společnost Intel zaručuje výkon svých FPGA a polovodičových produktů podle aktuálních specifikací v souladu se standardní zárukou společnosti Intel, ale vyhrazuje si právo provádět změny jakýchkoli produktů a služeb kdykoli bez upozornění. Společnost Intel nepřebírá žádnou odpovědnost nebo závazky vyplývající z aplikace nebo použití jakýchkoli informací, produktů nebo služeb popsaných v tomto dokumentu, pokud to není výslovně písemně odsouhlaseno společností Intel. Zákazníkům společnosti Intel se doporučuje získat nejnovější verzi specifikací zařízení dříve, než se budou spoléhat na jakékoli zveřejněné informace a než zadají objednávky na produkty nebo služby. *Jiná jména a značky mohou být nárokovány jako vlastnictví jiných.
ISO 9001: 2015 Registrováno
Alternativně, pokud máte dvě rozhraní DDR a jedno rozhraní QDR (quad data rate), ověřte nezávisle funkčnost zásobníku OpenCL dvou rozhraní DDR a rozhraní QDR.
Intel doporučuje, abyste k testování paměťových rozhraní používali PCI Express® – (PCIe® -) nebo exkluzivní designy EMIF. Poté, co ověříte, že každé paměťové rozhraní je funkční a že váš návrh OpenCL funguje s podmnožinou paměťových rozhraní, pokračujte
vytvořit plně funkční heterogenní paměťový systém. 
1.2. Úprava souboru board_spec.xml File
Upravte soubor board_spec.xml file specifikovat typy heterogenních paměťových systémů, které jsou dostupné pro jádra OpenCL.
Během kompilace jádra Intel FPGA SDK pro OpenCL Offline Compiler přiřadí argumenty jádra paměti na základě argumentu umístění vyrovnávací paměti, který zadáte.
1. Přejděte do souboru board_spec.xml file v hardwarovém adresáři vaší vlastní platformy.
2. Otevřete soubor board_spec.xml file v textovém editoru a odpovídajícím způsobem upravte XML.
NapřampPokud má váš hardwarový systém dvě paměti DDR jako výchozí globální paměť a dvě banky QDR, které modelujete jako heterogenní paměť, upravte části paměti v souboru board_spec.xml file podobat následujícímu:
















1.3. Nastavení vícenásobných rozdělovačů paměti v Qsys
V současné době OpenCL Memory Bank Divider v provedení Qsys nepodporuje non-power-of-2 počet paměťových bank, což není omezení pro typické konfigurace. Existují však scénáře, kdy je nutný počet paměťových rozhraní bez spotřeby energie 2. Chcete-li se přizpůsobit počtu paměťových rozhraní bez výkonu 2, použijte více OpenCL Memory Bank Dividers k vytvoření heterogenních paměťových systémů s počtem paměťových bank bez výkonu 2. Pokud máte skutečně heterogenní paměťový systém, musíte vytvořit více OpenCL Memory Bank Dividers. Představte si systém s jedním paměťovým rozhraním DDR a jedním paměťovým rozhraním QDR. Protože obě banky mají různé topologie paměti, nemůžete je kombinovat pod jedinou globální pamětí.
Obrázek 1. Blokové schéma tříbankového heterogenního paměťového systému
Tento heterogenní paměťový systém obsahuje dvě paměťová rozhraní DDR a jedno paměťové rozhraní QDR.intel Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL - obr. 1Pokud používáte verzi 16.0, 16.0.1 nebo 16.0.2 softwaru Intel Quartus® Prime a Altera SDK pro OpenCL, OpenCL Memory Bank Divider nesprávně zpracovává shluky paměti přes hranice adres. Chcete-li tento známý problém vyřešit, přidejte potrubní most s velikostí shluku 1 a připojte jeho master Avalon ® Memory-Mapped (Avalon-MM) k podřízenému portu OpenCL Memory Bank Divider.
Poznámka:
Tento známý problém je vyřešen v softwaru Intel Quartus Prime a sadě Intel FPGA SDK pro OpenCL verze 16.1.
Obrázek 2. Blokové schéma tříbankového heterogenního paměťového systému s potrubním mostem intel Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL - obr. 21.4. Úprava programu Boardtest a hostitelského kódu pro vaše heterogenní paměťové řešení
Použijte jádro boardtest.cl dodávané se sadou Intel FPGA SDK pro OpenCL Custom Platform Toolkit k testování funkčnosti a výkonu vaší vlastní platformy.
Program boardtest je jádro OpenCL, které vám umožňuje testovat šířku pásma mezi hostitelem a zařízením, šířku pásma paměti a obecnou funkčnost vaší vlastní platformy.

  1. Procházet na /board/ custom_platform_toolkit/tests/boardtest adresář.
  2. Otevřete boardtest.cl file v textovém editoru a každému argumentu globální paměti přiřaďte umístění vyrovnávací paměti.
    Napřampten:
    __kernel neplatné
    mem_stream (__global__attribute__((umístění_bufferu(“DDR”))) uint *src, __global __attribute__((umístění_bufferu(“QDR”))) uint *dst, uint arg, uint arg2)
    Zde je uint *src přiřazeno paměti DDR a uint *dst je přiřazeno paměti QDR. Soubor board_spec.xml file specifikuje vlastnosti obou paměťových systémů.
  3. Chcete-li využít své řešení heterogenní paměti v systému OpenCL, upravte svůj hostitelský kód přidáním příznaku CL_MEM_HETEROGENEOUS_INTELFPGA do volání clCreateBuffer.
    Napřampten:
    ddatain = clCreateBuffer(kontext, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    Intel důrazně doporučuje, abyste před zápisem vyrovnávací paměti nastavili umístění vyrovnávací paměti jako argument jádra. Při použití jediné globální paměti můžete vyrovnávací paměti zapisovat před nebo po jejich přiřazení k argumentu jádra. V heterogenních paměťových systémech hostitel nastaví umístění vyrovnávací paměti před zápisem do vyrovnávací paměti. Jinými slovy, hostitel zavolá funkci clSetKernelArgument před voláním funkce clEnqueueWriteBuffer.
    V kódu hostitele vyvolejte volání clCreateBuffer, clSetKernelArg a clEnqueueWriteBuffer v následujícím pořadí:
    ddatain = clCreateBuffer(kontext, 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(fronta, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    Soubor ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file představuje podobné pořadí těchto volání funkcí.
  4.  Po úpravě souboru boardtest.cl file a kód hostitele, zkompilujte kód hostitele a jádra a ověřte jejich funkčnost.
    Při kompilaci kódu jádra musíte zakázat burst-interleaving všech paměťových systémů zahrnutím –no-interleaving možnost v příkazu aoc.

Související informace
Zakázání burst-interleaving globální paměti (–bez prokládání )

1.5. Ověření funkčnosti vaší heterogenní paměti Systém
Chcete-li zajistit správné fungování systému heterogenní paměti, zrušte nastavení příznaku CL_CONTEXT_COMPILER_MODE_INTELFPGA v kódu hostitele.
V systémech OpenCL s homogenní pamětí musíte ve svém hostitelském kódu nastavit příznak CL_CONTEXT_COMPILER_MODE_INTELFPGA=3, abyste zakázali čtení souboru .aocx file a přeprogramování FPGA. Nastavení příznaku CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 je užitečné při vytváření instance vaší desky za účelem ověření funkčnosti vaší vlastní platformy, aniž byste museli navrhovat půdorys a specifikovat oblasti LogicLock™.
U heterogenních paměťových systémů musí běhové prostředí číst umístění vyrovnávací paměti každé vyrovnávací paměti, popsané v souboru .aocx filepro ověření funkčnosti paměťových systémů. Možná však budete chtít ověřit funkčnost své vlastní platformy, aniž byste implementovali konečné funkce návrhu desky, jako je návrh půdorysu a určení oblastí LogicLock.

  1. Ověřte, že v kódu hostitele není nastaven příznak CL_CONTEXT_COMPILER_MODE_INTELFPGA.
  2. Přejděte na nástěnku/ /source/host/mmd adresář vaší vlastní platformy.
  3. Otevřete acl_pcie_device.cpp paměťově mapované zařízení (MMD) file v textovém editoru.
  4.  Upravte funkci přeprogramování v souboru acl_pcie_device.cpp file přidáním návratové 0; řádek, jak je znázorněno níže:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    návrat 0;
    // předpokládat selhání
    int reprogram_failed = 1;
    // nepředpokládá žádné rbf nebo hash v fpga.bin
    int rbf_or_hash_not_provided = 1;
    // předpokládá, že základní a importní revizní hash se neshodují
    int hash_mismatch = 1;

    }
  5. Znovu zkompilujte soubor acl_pcie_device.cpp file.
  6. Ověřte, že příznak CL_CONTEXT_COMPILER_MODE_INTELFPGA zůstává nenastavený.
    Pozor: Po přidání vraťte 0; na funkci přeprogramování a znovu zkompilujte MMD file, běhové prostředí přečte soubor .aocx file a přiřadit umístění vyrovnávací paměti, ale nebude přeprogramovat FPGA. Obrázek FPGA musíte ručně porovnat s .aocx file. Chcete-li toto chování zvrátit, odeberte return 0; z funkce přeprogramování a znovu zkompilujte MMD file.

1.6. Historie revizí dokumentu

Datum Verze Změny
Prosinec-17 2017.12.01 • Přejmenováno CL_MEM_HETEROGENEOUS_ALTERA na CL_MEM_HETEROGENEOUS_INTELFPGA.
Prosinec-16 2016.12.13 • Přejmenován CL_CONTEXT_COMPILER_MODE_ALTERA na CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoVytváření heterogenních paměťových systémů v Intel® FPGA SDK pro OpenCL
Vlastní platformy
intel Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL - ikona 1 Odeslat zpětnou vazbu
intel Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL - ikona Online verze
intel Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL - ikona 1 Odeslat zpětnou vazbu
ID: 683654
Verze: 2016.12.13

Dokumenty / zdroje

intel Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL [pdfPokyny
Vytváření heterogenních paměťových systémů v FPGA SDK pro vlastní platformy OpenCL, Vytváření heterogenních paměťových systémů, FPGA SDK pro vlastní platformy OpenCL

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *