Intel® FPGA SDK dla OpenCL™ - Centrum pomocy technicznej

Witamy na stronie pomocy technicznej Intel® FPGA SDK for OpenCL! Tutaj znajdziesz informacje o tym, jak emulować, kompilować i profilować jądro. Istnieją również wskazówki dotyczące optymalizacji jądra, a także informacje o tym, jak debugować system podczas uruchamiania aplikacji hosta. Ta strona jest podzielona na dwie główne kategorie oparte na platformie programistycznej - programista jądra dla FPGA i programista kodu hosta dla procesorów.

Ciesz się podróżą!

Zestaw Intel FPGA SDK dla OpenCL umożliwia programistom przyspieszenie aplikacji poprzez kierowanie heterogenicznych platform za pomocą procesorów Intel i układów FPGA. Intel FPGA SDK for OpenCL można zainstalować jako część oprogramowania Intel® Quartus® Prime lub jako osobny pakiet. Możesz pobrać Intel FPGA SDK dla OpenCL, łącząc się z poniższym linkiem. Zapoznaj się z sekcją Wymagania programowe poniżej, aby zapoznać się z wymaganiami wstępnymi.

Pobierz Intel® FPGA SDK dla OpenCL™

Wymagania dotyczące oprogramowania

Musisz mieć uprawnienia administratora w systemie programistycznym, aby zainstalować niezbędne pakiety i sterowniki wymagane do tworzenia oprogramowania hosta.

W systemie hosta musi być uruchomiony jeden z następujących obsługiwanych systemów operacyjnych Windows* i Linux* wymienionych na stronie Obsługa systemu operacyjnego.

Opracuj aplikację hosta dla zestawu Intel® FPGA SDK dla OpenCL™ przy użyciu jednego z następujących środowisk programistycznych:

Systemy operacyjne Windows

  • Intel FPGA SDK dla OpenCL
  • Pakiet wsparcia dla zarządu (BSP)
  • Microsoft* Visual Studio Professional w wersji 2010 lub nowszej.

Systemy operacyjne Linux

  • Intel FPGA SDK dla OpenCL
  • BSP
  • RPM (RPM Package Manager; pierwotnie Red Hat Package Manager)
  • Kompilator C dołączony do GCC
  • Polecenie Perl w wersji 5 lub nowszej

1. Programista jądra

Interfejs użytkownika SDK

Intel® FPGA SDK dla OpenCL™ zapewnia użytkownikom dwa tryby programowania. Dla konstruktorów kodu wszystkie narzędzia są zintegrowane z GUI, co pozwala im projektować, kompilować i debugować jądro. Z drugiej strony opcje wiersza poleceń są przeznaczone dla konwencjonalnych użytkowników.

  1. GUI/konstruktor kodu: Niedostępne w tej chwili
  2. Opcja wiersza polecenia:

Oto kilka przydatnych poleceń dla programistów jądra:

aoc kernel.cl -o bin/kernel.aocx –board=<board_name>

- Kompiluje kernel.cl plik źródłowy do pliku programowania FPGA (kernel.aocx) dla płyty określonej przez <board_name>; -o służy do określania nazwy i lokalizacji pliku wyjściowego

aoc kernel.cl -o bin/kernel.aocx –board=<board_name> -march=emulator

- Buduje plik aocx do emulacji, który może być użyty do przetestowania funkcjonalności jądra

aoc -list-boards

- Drukuje listę dostępnych tablic i wyjść

aoc -pomoc

- Drukuje pełną listę opcji poleceń aoc i informacje pomocy dla każdej z tych opcji

wersja aocl

- Pokazuje informacje o wersji zainstalowanej wersji Intel FPGA SDK dla OpenCL

instalacja aocl

- Instaluje sterowniki dla twojej płyty w bieżącym systemie hosta

diagnoza aocl

- Uruchamia program testowy dostawcy płyty dla płyty

Program aocl

- Konfiguruje nowy obraz FPGA na płycie

aocl flash

- Inicjuje FPGA z określoną konfiguracją uruchamiania

pomoc aocl

- Drukuje pełną listę opcji poleceń aocl i informacje pomocy dla każdej z tych opcji

Specyfikacja OpenCL

Kompatybilność z Khronos

Intel® FPGA SDK dla OpenCL™ jest oparty na opublikowanej specyfikacji Khronos i jest obsługiwany przez wielu dostawców, którzy są częścią grupy Khronos. Intel FPGA SDK dla OpenCL przeszedł proces testowania zgodności Khronos. Jest zgodny ze standardem OpenCL 1.0 i zapewnia zarówno nagłówki OpenCL 1.0, jak i OpenCL 2.0 przez Khronos Group.

Uwaga: Zestaw SDK obecnie nie obsługuje wszystkich interfejsów programowania aplikacji (API) OpenCL 2.0. Jeśli użyjesz nagłówków OpenCL 2.0 i wywołasz nieobsługiwany interfejs API, wywołanie zwróci kod błędu wskazujący, że interfejs API nie jest w pełni obsługiwany.

Zestaw Intel FPGA SDK for OpenCL host runtime jest zgodny z warstwą platformy OpenCL i interfejsem API z pewnymi wyjaśnieniami i wyjątkami, które można znaleźć w sekcji Statusy obsługi funkcji OpenCL w Podręczniku programowania Intel FPGA SDK for OpenCL.

Inne powiązane linki:

Rozszerzenia OpenCL

Kanały (I/O lub jądro)

Rozszerzenie kanału Intel® FPGA SDK dla OpenCL™ zapewnia mechanizm przekazywania danych do jąder i synchronizowania jąder z wysoką wydajnością i niskim opóźnieniem. Skorzystaj z poniższych łączy, aby uzyskać więcej informacji na temat implementowania, używania i emulacji kanałów:

Uwaga: Jeśli chcesz wykorzystać możliwości kanałów, ale masz możliwość uruchamiania programu jądra przy użyciu innych zestawów SDK, zaimplementuj potoki OpenCL. Aby uzyskać więcej informacji na temat rur, zobacz poniższą sekcję dotyczącą rur.

Dudy

Zestaw Intel FPGA SDK for OpenCL zapewnia wstępną obsługę funkcji potoków OpenCL, które są częścią specyfikacji OpenCL w wersji 2.0. Zapewniają mechanizm przekazywania danych do jąder i synchronizowania jąder z wysoką wydajnością i niskim opóźnieniem.

