Tworzenie heterogenicznych systemów pamięci w FPGA SDK dla niestandardowych platform OpenCL
Instrukcje
Tworzenie heterogenicznych systemów pamięci w Intel® FPGA SDK dla niestandardowych platform OpenCL
Implementacja pamięci heterogenicznej na platformie niestandardowej umożliwia zwiększenie przepustowości interfejsu pamięci zewnętrznej (EMIF), a także większy i szybszy dostęp do pamięci. Połączenie heterogenicznego dostępu do pamięci ze zoptymalizowanym
Jądro OpenCL ™(1) może spowodować znaczną poprawę wydajności systemu OpenCL.
Ta nota aplikacyjna zawiera wskazówki dotyczące tworzenia heterogenicznych systemów pamięci na platformie niestandardowej do użytku z zestawem Intel® FPGA SDK dla OpenCL(2). Firma Intel zakłada, że jesteś doświadczonym projektantem układów FPGA, który opracowuje niestandardowe platformy zawierające heterogeniczne systemy pamięci.
Przed utworzeniem heterogenicznych systemów pamięci zapoznaj się z określonymi poniżej dokumentami Intel FPGA SDK for OpenCL.
Informacje powiązane
- Intel FPGA SDK dla przewodnika programowania OpenCL
- Przewodnik po najlepszych praktykach Intel FPGA SDK dla OpenCL
- Intel FPGA SDK dla OpenCL Arria 10 GX FPGA Development Kit Reference Platform Guide Porting
1.1. Weryfikacja funkcjonalności płytki FPGA i interfejsów EMIF
Sprawdź niezależnie każdy interfejs pamięci, a następnie utwórz instancję platformy niestandardowej przy użyciu pamięci globalnej.
- Sprawdź każdy interfejs pamięci za pomocą projektów sprzętowych, które mogą przetestować szybkość i stabilność każdego interfejsu.
- Utwórz instancję platformy niestandardowej przy użyciu pamięci globalnej.
- Na przykładamppliku, jeśli masz trzy interfejsy DDR, jeden z nich musi być zmapowany jako pamięć heterogeniczna. W takim przypadku sprawdź funkcjonalność stosu OpenCL z każdym interfejsem DDR niezależnie.
OpenCL i logo OpenCL są znakami towarowymi Apple Inc. używanymi za zgodą Khronos Group™. - Zestaw Intel FPGA SDK dla OpenCL jest oparty na opublikowanej specyfikacji Khronos i przeszedł proces testowania zgodności Khronos. Aktualny stan zgodności można znaleźć pod adresem www.khronos.org/conformance.
- Na przykładamppliku, jeśli masz trzy interfejsy DDR, jeden z nich musi być zmapowany jako pamięć heterogeniczna. W takim przypadku sprawdź funkcjonalność stosu OpenCL z każdym interfejsem DDR niezależnie.
Korporacja intelektualna. Wszelkie prawa zastrzeżone. Intel, logo Intel i inne znaki Intel są znakami towarowymi firmy Intel Corporation lub jej podmiotów zależnych. Firma Intel gwarantuje wydajność swoich produktów FPGA i półprzewodników zgodnie z aktualnymi specyfikacjami zgodnie ze standardową gwarancją firmy Intel, ale zastrzega sobie prawo do wprowadzania zmian w dowolnych produktach i usługach w dowolnym czasie bez powiadomienia. Firma Intel nie ponosi żadnej odpowiedzialności wynikającej z zastosowania lub wykorzystania jakichkolwiek informacji, produktów lub usług opisanych w niniejszym dokumencie, z wyjątkiem przypadków wyraźnie uzgodnionych na piśmie przez firmę Intel. Klienci firmy Intel powinni uzyskać najnowszą wersję specyfikacji urządzeń przed poleganiem na jakichkolwiek opublikowanych informacjach oraz przed złożeniem zamówienia na produkty lub usługi. *Inne nazwy i marki mogą być przedmiotem praw osób trzecich.
Zarejestrowany zgodnie z ISO 9001: 2015
Alternatywnie, jeśli masz dwa interfejsy DDR i jeden interfejs QDR, sprawdź funkcjonalność stosu OpenCL dwóch interfejsów DDR i interfejsu QDR niezależnie.
Firma Intel zaleca używanie konstrukcji PCI Express® — (PCIe® -) lub EMIF do testowania interfejsów pamięci. Po sprawdzeniu, czy każdy interfejs pamięci działa i czy projekt OpenCL działa z podzbiorem interfejsów pamięci, kontynuuj
stworzyć w pełni funkcjonalny heterogeniczny system pamięci.
1.2. Modyfikowanie pliku board_spec.xml File
Zmodyfikuj plik board_spec.xml file określić typy heterogenicznych systemów pamięci, które są dostępne dla jąder OpenCL.
Podczas kompilacji jądra zestaw Intel FPGA SDK dla OpenCL Offline Compiler przypisuje argumenty jądra do pamięci na podstawie określonego argumentu lokalizacji bufora.
1. Przejdź do pliku board_spec.xml file w katalogu sprzętu platformy niestandardowej.
2. Otwórz plik board_spec.xml file w edytorze tekstu i odpowiednio zmodyfikuj XML.
Na przykładampplik, jeśli twój system sprzętowy ma dwie pamięci DDR jako domyślną pamięć globalną i dwa banki QDR, które modelujesz jako pamięć heterogeniczną, zmodyfikuj sekcje pamięci w pliku board_spec.xml file przypominać następujące:
1.3. Konfigurowanie wielu dzielników pamięci w Qsys
Obecnie OpenCL Memory Bank Divider w projekcie Qsys nie obsługuje liczby banków pamięci non-power-of-2, co nie jest ograniczeniem dla typowych konfiguracji. Istnieją jednak scenariusze, w których konieczne jest użycie liczby interfejsów pamięci innej niż potęga 2. Aby obsłużyć liczbę interfejsów pamięci bez mocy 2, użyj wielu dzielników banków pamięci OpenCL, aby utworzyć heterogeniczne systemy pamięci z liczbą banków pamięci bez mocy 2. Jeśli masz prawdziwie heterogeniczny system pamięci, musisz utworzyć wiele dzielników banku pamięci OpenCL. Rozważ system z jednym interfejsem pamięci DDR i jednym interfejsem pamięci QDR. Ponieważ oba banki mają różne topologie pamięci, nie można ich połączyć w ramach jednej pamięci globalnej.
Rysunek 1. Schemat blokowy trójbankowego heterogenicznego systemu pamięci
Ten heterogeniczny system pamięci zawiera dwa interfejsy pamięci DDR i jeden interfejs pamięci QDR.Jeśli używasz wersji 16.0, 16.0.1 lub 16.0.2 oprogramowania Intel Quartus® Prime i Altera SDK dla OpenCL, OpenCL Memory Bank Divider nieprawidłowo obsługuje impulsy pamięci przekraczające granice adresów. Aby obejść ten znany problem, dodaj mostek potokowy o rozmiarze serii 1 i podłącz jego master Avalon ®Memory-Mapped (Avalon-MM) do portu podrzędnego rozdzielacza banku pamięci OpenCL.
Notatka:
Ten znany problem został rozwiązany w oprogramowaniu Intel Quartus Prime i zestawie Intel FPGA SDK dla OpenCL w wersji 16.1.
Rysunek 2. Schemat blokowy trójbankowego heterogenicznego systemu pamięci z mostem potokowym 1.4. Modyfikowanie programu Boardtest i kodu hosta dla rozwiązania z pamięcią heterogeniczną
Użyj jądra boardtest.cl, które jest dostarczane z pakietem Intel FPGA SDK for OpenCL Custom Platform Toolkit, aby przetestować funkcjonalność i wydajność platformy niestandardowej.
Program do testowania płyt to jądro OpenCL, które umożliwia testowanie przepustowości między hostami a urządzeniami, przepustowości pamięci i ogólnej funkcjonalności platformy niestandardowej.
- Przeglądaj do /board/ katalog_custom_platform_toolkit/tests/boardtest.
- Otwórz plik boardtest.cl file w edytorze tekstu i przypisz lokalizację bufora do każdego argumentu pamięci globalnej.
Na przykładampna:
__jądro puste
mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, uint arg, uint arg2)
Tutaj uint *src jest przypisany do pamięci DDR, a uint *dst jest przypisany do pamięci QDR. Board_spec.xml file określa charakterystykę obu systemów pamięci. - Aby wykorzystać rozwiązanie pamięci heterogenicznej w systemie OpenCL, zmodyfikuj kod hosta, dodając flagę CL_MEM_HETEROGENEOUS_INTELFPGA do wywołania clCreateBuffer.
Na przykładampna:
ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | flagi pamięci
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(bez znaku) * vectorSize, NULL, & status);
Firma Intel zdecydowanie zaleca ustawienie lokalizacji bufora jako argumentu jądra przed zapisaniem bufora. Gdy używasz pojedynczej pamięci globalnej, możesz zapisać bufory przed lub po przypisaniu ich do argumentu jądra. W heterogenicznych systemach pamięci host ustawia lokalizację bufora przed zapisaniem bufora. Innymi słowy, host wywoła funkcję clSetKernelArgument przed wywołaniem funkcji clEnqueueWriteBuffer.
W swoim kodzie hosta wywołaj wywołania clCreateBuffer, clSetKernelArg i clEnqueueWriteBuffer w następującej kolejności:
ddatain = clCreateBuffer (kontekst, CL_MEM_READ_WRITE | flagi pamięci |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(bez znaku) * vectorSize, NULL, & status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddata);
… status = clEnqueueWriteBuffer(kolejka, ddata, CL_FALSE, 0, sizeof(bez znaku) * vectorSize,hdata, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file przedstawia podobną kolejność wywołań tych funkcji. - Po zmodyfikowaniu pliku boardtest.cl file i kod hosta, skompiluj kod hosta i jądra oraz sprawdź ich funkcjonalność.
Podczas kompilacji kodu jądra należy wyłączyć przeplatanie serii we wszystkich systemach pamięci, włączając opcję –no-interleaving opcja w poleceniu aoc.
Informacje powiązane
Wyłączanie Burst-Interleaving pamięci globalnej (-no-interleaving )
1.5. Weryfikacja funkcjonalności twojej heterogenicznej pamięci System
Aby upewnić się, że heterogeniczny system pamięci działa prawidłowo, usuń ustawienie flagi CL_CONTEXT_COMPILER_MODE_INTELFPGA w kodzie hosta.
W systemach OpenCL z jednorodną pamięcią musisz ustawić flagę CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 w swoim kodzie hosta, aby wyłączyć odczyt .aocx file i przeprogramowanie FPGA. Ustawienie flagi CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 jest przydatne podczas tworzenia instancji płyty w celu sprawdzenia funkcjonalności platformy niestandardowej bez projektowania planu piętra i określania regionów LogicLock™.
W przypadku heterogenicznych systemów pamięci środowisko wykonawcze musi odczytywać lokalizacje buforów każdego bufora, opisane w pliku .aocx file, aby zweryfikować funkcjonalność systemów pamięci. Jednak możesz chcieć zweryfikować funkcjonalność swojej platformy niestandardowej bez implementacji końcowych funkcji projektu płytki, takich jak projektowanie planu piętra i określanie regionów LogicLock.
- Sprawdź, czy flaga CL_CONTEXT_COMPILER_MODE_INTELFPGA nie jest ustawiona w kodzie hosta.
- Przejdź do tablicy/ /source/host/mmd katalogu platformy niestandardowej.
- Otwórz urządzenie mapowane w pamięci acl_pcie_device.cpp (MMD) file w edytorze tekstu.
- Zmodyfikuj funkcję przeprogramowania w pliku acl_pcie_device.cpp file dodając zwrot 0; linia, jak pokazano poniżej:
int ACL_PCIE_DEVICE::reprogram(void *dane, size_t data_size)
{
zwróć 0;
// zakładamy niepowodzenie
int przeprogramowanie_nie powiodło się = 1;
// zakładamy brak rbf lub hash w fpga.bin
int rbf_or_hash_not_provided = 1;
// zakładamy, że skróty wersji podstawowej i importu nie są zgodne
int hash_niedopasowanie = 1;
…
} - Skompiluj ponownie plik acl_pcie_device.cpp file.
- Sprawdź, czy flaga CL_CONTEXT_COMPILER_MODE_INTELFPGA pozostaje nieustawiona.
Uwaga: Po dodaniu zwróć 0; do funkcji przeprogramowania i ponownie skompiluj MMD file, środowisko uruchomieniowe odczyta plik .aocx file i przypisać lokalizacje buforów, ale nie przeprogramuje FPGA. Musisz ręcznie dopasować obraz FPGA do pliku .aocx file. Aby odwrócić to zachowanie, usuń zwrot 0; z funkcji przeprogramowania i ponownie skompiluj MMD file.
1.6. Historia zmian dokumentów
Data | Wersja | Zmiany |
Grudzień-17 | 2017.12.01 | • Zmieniono nazwę CL_MEM_HETEROGENEOUS_ALTERA na CL_MEM_HETEROGENEOUS_INTELFPGA. |
Grudzień-16 | 2016.12.13 | • Zmieniono nazwę CL_CONTEXT_COMPILER_MODE_ALTERA na CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Tworzenie heterogenicznych systemów pamięci w Intel® FPGA SDK dla OpenCL
Platformy niestandardowe Wyślij opinię
Wersja online
Wyślij opinię
Identyfikator: 683654
Wersja: 2016.12.13
Dokumenty / Zasoby
![]() | intel Tworzenie heterogenicznych systemów pamięci w FPGA SDK dla niestandardowych platform OpenCL [plik PDF] Instrukcje Tworzenie heterogenicznych systemów pamięci w FPGA SDK dla niestandardowych platform OpenCL, Tworzenie heterogenicznych systemów pamięci, FPGA SDK dla niestandardowych platform OpenCL |