PGI 2018 wersja 18.4:
- kompilator PGI C++:
- zdolność do współpracy z GNU do wersji GCC 7.2
- częściowe wsparcie dla C++17, łącznie z funkcjonalnością:
- strukturalne powiązania
- instrukcje wyboru z inicjalizatorami
- instrukcje warunkowe czasu kompilacji, to jest constexpr if
- wyrażenia składane
- zmienne inline
- wyrażenia lambda w constexpr
- przechwytywanie lambd wskaźnika *this poprzez wartości
- implementacja funkcji __builtin_return_address oraz __builtin_return_address
- poniższe funkcjonalności nie są już wspierane:
- dedukcje szablonów klas
- automatyczne szablony parametrów
- gwarantowane ominięcie kopii
- współpraca kompilatora C++ oraz OpenACC:
- tabele o zmiennej długości są niewspierane w klauzulach danych OpenACC; nie są częścią standardu C++
- zmienne typu klasa, wymagające konstruktorów i destruktorów nie zachowują się poprawnie, kiedy pojawiają się w klauzulach danych
- wyjątki nie są przechwytywane w obszarach obliczeniowych
- zmienne klasowe nie są w pełni wspierane w klauzuli use_device konstrukcji host_data
- kompilator PGI Fortran:
- poprawione wsparcie debuggowania języka Fortran
- zmiana sposobu, w jaki kompilator PGI obsuguje inicjalizację deskryptorów tabel: każdy program skompilowany za pomocą kompilatora Fortran 2003 musi być rekompilowane za pomocą PGI 18.1
- OpenMP:
- kompilator PGI Fortran, C, C++ wspiera OpenMP 3.1 na wszystkich platformach
- wsparcie większości funkcjonalności OpenMP 4.5, z wyjątkiem poniższych ograniczeń:
- konstrukcja declare simd jest ignorowana
- klauzula simd w konstrukcji ordered jest ignorowana
- klauzule depend oraz priority konstrukcji task nie są wspierane
- klauzule linear, schedule oraz ordered konstrukcji loop nie są wspierane
- dyrektywa declare reduction jest niewspierana
- zmiana domyślnej wartości OMP_MAX_ACTIVE_LEVELS od 1 do 16
- dodano wsparcie do klauzul firstprivate oraz lastprivate w konstrukcjach taskloop
- dodano wsparcie dla interfejsu OpenMP Performance Tools, dostępnego w kompilatorach na system Linux za pomocą generatora kodu LLVM
- OpenACC oraz CUDA Fortran:
- Zmiana domyślnej wersji CUDA Toolkit używanego przez kompilator na wersję CUDA Toolkit 8.0
- Zmiana domyślnych możliwości obliczeniowych przez kompilatory cc35, cc60
- wsparcie dla CUDA Toolkit 9.1
- pełne wsparcie dla specyfikacji OpenACC 2.6, włącznie z:
- konstrukcjami seryjnymi
- klauzulami if oraz if_present konstrukcji host_data
- klauzulami no_create w konstrukcjach danych oraz obliczeniowych
- klauzule attach w dyrektywach obliczeniowych, danych oraz wejścia danych
- klauzule detach w dyrektywach danych wyjściowych
- opcjonalne argumenty języka Fortran
- algorytmy acc_get_property, acc_detach oraz acc_detach
- interfejs profilera
- wsparcie dla operatora (*) w konfiguracji uruchomienia CUDA Fortran. Wprowadzenie (*) jako pierwszego parametru uruchomienie pozwala kompilatorowi na obliczenie liczby bloków wątków w konfiguracji uruchomienia
- dwa nowe interfejsy CUDA Fortran, cudaOccupancyMaxActiveBlocksPerMultiprocessor oraz cudaOccupancyMaxActiveBlocksPerMultprocessorWithFlags. Pozwalają one na uzyskanie maksymalnej liczby bloków wątków, do użycia np. w uruchomieniach grid-synchronous
- Reorganizacja modułów cuBLAS oraz cuSolver, pozwalająca na ich użycie w dowolnej jednostce programu Fortran. W związku ze zmianą kod zawierający moduły cuBLAS oraz cuSolver musi być rekompilowany, aby zapewnić zgodność z tym wydaniem
- nowa biblioteka matematyczna PGI, libpgm. Przeniesiono algorytmy z libpgc, libpgftnrtl oraz libpgf90rtl do libpgm
- nowe algorytmy fastmath dla skalarnych lub wektorowych obliczeń sin/cos/tang na procesorach z zestawami instrukcji AVX2 oraz AVX512F
- wsparcie dla złożonych skalarnych funkcji intrinsic standardu C99
- wsparcie dla złożonych wektorowych funkcji intrinsic
- nowe zmienne środowiskowe pozwalające na kontrolę zachowań czasu wykonania runtime funkcji intrinsic:
- MTH_I_ARCH={em64t,sse4,avx,avxfma4,avx2,avx512knl,avx512} - nadpisuje architekturę/platformę ustaloną podczas czasu wykonania runtime
- MTH_I_STATS=1 - pokazuje podstawowe statystyki runtime (liczbę wywołań, liczbę elementów, całkowity procent) funkcji elementarnych
- MTH_I_STATS=2 - pokazuje szczegółowe informacje na temat liczby wywołań, szeregując ze względu na rozmiar elementu (skalar pojedynczej/podwójnej precyzji, wektor pojedynczej/podwójnej precyzji)
- MTH_I_FAST={relaxed, precise} - nadpisuje selekcje czasu kompilacji z opcji domyślnej fast na wybraną opcję relaxed lub precise
- MTH_I_RELAXED={fast, precise} - nadpisuje selekcje czasu kompilacji z opcji relaxed (domyślna z parametrem -MFprelaxed=intrinsic) na wybraną opcję fast lub precise
- MTH_I_PRECISE={fast, relaxed} - nadpisuje selekcje czasu kompilacji z opcji precise (domyślna z parametrem -Kieee) na wybraną opcję fast lub relaxed
- Usprawniony widok CPU Details View, zawierający podział czasu spędzonego na danym wątku
- Opcja wybrania częstotliwości próbkowania PC
- Usprawniona topologia NVLink
- Poprawione dane profilowania, zawierające ID korelacji podczas eksportu do formatu CSV
- Wsparcie dla architektury AMD Zen (EPYC, Ryzen). Opcja -tp=zen pozwala na jawne wybranie architektury AMD Zen
- Wsparcie dla architektury Intel Skylake. Opcja -tp=skylake pozwala na jawne wybranie tej architektury
- Wsparcie dla architektury Intel Knights Landing. Opcja -tp=knl pozwala na jawne wybranie tej architektury
- Wersja produkcyjna kompilatorów PGI Linux/x86-64 z generatorem kodu LLVM oraz biblioteką uruchomieniową OpenMP; kompilatory te można odnaleźć w lokalizacji instalacji linux86-64-llvm
Szczegółowe informacje dostępne są pod adresem: PGI Release Notes.