Rozszerzanie składni PFortranu

advertisement
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)
MPI
Co-Array Fortran
PVM
OpenMP
?
pFortran
HPF
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)
N=N@0
CALL MPI_REDUCE(myPi,Pi,1,
MPI_DOUBLE_PRECISION,
MPI_SUM,0,MPI_COMM_WORLD,
IERR)
Pi=+{myPi}
IF (thisProc.EQ.0) THEN
CALL MPI_SEND(B,1,MPI_BYTE,DEST,TAG,
MPI_COMM_WORLD,IERR)
END IF
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
Download