A A A


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

  • Biblioteki:
    • 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

  • Profiler:
    • 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

  • Systemy operacyjne i procesory:
    • 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

  • Generator kodu LLVM
    • 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.