Prevođenje i izvršavanje C i C++ programa

Prevođenje i linkovanje programa se izvršava naredbom "cc" (koristite velika slova - "CC" za C++, sve ostalo je isto):

        % cc [ option ] ... file ...

Npr.

        % cc -O3 -c a.c              - prevodi "a.c" u "a.o" uz optimizaciju
                                              trećeg nivoa

        % cc -O3 -c b.c              - prevodi "b.c" u "b.o"uz optimizaciju
                                              trećeg nivoa

        % cc -O3 -c main.c           - prevodi "main.c" u "main.o" uz 
                                              optimizaciju trećeg nivoa

        % cc -o prog a.o b.o main.o -lm
                                     - linkuje "a.o", "b.o" i "main.o" u "prog"
                                       uz linkovanje dodatne "math" bibilioteke

        % prog                       - izvršava program "prog"

Olakšavanje gornjeg procesa moguće je korišćenjem "make" podsistema, u kom slučaju se kreira "makefile" koji bi imao sledeći izgled:

        % cat >makefile

        CFLAGS = -O2

        OBJECTS = a.o b.o main.o

        all : prog

        prog : $(OBJECTS)
                cc -o prog $(OBJECTS) -lm
        <Ctrl-D>

        % _

Te se automatsko prevođenje vrši navođenjem naredbe "make":

        % make

Češće korišćene opcije "c" prevodioca su:

    -ansi            - regulišu kompatibilnost sa standardom
    -ansiposix         (za detaljniji prikaz pogledadi "man cc")
    -cckr
    -xansi
    -common

    -signed          - "char" tip podataka će se smatrati da je "signed"

    -c               - izvorni kod se samo prevodi (ne i linkuje)

    -pca             - pokreće "pca" preprocesor koji automatski otkriva
                       paralelizme u izvornom kodu. Ova opcija takođe
                       uključuje "-mp" (multiprocesing) opciju.

    -64              - generišu se 64-bitni objekti. Ovo podrazumeva -mips4

    -32              - generišu se 32-bitni objekti. Ovo podrazumeva -mips1.


    -mips1           - objektni kod se generiše instrukcijskim setom
                       RISC R2000/R3000 arhitekture
                       Ovo podrazumeva -32.

    -mips2           - objektni kod se generiše instrukcijskim setom
                       MIPS II arhitekture
                       (MIPS I + R4000 specifične ekstenzije)
                       Ovo podrazumeva -32.

    -mips3           - objektni kod se generiše instrukcijskim setom
                       pune MIPS III arhitekture (npr. R4000).
                       Ovo podrazumeva -64.

    -mips4           - objektni kod se generiše instrukcijskim setom
                       pune MIPS IV arhitekture (npr. R8000).
                       Ovo podrazumeva -64. Inače, ovo je default opcija.

    -o output        - imenuje izlazni izvršni program ("a.out" ako
                       se ne navede)

    -O0              - isključivanje svih optimizacija. Ovo je
                       default opcija

    -O1              - uključivanje lokalnih optimizacija koje mogu
                       biti urađene brzo

    -O ili -O2       - uključivanje proširene optimizacije

    -O3              - uključivanje agresivne optimizacije

    -S               - izvorni kod se prevodi i dobija program u
                       asembleru (sa sufiksom ".s")

    -Dname=def
    -Dname           - definicija makro preprocesora. Kao da se nalazi u
                       izvornom kodu #define "name" "def". Ako se
                       navede sam -Dname, smatra se da je
                       dodeljena vrednost "1".

    -Uname           - ukljanjanje inicijalne vrednosti makro-a preprocesora

    -Idir            - uključuje "dir" u putanju u kojoj se pretražuju
                       `#include' datoteke čija imena ne počinju sa `/'

Prevođenje i izvršavanje FORTRAN (77 i 90) programa

Prevođenje i linkovanje programa se izvršava naredbom "f77" (koristite "f90" za FORTRAN 90, sve ostalo je isto):

        % f77 [ option ] ... file ...

Npr.

        % f77 -O3 -c a.f             - prevodi "a.f" u "a.o" uz
                                              optimizaciju trećeg nivoa

        % f77 -O3 -c main.f          - prevodi "main.f" u "main.o" uz
                                              optimizaciju trećeg nivoa

        % f77 -o prog a.o main.o     - linkuje "a.o" i "main.o" u "prog"

        % prog                       - izvršava program "prog"

Da bi se brzina SGI Power Challenge-a iskoristila nije dovoljno samo prevesti svoj fortranski program, vec je, na žalost, potrebno program malo i prilagoditi za njegovu 64-bitnu arhitekturu. Time se mogu postići ubrzanja i do 10 puta!

Fortran na SGI Power Challenge-u, ukoliko se ne koristi opcija -32, podrazumeva 64-bitnu dužinu integer varijabli (INTEGER*8). Ukoliko vaš stari kod podrazumeva neadekvatne veličine podataka (recimo, putem COMMON zona), to može dovesti do netačnih rezultata.

Trivijalna intervencija koja može da spase stvar je zamena deklaracije INTEGER sa INTEGER*4. Implicitne deklaracije (I,J,K..N) u DIMENSION naredbi se moraju takođe zameniti eksplicitnom deklaracijom INTEGER*4.

Kod DOUBLE PRECISION nema problema, jer je on već 64-bitni. FLOAT bi trebalo takođe zameniti sa DOUBLE PRECISION, radi brzine.

Pri prevođenju programa koji se iole duze izvršavaju treba staviti opciju -O3.