Koncern Khronos, odpowiedzialny za opracowanie specyfikacji rodziny OpenGL, Vulkan i OpenCL, o publikacji ostatecznych specyfikacji , określających API i rozszerzenia języka C do organizacji międzyplatformowych obliczeń równoległych z wykorzystaniem wielordzeniowych CPU, GPU, FPGA, DSP oraz innych wyspecjalizowanych układów scalonych, od tych używanych w superkomputerach i serwerach chmurowych, po układy, które można spotkać w urządzeniach mobilnych i technologii wbudowanej. Standard OpenCL jest całkowicie otwarty i nie wymaga opłat licencyjnych.
Jednocześnie otwarty OpenCL SDK z narzędziami, przykładami, dokumentacją, plikami nagłówkowymi, wiązaniami dla C++ oraz bibliotekami C do tworzenia aplikacji zgodnych z OpenCL 3.0. Ponadto wstępna implementacja OpenCL 3.0 oparta na kompilatorze Clang, która znajduje się w fazie przeglądania poprawek do włączenia do głównego składu LLVM. W pracach nad standardem uczestniczyły takie firmy jak IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments i Toshiba.
Najbardziej zauważalne :
- API OpenCL 3.0 obejmuje teraz wszystkie wersje OpenCL (1.2, 2.x), bez dostarczania oddzielnych specyfikacji dla każdej wersji. OpenCL 3.0 przewiduje możliwość rozszerzenia podstawowej funkcjonalności poprzez integrację dodatkowych specyfikacji, które będą nakładane w formie opcji, nie blokując monolitycznego charakteru OpenCL 1.2/2.X.
- Obowiązkowa została tylko funkcjonalność odpowiadająca OpenCL 1.2, a wszystkie możliwości oferowane w specyfikacjach OpenCL 2.x zostały uznane za opcjonalne. Takie podejście uprości tworzenie wyspecjalizowanych implementacji zgodnych z OpenCL 3.0 oraz rozszerzy zakres urządzeń, na których może być używane OpenCL 3.0. Na przykład, producenci mogą wdrożyć wsparcie dla OpenCL 3.0, nie wprowadzając oddzielnych możliwości OpenCL 2.x. Aby uzyskać dostęp do opcjonalnych możliwości języka, w OpenCL 3.0 dodano system zapytań weryfikacyjnych, który pozwala ocenić wsparcie dla poszczególnych elementów API, a także specjalne makra.
- Ujednolicenie z wcześniej wydanymi specyfikacjami ułatwia portowanie aplikacji do OpenCL 3.0. Aplikacje OpenCL 1.2 będą mogły działać na urządzeniach obsługujących OpenCL 3.0 bez wprowadzania zmian. Aplikacje OpenCL 2.x także nie będą wymagały zmiany kodu, ale jeśli środowisko OpenCL 3.0 zapewnia niezbędną funkcjonalność (aby zapewnić przenośność w przyszłych aplikacjach OpenCL 2.x, zaleca się dodanie zapytań kontrolnych do oceny wsparcia dla używanych możliwości OpenCL 2.x). Deweloperzy sterowników z implementacjami OpenCL będą mogli łatwo zaktualizować swoje produkty do OpenCL 3.0, dodając jedynie obsługę zapytań o dostępność tych lub innych wywołań API, a z czasem stopniowo zwiększać funkcjonalność.
- Specyfikacja OpenCL 3.0 została dopasowana do środowiska, rozszerzeń i specyfikacji uniwersalnego pośredniego przedstawienia SPIR-V, które również jest używane w API Vulkan. Wsparcie dla specyfikacji SPIR-V 1.3 zostało włączone do głównej wersji OpenCL 3.0 jako opcjonalna funkcja. Poprzez wykorzystanie pośredniego przedstawienia dla rdzeni obliczeniowych dodano wsparcie dla operacji z podgrupami.
- Dodano wsparcie dla rozszerzenia do wykonywania asynchronicznych operacji DMA (Asynchronous DMA), wspieranego w chipach podobnych do DSP z bezpośrednim dostępem do pamięci. Asynchronous DMA pozwala na wykorzystanie transakcji DMA do przesyłania danych między pamięcią globalną a lokalną w trybie asynchronicznym, równolegle z przeprowadzanymi obliczeniami lub innymi operacjami przesyłania danych.
- Specyfikacja rozszerzeń programowania równoległego dla języka C została zaktualizowana do , a rozwój rozszerzeń językowych OpenCL dla C++ został zakończony na rzecz projektu „C++ for OpenCL”. C++ for OpenCL to kompilator oparty na Clang/LLVM, który rdzenie do C++ i OpenCL C w pośrednie przedstawienie SPIR-V lub kod maszynowy niskiego poziomu. Dzięki transpilacji do SPIR-V zorganizowano również budowę aplikacji C++ wykorzystujących bibliotekę szablonów SYCL, która upraszcza tworzenie aplikacji równoległych.
- Dla transpilacji OpenCL przez API Vulkan zaproponowano kompilator , który przekształca rdzenie OpenCL do przedstawienia Vulkan SPIR-V, oraz warstwę , aby zapewnić działanie API OpenCL na Vulkanie.
Źródło: opennet.ru
