Professional Documents
Culture Documents
Uvod U Fortran-90
Uvod U Fortran-90
Ivo Batisti c
Fizi cki odsjek, PMF Sveu cilite u Zagrebu
Pregled predavanja
Uvod Primjer FORTRANskog programa Prevodenje u izvrni program Fortran-90 i Fortran-77 Prevodenje fortranskog programa Objektni zapis i izvrni program Naredbe u FORTRANskom programu Automatizacija poslova
Uvod
Fortran je prvi tz. programski jezik vie razine. Programski jezici vie razine su: C, C++, Ada, Pascal, Cobol, . . . . (programski jezik nie razine je npr. Assembler ili Assembly language)
Fortran je razvijen 50-tih godina prolog stolje ca u IBM-u. Ocem Fortrana smatra se John Backus.
(http://www-history.mcs.st-andrews.ac.uk/Biographies/Backus.html)
Fortran postaje komercijalno dostupan 1957. godine. (2007. je pedesetogodinjica Fortrana.) Fortran je skra cenica od The IBM Mathematical Formula Translating System.
Razvoj Fortrana
Fortran kao jezik za programiranje deniran je nizom pravila koja se vremenom nadograduju. Nadogradnja je motivirana prilagodavanju Fortrana suvremenim konceptima u programiranju (objektno programiranje) kao i olakavanju uporabe Fortrana u razvijanju aplikacija. Postoji medunarodno tijelo (povjerenstvo) koje se donosi odluke i preporuke o nadogradnji Fortrana (http://www.nag.co.uk/sc22wg5/). Razvoj Fortrana moe se podjeliti u nekoliko stadija:
Razvoj Fortrana
e vjerojatno uklju Radi se na razvijanju Fortrana 2008 koji c civati dodatne pravila za razvoj programa na vieprocesorskim ra cunalima i grozdovima. Nezavisno od medunarodnih pravila, svaka tvrtka koja razvija Fortranski prevoditelj ima neka svoja dodatna proirenja jezika, ali i neke nedostatke u potovanju i primjeni dogovorenih pravila. esto ne koriste. Tu je obi cno rije c o nekim svojstvima koja se c (Treba uvijek nastojati razvijati program prema dogovorenim i prihva cenim standardima, a ne koristiti svojstva speci cna za Fortran neke tvrtke.) e izgledati programski jezik za razvoj znanstvenih ala: Kako c aplikacija u budu cnosti?
Razvoj Fortrana
e vjerojatno uklju Radi se na razvijanju Fortrana 2008 koji c civati dodatne pravila za razvoj programa na vieprocesorskim ra cunalima i grozdovima. Nezavisno od medunarodnih pravila, svaka tvrtka koja razvija Fortranski prevoditelj ima neka svoja dodatna proirenja jezika, ali i neke nedostatke u potovanju i primjeni dogovorenih pravila. esto ne koriste. Tu je obi cno rije c o nekim svojstvima koja se c (Treba uvijek nastojati razvijati program prema dogovorenim i prihva cenim standardima, a ne koristiti svojstva speci cna za Fortran neke tvrtke.) e izgledati programski jezik za razvoj znanstvenih ala: Kako c aplikacija u budu cnosti?
Razvoj Fortrana
e vjerojatno uklju Radi se na razvijanju Fortrana 2008 koji c civati dodatne pravila za razvoj programa na vieprocesorskim ra cunalima i grozdovima. Nezavisno od medunarodnih pravila, svaka tvrtka koja razvija Fortranski prevoditelj ima neka svoja dodatna proirenja jezika, ali i neke nedostatke u potovanju i primjeni dogovorenih pravila. esto ne koriste. Tu je obi cno rije c o nekim svojstvima koja se c (Treba uvijek nastojati razvijati program prema dogovorenim i prihva cenim standardima, a ne koristiti svojstva speci cna za Fortran neke tvrtke.) e izgledati programski jezik za razvoj znanstvenih ala: Kako c aplikacija u budu cnosti? e se sigurno zvati Fortran! To nitko ne zna, ali c
Naredbe u FORTRANu: program, end, print To su rezervirane rije ci koje se ne smiju koristiti za imena varijabli, funkcija, procedura, programa itd. Naredbe po cinju i zavravaju u jednom redu. Komentar po cinje s uskli cnikom ! String je omeden s jednostrukim navodnim znakom ()
Naredbe u FORTRANu: program, end, print To su rezervirane rije ci koje se ne smiju koristiti za imena varijabli, funkcija, procedura, programa itd. Naredbe po cinju i zavravaju u jednom redu. Komentar po cinje s uskli cnikom ! String je omeden s jednostrukim navodnim znakom ()
Usporedba s C-programom
Naredba za ispis: printf String je omeden s dvostrukim navodnim znakom ("). Naredbe Naredbe mogu i ci preko vie linija a zavravaju s to cka-zarezom (;). Komentar po cinje s /* a zavrava s */.
Spremiti program u datoteku koja zavrava s .f90, npr. datoteku s imenom hello.f90. Kompajlirati program ili prevesti program napisan u fortanskom jeziku u izvrni program (mainski). Kako ? Pomo cu prevoditelja ili engl. compiler-a - kompajlera :
Spremiti program u datoteku koja zavrava s .f90, npr. datoteku s imenom hello.f90. Kompajlirati program ili prevesti program napisan u fortanskom jeziku u izvrni program (mainski). Kako ? Pomo cu prevoditelja ili engl. compiler-a - kompajlera :
Nastavke .f90 imaju datoteke napisane u Fortranu-90. Za programe napisane u fortranu-77 uobi cajeno je koristiti nastavak .f. Nastavci mogu biti i .for, .hpf, .f95, .F, F90, .F95, .FOR, .HPF, .fpp, . . . . esto ozna Nastavci s velikim slovima c cavaju programe koji sadre pseudo-fortranske naredbe. Takova datoteka prolazi dodatnu obradu (s tz. predprocesorskim programom) prije kona cnog prevodenja u objektnu datoteku.
Fortran-90
Fortran-77
c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello print *,Pozdrav svijetu end program
O FORTRANu-77
mjesta 1-5 u retku se koriste za labela. popunjeno 6. mjesto indicira da je linija nastavak fortranske naredbe iz prethodne linije. mjesta 7-72 rezervirana za pisanje fortranskih naredbi.
nema naredbi koje rade s vektorima i matricama. Fortran-90 ima naredbe koje rade s vektorima i matricama (tj. skupovima podataka)
O FORTRANu-90
Mjesta 1-6 nisu rezervirana Naredba u liniji moe biti vrlo duga cka Naredba se nastavlja na slijedeci red ako zavrava s ampersandom (&) na kraju Na istoj liniji moe biti vie naredbi, a medusobno su razdvojene s to cka-zarezom (;).
Fortran-90 ima naredbe koje rade s vektorima i matricama. Bolja kontrola nad vrstama podataka Dinami cko rezerviranje memorije skupove podataka (velike matrice ili vektore).
primjer FORTRAN-77
c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello print *,Pozdrav i mir cijelom & svijetu go to 100 print *,ovo nece biti ispisano 100 continue end program
naredba go to 100 forsira program da se nastavi izvoditi od mjesta ozna cenog s labelom 100 ini ita, program se naprosto nastavlja od tog mjesta continue ne c nadalje.
primjer FORTRAN-77
c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello print *,Pozdrav i mir cijelom & svijetu go to 100 print *,ovo nece biti ispisano 100 continue end program
naredba go to 100 forsira program da se nastavi izvoditi od mjesta ozna cenog s labelom 100 ini ita, program se naprosto nastavlja od tog mjesta continue ne c nadalje.
primjer FORTRAN-90
Program hello print *,Pozdrav i mir cijelom & svijetu print *,svim bicima ; print *,u svemiru i okolici End program
& (ampersand, and) ozna cava nastavak naredbe u slijede ci red ; (to cka-zarez) razdvaja vie fortranskih naredbi
primjer FORTRAN-90
Program hello print *,Pozdrav i mir cijelom & svijetu print *,svim bicima ; print *,u svemiru i okolici End program
& (ampersand, and) ozna cava nastavak naredbe u slijede ci red ; (to cka-zarez) razdvaja vie fortranskih naredbi
O fortranskim prevoditeljima
Linux
Intelovi prevoditelji - slobodni za personalnu uporabu, ali uz registraciju na njihovom web-site -u: http://developer.intel.com/software/products/ Gnu prevoditelji: gfortran, gcc, g++, . . . NAG prevoditelj: f95 - moe se dobiti trial verzija s njihovog web-site -a: http://www.nag.com/ PGI prevoditelji: pgcc, pgf77, pgf90, pghpf, . . . - moe se dobiti trial verzija s njihovog web-site -a: http://www.pgroup.com/
MS-windows:
F-Fortran - web-site : http://www.fortran.com/F/ gnu-Forran - web-site : http://www.cygwin.com/ Salford FTN95 - moe se dobiti besplatna personalna verzija na njihovom web-site : http://www.silverfrost.com/ Lahey/Fujitsu Fortran - moe se dobiti trial verzija s njihovog web-site -a: http://www.lahey.com/downloads.htm
Prevodenje (kompailiranje)
prompt>
ifort
hello.f90
-o
hello.exe
Program za prevodenje
(naredba)
Ime datoteke s fortranskim programom. Nastavak .f90 indicira da se radi o Fortranu-90 u slobodnom formatu zapisanom. Iza ove opcije slijedi ime izvrnog programa .
Ime izvrnog programa moe biti bilo to, npr. hello ili hello.x ili olleh ili virus.com (Ipak dobro se je konzistentno drati odredenog pravila)
-o xxx.exe -O -c
Ime izvrnog programa Optimiziraj izvrni program Ne napravi kompletni izvrni program nego samo napravi datoteku s tz. objektnim zapisom. (Datoteka zavrava s .o ili .obj kod MS windows-a.) koristi biblioteku pomo cnih programa (soubrutine-a) liblapack.a ili liblapack.so Biblioteku trai na tom mjestu na disku ra cunala
-llapack
-L /usr/lib/
Primjeri prevodenja
to je hello.o a to hello.exe
Objekti zapis (hello.o) je to cni ili ekvivalentni optimizirani mainski zapis (prijevod) programa, s tim da ne postoje:
dijelovi mainskog programa koji se brinu za razmjenu podataka s vanjskim jedinicama ra cunala (tipkovnica, ekran, tvrdi disk, CD/DVD, mrea, ...) dijelovi mainskog programa vanjskih funkcija i podprograma koje program poziva (koristi).
to je hello.o a to hello.exe
Postoje dvije vrste izvrnih programa hello.exe: stati cki povezani i oni cki povezuju prije samog izvodenja. koji se dinami
Stati cki povezani izvrni programi su gotovo potpuni, osim to im jo nedostaje dio programa za komunikaciju s vanjskim jedinicama ra cunala. Dinami cki povezanim programima nedostaju i vanjske funkcije i potprogrami koji se nalaze u dinami ckim bibliotekama. Dinami cka biblioteka se kopira u glavnu memoriju ra cunala u trenutku izvodenja, ako nije ve c prije tamo iskopirana.
Svi programi izvode se unutar nekog operacijskog sustava. Izmedu programa i vanjskih jedinica uvijek stoji operacijski sustav. Pristup do njih je mogu c samo kroz posredovanje operacijskog sustava.
prompt> ldd hello.exe linux-gate.so.1 => (0xffffe000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7f18000) libcxa.so.5 => /opt/intel/intel_fc_80/lib/libcxa.so.5 (0xb7ef2000) libunwind.so.5 => /opt/intel/intel_fc_80/lib/libunwind.so.5 (0xb7eec000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7db6000) /lib/ld-linux.so.2 (0xb7f60000) prompt>
dec 337763
text Mainske naredbe programa. data Podaci i konstante s unaprijed poznatim vrijednostima. ije vrijednosti nisu unaprijed poznate. bss Podaci c dec Ukupna veli cina svih sekcija.
Program
PROGRAM hello CHARACTER(len=10) :: poruka poruka = Pozdrav svijetu PRINT *,poruka END PROGRAM
Izvodenje
Naredba INTEGER :: a rezervira memorijsku lokaciju pod imenom a u koju kanimo spremati cijele brojeve. Naredba a = 1 u memorijsku lokaciju a sprema broj jedinicu. Naredba a = a + 1 uzima sadraj memorijske lokacije a, njemu pribraja jedinicu te rezultat pribrajanja ponovo stavlja u memorijsku lokaciju a.
Naredba a = a + 1 u matematici je besmislena. Naredbe u programu ne smijemo identicirati kao matemati cke operacije. Varijable a nisu matemati cke varijable nego imena memorijskih lokacija. Naredba a = . . . zna ci ono to je izra cunato na desnoj strani znaka jednakosti spremi u memorijsku lokaciju a. Dio naredbe a+1 zna ci uzmi sadraj iz memorijske lokacije a i pribroji mu jedinicu. Znak jednakosti nije znak jednakosti iz matematike nego premjetanje rezultata desne strane u neku memorijsku lokaciju nazna cenu s imenom na lijevoj strani. imati naredbu a + 1=a. Na lijevoj strani treba biti Nije moguce ime neke memorijske lokacije.
Kod izvodenja dijela naredbe a+1, uzmi sadraj iz memorijske lokacije a i pribroji mu jedinicu, o cito da treba imati neki privremeni neimenovani memorijski prostor za njegovo provodenje. e se pobrinuti za rezervaciju te privremene Program prevoditelj c memorijske lokacije. Ako bi pisali program u assembleru, mainskom jeziku, onda bi mi bili ti koji bi morali voditi ra cuna u tim privremenim memorijskim lokacijama.
Make naredba
Makele datoteka:
FC = ifort FFLAGS = # ======================= all: hello.exe hello.exe: hello.f90 $(FC) $(FFLAGS) hello.f90 -o $@ clean: rm -f *.o *.exe
Make naredba
make omogu cuje automatizaciju prevodenja aplikacije. e naredba make Ako se u imeniku nalazi datoteka Makele tada c izvravati one naredbe denirane u sekciji all (default -na sekcija/cilj). e one naredbe koje su denirane Ili, naredba make cilj izvravat c u sekciji cilj. e izbrisati datoteke koje zavravaju s Npr. naredba make clean c *.o ili *.exe, one koje su rezultat prevodenja. Ako hello.exe ima noviji datum stvaranja od hello.f90, naredba make ne ce nita raditi.
Makele datoteka
FC = ifort FFLAGS =
Prva linija denira varijablu koja sadri ime prevoditelja Druga linija denira varijablu koja sadri opcije koje dajemo prevoditelju. U ovom slu caju tih opcija nema.
$@