Zestaw Intel FPGA SDK do implementacji potoków OpenCL nie jest w pełni zgodny ze specyfikacją OpenCL w wersji 2.0. Celem implementacji potoków SDK jest dostarczenie rozwiązania, które działa bezproblemowo na innym urządzeniu zgodnym z OpenCL 2.0. Aby włączyć potoki dla produktów Intel FPGA, projekt musi spełniać określone wymagania.

Zobacz poniższe łącza, aby uzyskać więcej informacji na temat implementowania potoków OpenCL:

Emulator

W wieloetapowym przepływie projektowymmożna ocenić funkcjonalność jądra OpenCL™, wykonując je na jednym lub wielu urządzeniach emulacji na hoście x86-64 Windows* lub Linux*. Kompilacja projektu do emulacji zajmuje kilka sekund, aby wygenerować plik .aocx i pozwala na bardziej efektywne iterowanie projektu bez konieczności przechodzenia przez długie godziny wymagane do pełnej kompilacji.

W przypadku systemów Linux emulator oferuje symboliczną obsługę debugowania. Symboliczne debugowanie pozwala zlokalizować pochodzenie błędów funkcjonalnych w kodzie jądra.

Poniższy link zawiera przegląd przepływu projektowego dla jąder OpenCL i ilustruje różne etapy, dla których można emulować jądro.

Wieloetapowy zestaw Intel® FPGA SDK dla OpenCL Design Flow

Sekcja Emulacja i debugowanie jądra OpenCL z Podręcznika programowania zawiera więcej szczegółów na temat różnic między działaniem jądra na sprzęcie a emulacją.

Inne powiązane linki:

Optymalizacja

Dzięki zestawowi Intel® FPGA SDK dla technologii OpenCL™ Offline Compiler nie trzeba zmieniać jądra, aby optymalnie dopasować je do stałej architektury sprzętowej. Zamiast tego kompilator offline automatycznie dostosowuje architekturę sprzętową do wymagań jądra.

Ogólnie rzecz biorąc, należy najpierw zoptymalizować jądro, które jest ukierunkowane na pojedynczą jednostkę obliczeniową. Po zoptymalizowaniu tej jednostki obliczeniowej zwiększ wydajność, skalując sprzęt w celu wypełnienia pozostałej części układu FPGA. Ślad sprzętowy jądra koreluje z czasem potrzebnym na kompilację sprzętu. Dlatego im więcej optymalizacji można wykonać przy mniejszym rozmiarze (czyli pojedynczej jednostce obliczeniowej), tym więcej kompilacji sprzętowych można wykonać w określonym czasie.

Optymalizacja OpenCL dla układów Intel FPGA

Aby zoptymalizować realizację projektu i uzyskać maksymalną wydajność, zrozum teoretyczną maksymalną wydajność i zrozum, jakie są Twoje ograniczenia. Wykonaj następujące kroki:

  1. Zacznij od prostej znanej dobrej implementacji funkcjonalnej.
  2. Użyj emulatora, aby sprawdzić poprawność funkcji.
  3. Usuń lub zminimalizuj przeciągnięcia potoków, które są zgłaszane w raporcie optymalizacji.
  4. Zaplanuj dostęp do pamięci, aby uzyskać optymalną przepustowość pamięci.
  5. Użyj profilera, aby debugować problemy z wydajnością.

Profiler daje lepszy wgląd w wydajność systemu, co daje kierunek dalszej optymalizacji algorytmu wykorzystania pamięci.

Pamiętaj, że w przypadku układów FPGA im więcej zasobów można przydzielić, tym więcej rozwijania, zrównoleglania i wyższej wydajności można osiągnąć.

Pomocne raporty i zasoby do optymalizacji

Istnieje wiele raportów generowanych przez system dostępnych dla użytkowników. Raporty te dają wgląd w kod, wykorzystanie zasobów i wskazówki, na czym należy się skupić, aby jeszcze bardziej poprawić wydajność:

Optymalizacja pamięci

Zrozumienie systemów pamięci ma kluczowe znaczenie dla efektywnego wdrożenia aplikacji przy użyciu OpenCL.

Globalny interkonekt pamięci

W przeciwieństwie do procesora GPU, układ FPGA może zbudować dowolną niestandardową jednostkę magazynu obciążenia (LSU), która jest najbardziej optymalna dla danej aplikacji. W rezultacie możliwość pisania kodu OpenCL, który wybiera idealne typy LSU dla aplikacji, może znacznie poprawić wydajność projektu.

Więcej informacji można znaleźć w sekcji Global Memory Interconnect w zestawie Intel FPGA SDK, aby zapoznać się z przewodnikiem po najlepszych praktykach OpenCL.

Pamięć lokalna

Pamięć lokalna jest złożonym systemem. W przeciwieństwie do typowej architektury GPU, w której istnieją różne poziomy pamięci podręcznych, FPGA implementuje pamięć lokalną w dedykowanych blokach pamięci wewnątrz FPGA. Więcej informacji można znaleźć w sekcji Pamięć lokalna w podręczniku Intel FPGA SDK for OpenCL Best Practices Guide.

Istnieje wiele sposobów optymalizacji używanej pamięci w celu poprawy ogólnej wydajności. Więcej informacji na temat niektórych kluczowych technik można znaleźć w sekcji Przydzielanie wyrównanej pamięci w przewodniku Intel FPGA SDK for OpenCL Best Practices Guide.

Więcej informacji na temat strategii poprawy wydajności dostępu do pamięci można znaleźć w sekcji Strategie poprawy wydajności dostępu do pamięci w przewodniku Intel FPGA SDK for OpenCL Best Practices Guide.

Rurociągów

Zrozumienie potoków ma kluczowe znaczenie dla wykorzystania najlepszej wydajności implementacji. Efektywne wykorzystanie potoków bezpośrednio poprawia przepustowość. Więcej informacji można znaleźć w sekcji Potoki w podręczniku Intel FPGA SDK for OpenCL Best Practices Guide.

Więcej informacji na temat transferu danych można znaleźć w sekcji Przesyłanie danych za pośrednictwem zestawu Intel FPGA SDK dla kanałów OpenCL lub potoków OpenCL w przewodniku Intel FPGA SDK for OpenCL Best Practices Guide.

