Rozszerzanie składni pFortranu

18
Rozszerzanie składni pFortranu Implementacja elementów Fortranu 90 Daniel Rychcik

description

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 - PowerPoint PPT Presentation

Transcript of Rozszerzanie składni pFortranu

Page 1: Rozszerzanie składni pFortranu

Rozszerzanie składni pFortranu

Implementacja elementów Fortranu 90

Daniel Rychcik

Page 2: Rozszerzanie składni pFortranu

Co będzie?

Trochę historii Dlaczego pFortran? Cel pracy Narzędzia pFortran od środka Przebieg pracy Osiągnięcia

Page 3: Rozszerzanie składni pFortranu

Umiejscowienie pracy

FORTRAN 66

FORTRAN 77

Fortran 90

Fortran 95

Shared Memory Message Passing

SHMEM (Cray)

Co-Array Fortran

MPI

PVM

HPFpFortran

OpenMP

?

Page 4: Rozszerzanie składni pFortranu

pFortran

Minimalne rozszerzenie FORTRANU 77 Programowanie równoległe w modelu SPMD Preprocesor – nie kompilator! Tłumaczenie rozszerzeń na kod MPI

Page 5: Rozszerzanie składni pFortranu

pFortran

Operator referencji @• A@N=A@M• A=A@N• Ograniczenia stosowania

Operator redukcji {}• SUM=+{PSUM}• Implementacja – drzewo binarne

Page 6: Rozszerzanie składni pFortranu

Dlaczego pFortran?

Prostota !!! Łatwość nauczenia się Minimalne zmiany w istniejących programach Niezależność od biblioteki message passing

Page 7: Rozszerzanie składni pFortranu

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

Page 8: Rozszerzanie składni pFortranu

Fortran 90

Duże unowocześnienie języka Free-form syntax Nowe instrukcje strukturalne Procedury rekurencyjne Rozbudowane funkcje intrinsic

Page 9: Rozszerzanie składni pFortranu

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

Page 10: Rozszerzanie składni pFortranu

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ń

Page 11: Rozszerzanie składni pFortranu

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ą?

Page 12: Rozszerzanie składni pFortranu

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

Page 13: Rozszerzanie składni pFortranu

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

Page 14: Rozszerzanie składni pFortranu

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

Page 15: Rozszerzanie składni pFortranu

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”

Page 16: Rozszerzanie składni pFortranu

Zauważone niedociągnięcia

Rozsyłanie dużych struktur– Preprocesor generuje błędny kod

Efektywność operacji redukcji – Zwykłe drzewo binarne zamiast hypercube

Page 17: Rozszerzanie składni pFortranu

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

Page 18: Rozszerzanie składni pFortranu

Pytania

?