Rozszerzanie składni pFortranu
description
Transcript of Rozszerzanie składni pFortranu
Rozszerzanie składni pFortranu
Implementacja elementów Fortranu 90
Daniel Rychcik
Co będzie?
Trochę historii Dlaczego pFortran? Cel pracy Narzędzia pFortran od środka Przebieg pracy Osiągnięcia
Umiejscowienie pracy
FORTRAN 66
FORTRAN 77
Fortran 90
Fortran 95
Shared Memory Message Passing
SHMEM (Cray)
Co-Array Fortran
MPI
PVM
HPFpFortran
OpenMP
?
pFortran
Minimalne rozszerzenie FORTRANU 77 Programowanie równoległe w modelu SPMD Preprocesor – nie kompilator! Tłumaczenie rozszerzeń na kod MPI
pFortran
Operator referencji @• A@N=A@M• A=A@N• Ograniczenia stosowania
Operator redukcji {}• SUM=+{PSUM}• Implementacja – drzewo binarne
Dlaczego pFortran?
Prostota !!! Łatwość nauczenia się Minimalne zmiany w istniejących programach Niezależność od biblioteki message passing
Dlaczego pFortran?
CALL MPI_BCAST(N,1,MPI_INTEGER,
0,MPI_COMM_WORLD)
CALL MPI_REDUCE(myPi,Pi,1,
MPI_DOUBLE_PRECISION,
MPI_SUM,0,MPI_COMM_WORLD,
IERR)
IF (thisProc.EQ.0) THEN
CALL MPI_SEND(B,1,MPI_BYTE,DEST,TAG,
MPI_COMM_WORLD,IERR)
END IF
N=N@0
Pi=+{myPi}
B@DEST=B@0
Fortran 90
Duże unowocześnienie języka Free-form syntax Nowe instrukcje strukturalne Procedury rekurencyjne Rozbudowane funkcje intrinsic
Cel pracy
Porównanie narzędzi programowania równoległego
Opanowanie narzędzi pomocniczych:– lex– yacc
Poznanie pFortranu „od środka” Implementacja niektórych elementów
Fortranu 90
lex i yacc
lex – generator analizatorów leksykalnych– Zajmuje się warstwą „słownikową”– Wyszukuje wzorce i zamienia je na tokeny– Nie analizuje „sensu” wyrażeń
yacc – generator parserów gramatyki– Rozpoznaje struktury wyrażeń– Jako wejście przyjmuje strumień tokenów– Pozwala definiować akcje dla wyrażeń
pFortran od środka
Część większego pakietu pLanguages Interesujący nas katalog: pf/src Dwie podstawowe części preprocesora
– Analizator leksykalny: pf/src/lex– Analizator składni, generator kodu: pf/src
Jak te dwie części współpracują ze sobą?
pFortran od środka
Analizator leksykalny: Zaczerpnięty z pakietu f2c Brak dostępu do pliku źródłowego lex Wprowadzenie poprawek – ręczna analiza
maszynowo wygenerowanego kodu
pFortran od środka
Analizator gramatyki: Również oparty o źródła f2c Zmodyfikowana gramatyka yacc Dostępny plik opisujący gramatykę Wprowadzenie poprawek – głównie praca
nad definicją gramatyki
Przebieg pracy
„Oczyszczenie” kodu, dodanie komentarzy Analiza i wybór rozszerzeń do implementacji Wybór narzędzia i sposobu realizacji Analiza kodu źródłowego pFortranu Rozbudowa języka
Dokumentacja
Wprowadzone rozszerzenia
Procedury i funkcje rekurencyjne Rozszerzona semantyka DO...LOOP Deklaracja IMPLICIT NONE Instrukcja wyboru SELECT…CASE Instrukcje kontroli pętli EXIT i CYCLE Nowe funkcje intrinsic: CEILING, FLOOR, MODULO itp.
Postać /= operatora „różny od”
Zauważone niedociągnięcia
Rozsyłanie dużych struktur– Preprocesor generuje błędny kod
Efektywność operacji redukcji – Zwykłe drzewo binarne zamiast hypercube
Podsumowanie
Zasada działania translatora – ułatwienie Budowa preprocesora - utrudnienie Reverse-engineering Metoda modyfikacji kodu Możliwość dodawania kolejnych rozszerzeń
– Rozszerzenia deklaracji zmiennych– Domyślne argumenty procedur– Typy danych użytkownika
Pytania
?