Stoisko, Obłożenie, Przepustowość

Profiluj jądro, aby zidentyfikować wąskie gardła wydajności. Więcej informacji na temat tego, w jaki sposób informacje profilowania pomagają zidentyfikować słabe zachowania pamięci lub kanałów, które prowadzą do niezadowalającej wydajności jądra, można znaleźć w sekcji Profilowanie jądra w celu zidentyfikowania wąskich gardeł wydajności w Przewodniku najlepszych praktyk zestawu Intel FPGA SDK for OpenCL.

Optymalizacja pętli

Niektóre techniki optymalizacji pętli to:

Aby uzyskać kilka wskazówek dotyczących usuwania zależności przenoszonych przez pętlę w różnych scenariuszach dla jądra pojedynczego elementu roboczego, zobacz sekcję Usuwanie zależności przenoszonych w pętli w przewodniku Intel FPGA SDK for OpenCL Best Practices Guide.

Więcej informacji na temat optymalizacji operacji zmiennoprzecinkowych można znaleźć w sekcji Optymalizowanie operacji zmiennoprzecinkowych w podręczniku Intel FPGA SDK for OpenCL Best Practices Guide.

Optymalizacja obszaru

Użycie obszaru jest ważnym czynnikiem projektowym, jeśli jądra OpenCL są wykonywalne na układach FPGA o różnych rozmiarach. Podczas projektowania aplikacji OpenCL firma Intel zaleca przestrzeganie określonych strategii projektowania w celu optymalizacji wykorzystania obszaru sprzętowego.

Optymalizacja wydajności jądra zazwyczaj wymaga dodatkowych zasobów FPGA. Natomiast optymalizacja obszaru często powoduje zmniejszenie wydajności. Podczas optymalizacji jądra firma Intel zaleca uruchamianie wielu wersji jądra na płycie FPGA w celu określenia strategii programowania jądra, która generuje najlepszy kompromis między rozmiarem a wydajnością.

Więcej informacji na temat strategii optymalizacji wykorzystania obszaru UKŁADU FPGA można znaleźć w sekcji Strategie optymalizacji użycia obszaru układu FPGA w przewodniku Intel FPGA SDK for OpenCL Best Practices Guide.

Przykłady projektów referencyjnych

Oto kilka przykładów projektów ilustrujących techniki optymalizacji:

Przykład projektu mnożenia macierzy

Ten przykład pokazuje optymalizację podstawowej operacji mnożenia macierzy przy użyciu kafelkowania pętli w celu wykorzystania ponownego wykorzystania danych nieodłącznie związanego z obliczeniami.

Ten przykład ilustruje:

- Optymalizacja zmiennoprzecinkowa o pojedynczej precyzji

- Buforowanie pamięci lokalnej

- Kompiluj optymalizacje (rozwiń pętlę, num_simd_work_items atrybut)

- Optymalizacje zmiennoprzecinkowe

- Wykonywanie wielu urządzeń

Przykład projektu filtru FIR w domenie czasowej

Ten przykład projektu implementuje test porównawczy filtru skończonej odpowiedzi impulsowej (FIR) w domenie czasowej z pakietu HPEC Challenge Benchmark Suite. Aby uzyskać więcej informacji, zobacz stronę Bank filtrów skończonych odpowiedzi impulsowych domeny czasowej.

Ta konstrukcja jest doskonałym przykładem tego, jak układy FPGA mogą zapewnić znacznie lepszą wydajność niż architektura GPU dla zmiennoprzecinkowych filtrów FIR.

Ten przykład ilustruje:

- Optymalizacja zmiennoprzecinkowa o pojedynczej precyzji

- Wydajna implementacja bufora okna przesuwnego 1D

- Metody optymalizacji jądra pojedynczego elementu roboczego

Przykład projektu skalowania wideo

Ten przykład projektu implementuje downscaler wideo, który pobiera wejściowe wideo 1080p i wyprowadza wideo 720p przy 110 klatkach na sekundę. W tym przykładzie użyto wielu jąder do wydajnego odczytu i zapisu w pamięci globalnej.

Ten przykład ilustruje

- Kanały jądra

- Wiele jednoczesnych jąder

- Kanały kernel-to-kernel

- Wzór projektowania okien przesuwnych

- Optymalizacja wzorców dostępu do pamięci

Przykład projektu przepływu optycznego

Ten przykład projektu jest implementacją OpenCL algorytmu przepływu optycznego Lucas Kanade. Pokazano, że gęsta, niewereracyjna i nieserpetyjna wersja o rozmiarze okna 52x52 działa z prędkością ponad 80 klatek na sekundę w zestawie Cyclone® V SoC Development Kit.

Ten przykład ilustruje:

- Pojedyncze jądro elementu roboczego

- Wzór projektowania okien przesuwnych

- Techniki redukcji wykorzystania zasobów

- Wyjście wizualne

Szkolenie

Szkolenia online dotyczące optymalizacji OpenCL z przykładami projektów są dostępne pod adresem:

Odwołania

Profilowania

W wieloetapowym przepływie projektu,jeśli szacowana wydajność jądra z emulacji jest akceptowalna, można wybrać zbieranie informacji o tym, jak projekt działa podczas wykonywania na FPGA.

Zestaw Intel® FPGA SDK dla OpenCL™ Offline Compiler można poinstruować liczniki wydajności w kodzie Verilog w pliku .aocx za pomocą opcji -profile. Podczas wykonywania zestaw Intel FPGA SDK for OpenCL Profiler mierzy i raportuje dane dotyczące wydajności, które są zbierane podczas wykonywania jądra OpenCL na układzie FPGA. Następnie można przejrzeć dane dotyczące wydajności w graficznym interfejsie użytkownika profilera.

Sekcja Profilowanie jądra OpenCL w Podręczniku programowania Intel FPGA SDK for OpenCL zawiera więcej informacji na temat profilowania jądra.

Jak analizować dane profilowania

Informacje profilowania pomagają zidentyfikować słabe zachowania pamięci lub kanałów, które prowadzą do niezadowalającej wydajności jądra. Sekcja Profile Your Kernel to Identify Performance Bottlenecks w Przewodniku po najlepszych praktykach zestawu Intel FPGA SDK for OpenCL zawiera bardziej szczegółowe informacje na temat interfejsu GUI dynamicznego profilera oraz sposobu interpretowania danych profilowania, takich jak przeciągnięcie, przepustowość, trafienia pamięci podręcznej i tak dalej. Zawiera również analizę Profilera kilku przykładowych scenariuszy projektowych OpenCL.

