180 likes | 261 Vues
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. ?. pFortran. Minimalne rozszerzenie FORTRANU 77
E N D
Rozszerzanie składni pFortranu Implementacja elementów Fortranu 90 DanielRychcik
Co będzie? • Trochę historii • Dlaczego pFortran? • Cel pracy • Narzędzia • pFortran od środka • Przebieg pracy • Osiągnięcia
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
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 Dlaczego pFortran? 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
lexi 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 ?