Koncern Khronos, odpowiedzialny za opracowanie specyfikacji rodziny OpenGL, Vulkan i OpenCL, ogłosił zakończenie opracowywania specyfikacji OpenCL 3.0, definiujących API i rozszerzenia języka C do organizacji międzyplatformowych obliczeń równoległych z wykorzystaniem wielordzeniowych CPU, GPU, FPGA, DSP i innych wyspecjalizowanych chipów, począwszy od tych, które są stosowane w superkomputerach i serwerach w chmurze, po chipy, które można znaleźć w urządzeniach mobilnych i technologii wbudowanej. Standard OpenCL jest całkowicie otwarty i nie wymaga opłat licencyjnych. W pracach nad standardem uczestniczyły takie firmy jak IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments i Toshiba.
Na obecnym etapie specyfikacji nadano status wstępny (provisional), co oznacza możliwość wprowadzenia poprawek na podstawie opinii przesłanych przez . Po uwzględnieniu uwag specyfikacja otrzyma status finalny i zostanie opublikowany ostateczny zestaw testowy do weryfikacji zgodności istniejących implementacji.
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