2. Programista kodu hosta

Biblioteki hosta środowiska wykonawczego

Intel® FPGA SDK for OpenCL™ zapewnia kompilator i narzędzia do tworzenia i uruchamiania aplikacji OpenCL przeznaczonych dla produktów Intel FPGA.

Jeśli potrzebujesz tylko Intel FPGA SDK dla funkcji wdrażania jądra OpenCL, pobierz i zainstaluj Intel FPGA Runtime Environment (RTE) dla OpenCL.

RTE jest podzbiorem Intel FPGA SDK dla OpenCL. W przeciwieństwie do zestawu SDK, który zapewnia środowisko umożliwiające opracowywanie i wdrażanie programów jądra OpenCL, RTE zapewnia narzędzia i składniki wykonawcze, które umożliwiają budowanie i wykonywanie programu hosta oraz wykonywanie wstępnie skompilowanych programów jądra OpenCL na docelowych płytach akceleratora.

Nie instaluj zestawu SDK i RTE w tym samym systemie hosta. Zestaw SDK zawiera już RTE.

Narzędzia i biblioteki wykonawcze hosta

RTE dla OpenCL zapewnia narzędzia, biblioteki wykonawcze hosta, sterowniki oraz biblioteki i pliki specyficzne dla RTE.

  • Narzędzie RTE zawiera polecenia, które można wywoływać w celu wykonywania zadań wysokiego poziomu. Narzędzia RTE są podzbiorem zestawu Intel FPGA SDK dla narzędzi OpenCL
  • Środowisko wykonawcze hosta udostępnia interfejs API platformy hosta OpenCL i interfejs API środowiska wykonawczego dla aplikacji hosta OpenCL

Środowisko wykonawcze hosta składa się z następujących bibliotek:

  • Biblioteki połączone statycznie udostępniają interfejsy API hosta OpenCL, abstrakcje sprzętowe i biblioteki pomocowe
  • Biblioteki dołączane dynamicznie (DLL) udostępniają abstrakcje sprzętowe i biblioteki pomocnicze

Więcej informacji na temat narzędzi i bibliotek środowiska uruchomieniowego hosta można znaleźć w sekcji Zawartość układu Intel FPGA RTE for OpenCL w podręczniku Intel FPGA RTE for OpenCL Wprowadzenie.

Przesyłanie strumieniowe danych (kanał hosta)

Możesz teraz znacznie zmniejszyć opóźnienia systemowe swoich systemów za pomocą kanałów hosta, które umożliwiają strumieniowe przesyłanie danych z hosta bezpośrednio do jądra FPGA przez interfejs PCIe* z pominięciem kontrolera pamięci. Jądro FPGA może natychmiast rozpocząć przetwarzanie danych i nie musi czekać na zakończenie przesyłania danych. Kanały hosta są obsługiwane w interfejsach programowania aplikacji (API) środowiska uruchomieniowego OpenCL i obejmują obsługę emulacji.

Więcej informacji na temat kanałów hosta i obsługi emulacji można znaleźć w sekcji Emulowanie kanałów we/wy w podręczniku Intel® FPGA SDK for OpenCL™ Programming Guide.

Profilowanie

Profilowanie pozwala dowiedzieć się, gdzie program spędził swój czas i jakie są różne funkcje, które są nazywane. Te informacje pokazują, która część programu działa wolniej niż oczekiwano, co może wymagać przepisania w celu szybszego wykonania programu. Może również powiedzieć, które funkcje są wywoływane częściej lub rzadziej niż się spodziewałeś.

gprof

gprof to narzędzie open source dostępne w systemach operacyjnych Linux* do profilowania kodu źródłowego. Działa na próbkowaniu opartym na czasie. W odstępach czasu licznik programu jest przesłuchiwany, aby zdecydować, w którym momencie kodu nadeszła egzekucja.

Aby użyć gprof, przekompiluj kod źródłowy przy użyciu flagi profilowania kompilatora -pg

Uruchom pliki wykonywalne, aby wygenerować pliki zawierające informacje o profilowaniu:

Generowany jest konkretny plik o nazwie "gmon.out" zawierający wszystkie informacje wymagane przez narzędzie gprof do wytworzenia czytelnych dla człowieka danych profilowania. Teraz użyj narzędzia gprof w następujący sposób:

$ gprof kod źródłowy gmon.out > profile_data.txt

profile_data.txt to plik zawierający informacje, których narzędzie gprof używa do tworzenia czytelnych dla człowieka danych profilowania. Zawiera dwie części: płaski profil i wykres wywołań.

Profil płaski pokazuje, ile czasu program spędził w każdej funkcji i ile razy ta funkcja została wywołana.

Wykres wywołań pokazuje, dla każdej funkcji, które funkcje ją nazywają, jakie inne funkcje nazywa i ile razy. Istnieje również oszacowanie, ile czasu poświęcono w podprogramach każdej funkcji.

Więcej informacji na temat wykorzystania gprof do profilowania jest dostępnych na stronie GNU.

Intel® VTune™ Wzmacniacz

Wzmacniacz Intel® VTune™ Używany do profilowania pomaga przyspieszyć i zoptymalizować wykonywanie kodu na platformach wbudowanych Linux, Android* lub Windows*, zapewniając następujące typy analiz:

  • Analiza wydajności: Znajdowanie wąskich gardeł w kodzie szeregowym i równoległym, analizowanie wyborów algorytmów i użycia silnika GPU oraz zrozumienie, gdzie i w jaki sposób aplikacja może korzystać z dostępnych zasobów sprzętowych
  • Analiza Intel Energy Profiler: Analizuj zdarzenia energetyczne i identyfikuj te, które marnują energię

Aby uzyskać więcej informacji na temat wzmacniacza Intel V-tune, odwiedź witrynę sieci Web Getting Started with Intel VTune Amplifier 2018 for Linux OS (Pierwsze kroki z Intel VTune Amplifier 2018 for Linux OS).

Wielowątkowość

OpenCL™ host potokowy wielowątkowość zapewnia ramy do osiągnięcia wysokiej przepustowości dla algorytmów, w których duża liczba danych wejściowych musi zostać przetworzona, a proces dla każdych danych musi być wykonywany w kolejności sekwencyjnej. Jedną z najlepszych aplikacji tego frameworka są heterogeniczne platformy, na których sprzęt lub platforma o wysokiej przepustowości jest używana do przyspieszenia najbardziej czasochłonnej części aplikacji. Pozostałe części algorytmu muszą być uruchamiane w kolejności sekwencyjnej na innych platformach, takich jak procesory, aby przygotować dane wejściowe do przyspieszonego zadania lub wykorzystać dane wyjściowe tego zadania do przygotowania końcowego wyniku. W tym scenariuszu, chociaż wydajność algorytmu jest częściowo przyspieszona, całkowita przepustowość systemu jest znacznie niższa ze względu na sekwencyjny charakter oryginalnego algorytmu.

W tej notatce an 831: Intel FPGA SDK for OpenCL Host Pipelined Multithread Application Note zaproponowano nową strukturę potokową do projektowania o wysokiej przepustowości. Ta struktura jest optymalna do przetwarzania dużych danych wejściowych za pomocą algorytmów, w których zależność danych wymusza sekwencyjne wykonywanie wszystkich etapów lub zadań algorytmu.

Initiailizacja FPGA z hosta

Układy FPGA są często stosowane w przestrzeni akceleracji. OpenCL ma określony sposób użycia przez procesor do odciążenia zadania do FPGA. Załączony poniżej plik zawiera typowe kroki inicjalizacji potrzebne do uruchomienia jądra FPGA przez kod hosta. Pobierz plik zawierający kroki inicjowania tutaj.

Funkcję init() można wywołać z funkcji main() w celu zainicjowania układu FPGA. Kod najpierw znajduje urządzenie, na którym będzie działać jądro, a następnie programuje je za pomocą aocx dostarczonego w tym samym katalogu, co host execuatable. Po krokach inicjalizacji w kodzie użytkownik musi ustawić argumenty jądra zgodnie ze swoimi potrzebami projektowymi.

Istnieje również funkcja cleanup(), która uwalnia zasoby po wykonaniu jądra.

3. Debugowanie

Emulacja

Do sprawdzenia funkcjonalności jądra można użyć zestawu Intel® FPGA SDK dla OpenCL™ Emulator. Użytkownik może również debugować funkcje jądra OpenCL jako część aplikacji hosta w systemach Linux*. Funkcja debugowania dostarczona z zestawem Intel FPGA SDK dla emulatora OpenCL pozwala to zrobić.

Aby uzyskać więcej informacji, zapoznaj się z poniższymi sekcjami w Podręczniku programowania Intel FPGA SDK for OpenCL:

Profilowania

Więcej informacji na temat profilowania można znaleźć w następujących sekcjach w Podręczniku programowania Intel® FPGA SDK for OpenCL™:

Debugowanie środowiska wykonawczego

Istnieją pewne zmienne środowiskowe, które można ustawić, aby uzyskać więcej informacji o debugowaniu podczas uruchamiania aplikacji hosta. Są to Intel® FPGA SDK dla OpenCL™ określone zmienne środowiskowe, które mogą pomóc w diagnozowaniu problemów z niestandardowymi projektami platform. W poniższej tabeli wymieniono wszystkie te zmienne środowiskowe oraz opisano je szczegółowo.

Zmienna środowiskowa

Opis

ACL_HAL_DEBUG

Ustaw tę zmienną na wartość od 1 do 5, aby zwiększyć wydajność debugowania z warstwy abstrakcji sprzętowej (HAL), która łączy się bezpośrednio z warstwą MMD.

ACL_PCIE_DEBUG

Ustaw tę zmienną na wartość od 1 do 10 000, aby zwiększyć wydajność debugowania z MMD. To ustawienie zmiennej jest przydatne do potwierdzenia, że rejestr identyfikatora wersji został poprawnie odczytany, a rdzenie IP UniPHY są kalibrowane.

ACL_PCIE_JTAG_CABLE

Ustaw tę zmienną, aby zastąpić domyślny argument quartus_pgm, który określa numer. Wartość domyślna to 1. Jeśli istnieje wiele Intel® FPGA Download, można określić konkretny, ustawiając tę zmienną.

ACL_PCIE_JTAG_DEVICE_INDEX

Ustaw tę zmienną, aby zastąpić domyślny argument quartus_pgm, który określa indeks urządzeń FPGA. Domyślnie ta zmienna ma wartość 1. Jeśli układ FPGA nie jest pierwszym urządzeniem w łańcuchu JTAG, można dostosować wartość.

ACL_PCIE_USE_JTAG_PROGRAMMING

Ustaw tę zmienną, aby wymusić na MMD przeprogramowanie układu FPGA przy użyciu JTAG zamiast częściowej rekonfiguracji.

ACL_PCIE_DMA_USE_MSI

Ustaw tę zmienną, jeśli chcesz używać MSI do bezpośredniego dostępu do pamięci (DMA) w systemie operacyjnym Windows*.

Narzędzie diagnostyczne dla Intel® FPGA SDK dla OpenCL™

Narzędzie diagnostyczne dla Intel FPGA SDK for OpenCL pomaga zdiagnozować i rozwiązać różne problemy z instalacją/konfiguracją, problemy ze sprzętem i oprogramowaniem, które pojawiają się podczas pracy z Intel FPGA SDK dla OpenCL. Narzędzie wykonuje testy instalacyjne, testy urządzeń i testy linków. Aby uzyskać więcej informacji na temat narzędzia, zapoznaj się z tą prezentacją. Aby skorzystać z narzędzia, pobierz stąd.

Inne techniki debugowania

Ze względu na pętlę w programie hosta użytkownicy mogą doświadczyć spowolnienia systemu OpenCL™ podczas jego uruchamiania. Aby dowiedzieć się więcej na temat takiego scenariusza, zapoznaj się z sekcją Debugowanie systemu OpenCL, który stopniowo spowalnia w Przewodniku programowania Intel® FPGA dla programowania OpenCL

Intel Code Builder for OpenCL to narzędzie do tworzenia oprogramowania dostępne jako część pakietu Intel FPGA SDK dla OpenCL. Zawiera zestaw wtyczek Microsoft* Visual Studio i Eclipse, które umożliwiają tworzenie, tworzenie, debugowanie i analizowanie aplikacji Windows* i Linux* przyspieszonych za pomocą OpenCL. Więcej informacji można znaleźć w sekcji Developing/Debugging OpenCL Applications Using Intel Code Builder for OpenCL (Tworzenie/debugowanie aplikacji OpenCL przy użyciu programu Intel Code Builder for OpenCL) w Podręczniku programowania Intel FPGA SDK for OpenCL.

Rozwiązanie bazy danych wiedzy

Intel® Arria® 10 Urządzenia

Intel® Stratix® 10 Urządzenia

KDB

Tytuł

Błąd: Potwierdzenie błędu w /XXX/llvm/lib/Transforms/FPGATransforms/TransformPrintf.cpp(715)

Błąd: Nieznane urządzenie część 1SG280LU2F50E2VG

Błąd segmentacji w acl_event_is_valid () przy użyciu clEnqueueFIllBufer()

** Błąd: ./.. /.. /ip/kernel_system/kernel_system_sys_description_rom/acl_rom_module_10/sim/acl_rom_module.v(77): Moduł 'acl_reset_handler'apos; nie jest zdefiniowany.

Dostępny MLAB w raporcie OpenCL to 0

Czy mogę używać istniejących skryptów syntezy ASIC Synopsys Design Compiler (DC) do syntezy FPGA w oprogramowaniu DC FPGA?

Czy Intel® Stratix® 10 GX FPGA Development Kit obsługuje PCIe gen3x16 dla OpenCL?

Błąd kompilatora: Nierozpoznane wywołanie funkcji: acl.external.iowr

Błąd kompilatora: Argument w 'stała'; przestrzeni adresowej nie można przechowywać w heterogenicznych pamięciach globalnych.

Kompilowanie jądra OpenCL przy użyciu opcji polecenia --profile i -g0 Intel FPGA SDK for OpenCL Offline Compiler nie usuwa kodu źródłowego z pliku .aocx

Czy procedura drukowania w zestawie SDK (Embedded Processor Software Development Kit) Nios™ obsługuje zmiennoprzecinkowe typy danych?

Emulacja projektu OpenCL może zużywać wszystkie zasoby procesora i powodować błąd krytyczny

Błąd (13224): Błąd Verilog HDL lub VHDL przy . v: nie można ponownie zadeklarować p_avm_printf_addrhello_world_enable portu ansi

Błąd (16045): Wystąpienie "ccip_std_afu|bsp_logic_inst|board_inst" tworzy instancje niezdefiniowanej encji "board'quot; Plik

Błąd (16045): Wystąpienie "ccip_std_afu|bsp_logic_inst|board_inst" tworzy instancje niezdefiniowanej encji "board'quot; Plik: /home/anchen/Downloads/dla/build/dla/build/bsp_logic.sv Linia: 133

Błąd (16045): Wystąpienie "ccip_std_afu|bsp_logic_inst|board_inst" tworzy instancje niezdefiniowanej encji "board'quot; Plik: /home/anchen/Downloads/dla/build/dla/build/bsp_logic.sv Linia: 133

Błąd (18212): Nie można załadować ostatecznej migawki dla partycji "root_partition"

Błąd (18590): Zaimportowana lista sieci zawiera ustawienia, które nie są obsługiwane przez bieżącą wersję oprogramowania.

Błąd (213009): Nazwa pliku "output_files/afu_import.green_region.pmsf" nie istnieje lub nie można go odczytać

Błąd (297008): Nie można utworzyć katalogu bazy danych dla projektu w katalogu projektu

Błąd (XXXXX): Nie można wygenerować pliku atom netlist, ponieważ rodzina Stratix 10 nie jest zainstalowana

Błąd (XXXXX): Nie można wygenerować pliku atom netlist, ponieważ rodzina Stratix 10 nie jest zainstalowana

Komunikat o błędzie : " Błąd: Optymalizator FAILED -dbg-info-enabled --grif --soft-elementary-math=false --fas=false --wiicm-disable=true "kernel_top.1.bc" -o "kernel_top.kwgid.bc"

Błąd: Nie można znaleźć platformy Intel(R) FPGA OpenCL

Błąd: " X Błąd nieudanego żądania: BadValue"

Błąd: alt_pr.avmm_slave (0x0.. 0x3f) znajduje się poza zakresem adresów wzorca (0x0. 0x7)

Błąd: aoc: Nie można odnalezić narzędzia Intel(R) Kernel Builder dla kompilatora OpenCL(TM) (ioc64)

error: aocl_opt: Zbyt wiele określonych argumentów pozycyjnych. Może określić co najwyżej 1 argument pozycyjny

Błąd: Potwierdzenie błędu w /XXX/llvm/lib/Analysis/FPGAAnalysis/MemoryAccessAnalysis.cpp(1537)

Błąd: Potwierdzanie niepowodzenia w ACLMemUtils.cpp(510)

Błąd: board.pipe_stage_host_ctrl.m0: alt_pr.avmm_slave nie może być w 0xcfb0 (0xcf80 lub 0xcfc0 są dopuszczalne)

Błąd: board.pipe_stage_host_ctrl.m0: version_id.s (0xcfc0.. 0xcfc3) nakłada się na alt_pr.avmm_slave (0xcfb0.. 0xcfef)

Błąd: nie można znaleźć board_env.xml w lokalizacji BSP

BŁĄD: CL_INVALID_KERNEL_NAME

Błąd: Nie można znaleźć raportu dopasowania afu_opencl_kernel.fit.rpt w katalogu compile

Błąd: wyliczenie urządzenia nie powiodło się

błąd: funkcja 'read_channel_altera'apos; nie jest obsługiwany przez zestaw Intel(R) FPGA SDK dla OpenCL(TM) i nie podano definicji użytkownika

błąd: funkcja 'write_channel_altera'apos; nie jest obsługiwany przez zestaw Intel(R) FPGA SDK dla OpenCL(TM) i nie podano definicji użytkownika

Błąd: ip-generate FAILED

Błąd: kernel_mem_mm_bridge_0: deviceFamily " Arria 10'; jest poza zasięgiem: " Cyclone 10 GX", " Brak", " Nieznany";

Błąd: kernel_mem_mm_bridge_0: deviceFamily " Arria 10'; jest poza zasięgiem: " Cyclone 10 GX", " Brak", " Nieznany";

Błąd: Wywołanie zwrotne powiadomień OpenCL: Globalny rozmiar pracy w jednym wymiarze przekracza limity urządzeń Nie udało się uruchomić jądra

BŁĄD: nie można uruchomić narzędzia pakujacza

błąd: redefinicja "filter_coeffs"; stała int filter_coeffs[2 * 2 * 2 * FILTER_TAPS] = {

Błąd: Integrator systemów FAILED

BŁĄD: Nie można znaleźć altera OpenCL Platform

BŁĄD: Nie można znaleźć platformy Intel(R) FPGA OpenCL podczas emulacji

error: Nieoczekiwane użycie funkcji biblioteki HDL (prawdopodobnie z powodu przyjęcia adresu funkcji)!

error: nieznany argument: '--fmax=300'apos;

Błąd: Nieznane urządzenie część 10AX115S2F45I1SG

Błąd: Nieznane urządzenie część 10AX115S2F45I1SG

Błąd: Nieznane urządzenie część 1SG280LU2F50E2VG

BŁĄD: NIEROZPOZNANY KOD BŁĘDU (-1001), Lokalizacja: .. /common/src/AOCLUtils/opencl.cpp:297, Zapytanie o liczbę platform nie powiodło się

Błąd: WDC_PCiScanDevices nie powiodło się.

export ACL_QSH_COMPILE_CMD="quartus_sh --flow recompile top -c flat" nie działa w 17.0

Zewnętrzne kanały we/wy niedostępne na platformach niestandardowych przeniesionych z sieciowej platformy referencyjnej Altera Stratix V

W przypadku projektów MAX 10 oprogramowanie Quartus II " Błąd (125095): Nazwa części... nieprawidłowy"; oraz " Błąd (281000): Nazwa części... nielegalne"; Błędy

Transfery pamięci z hosta na urządzenie przekraczające 8 KB mogą spowodować błąd krytyczny w wersji systemu Windows platformy referencyjnej Altera Arria 10 GX FPGA Development Kit

Jak można zaprogramować nieulotną lampę błyskową, jeśli Intel® SDK dla OpenCL™ polecenie "aocl program" powoduje ponowne uruchomienie komputera?

Jak skompilować jądro OpenCL przy użyciu najnowszej wersji zestawu Intel® SDK for OpenCL™ z pakietem BSP (Board Support Package) z poprzedniej wersji?

Jak korzystać z funkcji OpenCL clReleaseEvent, aby uniknąć wycieków pamięci?

Jak określić, ile płyt FPGA zawiera system?

Jak obsługiwać bibliotekę OpenCL AVALON_MEM elementem?

Zainstalowanie niepodpisanego sterownika może spowodować błąd w altera SDK dla OpenCL działającego w systemie Windows 8.1

Ograniczenia nazewnictwa jądra Intel FPGA for OpenCL

Intel FPGA SDK dla OpenCL w wersji 17.0 nie obsługuje systemów operacyjnych Ubuntu

Wewnętrzny błąd kompilatora: Brakujące informacje o cyklu uruchamiania dla węzła, którego dotyczy zapytanie: sync_out

Błąd wewnętrzny: Podsystem: QHD, Plik: /quartus/comp/qhd/qhd_database_model_utils.cpp

Błąd wewnętrzny: Podsystem: QSYM, Plik: /quartus/ccl/qsym/qsym_namespace.cpp, Linia: 264 Tabela ciągów dla 43 to 5844 (ID: 721426136, Symbol: 5848)

Błąd wewnętrzny: Podsystem: QSYM, Plik: /quartus/ccl/qsym/qsym_namespace.cpp, Linia: 264 Tabela ciągów dla 43 to 5844 (ID: 721426136, Symbol: 5848)

Błąd wewnętrzny: Podsystem: VPR20KMAIN, Plik: /quartus/fitter/vpr20k/altera_arch_common/altera_arch_re_network_tools.cpp, Linia: 883

jtagconfig:Brak dostępnego sprzętu JTAG

Wykonywanie jądra i transfer danych w pamięci nie mogą działać jednocześnie, nawet jeśli nie ma zależności od zdarzeń w kodzie hosta

Błąd linkera: niezdefiniowane odwołanie do nios_output_memory_access'apos;, at config/nios/nios.c:2540

Opcje kompilatora Nios II GCC: -march, -mbmx, -mno-bmx, -mcdx, -mno-cdx

Brak oczekiwanego wyjścia podczas pracy "aocl env"; na emulacji pliku aocx

Otwórz automatyczne uruchamianie jądra CL dla trybu emulatora

Błąd OpenCL: Nie można spełnić ograniczeń routingu twardego dla sygnału

Błąd OpenCL: ip-generate FAILED

Przeglądarka map technologicznych (Post-Mapping) nie ładuje schematu listy sieci projektowej podczas analizy i Synteza jest zakończona

Nie można ponownie uruchomić jądra autouruchamiania w emulatorze w wersji 17.0

Nie można odblokować /intelFPGA_pro/17.1.1/hld/installed_packages

Użycie zestawu Altera SDK dla OpenCL w wersji 16.0.1 do skompilowania projektu OpenCL, który jest przeznaczony dla wersji 16.0 Arria 10 Reference lub platformy niestandardowej, powoduje błąd krytyczny

Ostrzeżenie: Proszę użyć -board= zamiast --board

Ostrzeżenie: Użyj -profile zamiast --profile

Ostrzeżenie: Użyj -report zamiast --report

OSTRZEŻENIE: Wybrany plik nie ma tej samej ścieżki, co ścieżka pliku zapisana w pliku .aocx! Może spowodować puste dane

ostrzeżenie: xx.cl:x:x: pętla nierozwinięta: optymalizator nie był w stanie wykonać żądanej transformacji; przekształcenie może być wyłączone lub określone jako część nieobsługiwanego zamówienia transformacji

Co oznacza "kontener" w raporcie.html kontenerze dla Intel® FPGA OpenCL™ SDK?

Dlaczego podczas uruchamiania nios-debug lub innego narzędzia, które używa połączenia MDI/OCI za pośrednictwem metody parallel-port direct (znanej również jako parport2k), widzę okno komunikatu Driver Load Failed (Niepowodzenie ładowania sterownika), które uniemożliwia dalsze działania związane z debugowaniem JTAG?

Gdzie znajdują się pakiety obsługi płyt OpenCL™ (BSP) dla zestawów programistycznych?

Gdzie zainstalować plik FCD (FPGA Client Driver) *.fcd przy użyciu narzędzi OpenCL SDK w wersji 17.0?

Jakiej funkcji należy użyć podczas łączenia sterownika FCD (FPGA Client) z aplikacją hosta?

Dlaczego definicje zestawu SDK Altera OpenCL są num_vector_lanes i nie num_copies w dokumentacji 13.0sp1?

Dlaczego mam słabą wydajność podczas kompilowania przykładowego projektu dodawania wektorów za pomocą zestawu Intel® FPGA SDK dla OpenCL™?

Dlaczego podczas kompilowania architektur w pakiecie Intel® FPGA Deep Learning Acceleration Suite występuje błąd (114016): Brak pamięci w module quartus_syn?

Dlaczego podczas kompilowania tego samego projektu OpenCL™ z różnymi wersjami Intel® FPGA OpenCL™ SDK otrzymują różne dostępne zasoby?

Dlaczego pojawia się błąd "CL_INVALID_ARG_SIZE" podczas używania typu long long jako argumentu jądra OpenCL™ w kodzie hosta?

Dlaczego otrzymuję błąd "Brak dostępnego sprzętu JTAG" podczas uruchamiania jtagconfig w systemie Linux CentOS lub Ubuntu?

Dlaczego pojawia się błąd "Nie można określić środowiska wykonawczego" podczas uruchamiania polecenia "aocl version" w zestawie Intel SDK for OpenCL?

Dodatkowe zasoby

Oto kilka dodatkowych linków od Intel FPGA Community dotyczących konkretnych problemów związanych z projektowaniem i uruchamianiem etapów:

4. Przykłady projektów

Przykłady projektów OpenCL

Istnieje wiele przykładów projektowych dostępnych do opisania różnych aplikacji w OpenCL™. Użytkownicy mogą kompilować i wykonywać te projekty na hoście z płytą FPGA, która obsługuje Intel® FPGA SDK dla OpenCL.

Więcej przykładów projektów OpenCL można znaleźć w witrynie OpenCL Developer Zone.

Filmy OpenCL

Tytuł

Opis

Jak uruchomić Hello World i (Inne programy) z OpenCL™ na Cyclone® V SoC przy użyciu systemu Windows* Część 1

W tym filmie opisano procedurę uruchamiania dwóch aplikacji, OpenCL™ HelloWorld i OpenCL fast Fourier transform (FFT) na Cyclone® V SoC przy użyciu komputera z systemem Windows*.

Jak uruchomić Hello World i (inne programy) z OpenCL na Cyclone V SoC za pomocą Windows Part 2

W tym filmie opisano procedurę uruchamiania dwóch aplikacji, OpenCL HelloWorld i OpenCL FFT na SoC Cyclone V przy użyciu komputera z systemem Windows.

Jak uruchomić Hello World i (inne programy) z OpenCL na Cyclone V SoC za pomocą Windows Part 3

W tym filmie opisano procedurę uruchamiania dwóch aplikacji, OpenCL HelloWorld i OpenCL FFT na SoC Cyclone V przy użyciu komputera z systemem Windows.

Jak uruchomić Hello World i (inne programy) z OpenCL na Cyclone V SoC za pomocą Windows Part 4

W tym filmie opisano procedurę uruchamiania dwóch aplikacji, OpenCL HelloWorld i OpenCL FFT na SoC Cyclone V przy użyciu komputera z systemem Windows.

Jak uruchomić Hello World i (inne programy) z OpenCL na Cyclone V SoC za pomocą Windows Part 5

W tym filmie opisano procedurę uruchamiania dwóch aplikacji, OpenCL HelloWorld i OpenCL FFT na SoC Cyclone V przy użyciu komputera z systemem Windows.

Jak pakować niestandardowe moduły /projekty Verilog jako biblioteki OpenCL

W filmie omówiono, dlaczego klienci mogą potencjalnie korzystać z tej funkcji, aby mieć niestandardowe bloki przetwarzania (RTL) w kodzie jądra OpenCL. Film wyjaśnia przykład projektu, taki jak pliki makefiles i pliki konfiguracyjne, oraz wyjaśnia przepływ kompilacji. Film pokazuje również demo przykładu projektu.

OpenCL na Altera® SoC FPGA (Linux* Host) - Część 1 - Narzędzia Pobierz i skonfiguruj

Ten film pokazuje, jak pobrać, zainstalować i skonfigurować narzędzia wymagane do tworzenia jąder OpenCL i kodu hosta ukierunkowanego na układy FPGA Altera® SoC.

OpenCL na Altera SoC FPGA (Linux Host) - Część 2 - Uruchamianie przykładu dodawania wektora za pomocą emulatora

W tym klipie wideo pokazano, jak pobrać i skompilować przykładową aplikację OpenCL ukierunkowaną na emulator wbudowany w listę OpenCL.

OpenCL na Altera SoC FPGA (Linux Host) - Część 3 - Kompilacja jądra i kodu hosta dla SoC FPGA

Ten film pokazuje, jak skompilować jądro OpenCL i kod hosta ukierunkowany na FPGA i procesor Cyclone V SoC FPGA.

OpenCL na Altera SoC FPGA (Linux Host) - Część 4 - Konfiguracja środowiska wykonawczego

Ten film pokazuje, jak skonfigurować płytkę SoC Cyclone V, aby uruchomić przykład OpenCL i wykonać kod hosta i jądro na płycie.

Materiały zawarte na tej stronie są tłumaczeniem z języka angielskiego, wykonanym częściowo przez człowieka, a częściowo automatycznie. Materiały te są udostępnione dla Twojej wygody i należy je traktować jedynie jako ogólne źródło informacji. Nie ma jednak gwarancji, że są one kompletne bądź poprawne. Jeśli istnieje jakakolwiek rozbieżność między wersją angielską tej strony a jej tłumaczeniem, wersja angielska jest wersją obowiązującą i ma rozstrzygające znaczenie. Wyświetl anglojęzyczną wersję tej strony.