prevajanje na opteronu

Jurij Reščič jure at gemini.fkkt.uni-lj.si
Thu Sep 16 11:11:15 CEST 2004


Zdravo!

Eno dokaj obsežno aplikacijo v fortranu 90 prevajam na opteronu  (OS je
fedora core 2 - 64 bit); vsebuje tudi nekaj vrstic c kode (kadar se 
prevaja za
paralelno delo).

makefile je takle:
---------------
ARCH = LINUX

SER_DEFINES  = -D$(ARCH)
CSER_DEFINES = -D$(ARCH)
PAR_DEFINES  = -D$(ARCH) -D_PAR_
PAR2_DEFINES = -D$(ARCH) -D_PAR2_

SER_XLF       =   pgf90
SER_XLFLINK   =   $(SER_XLF) -Wl,-Bstatic
PAR_XLF       =   $(SER_XLF)
PAR_XLFLINK   =   mpif90 -Wl,-Bstatic
FOPT          =   -O3 -Mfree -tp=k8-64

FSERFLAG   =   $(SER_DEFINES) $(FOPT)
FPARFLAG   =   $(PAR_DEFINES) $(FOPT)
FPAR2FLAG  =   $(PAR2_DEFINES) $(FOPT)

XLC       =   cc
COPT      =   -O
CFLAG     =   $(CSER_DEFINES) $(COPT)
...
--------
Prevajalnik je Portland fortran (5.2-2). 

Fortranska koda vsebuje na nekaj mestih stavek

#if defined (_PAR_) (kadar se prevaja za paralelno delo)
...
#else
...
#endif

Če prevajam z opcijo tp=k8-32, je OK, če pa uporabim flag k8-64,
linker javi tole napako:
/usr/bin/ld: Warning: alignment 16 of symbol `pghpf_type_' in 
/usr/pgi/linux86/5.2/lib/libpgf902.a(const.o) is smaller than 32 in foo.o
/usr/bin/ld: warning: i386:x86-64 architecture of input file `foo.o' is 
incompatible with i386 output

Google pravi, da meša 32 in 64 bitno kodo; opcija -m64 težave ne odpravi.

Druge programe (brez c kode) lahko prevedem in poženem s k8-64 opcijo 
brez težav.
(64 bitne so bistveno hitrejše).

Kakšne flage bi moral uporabiti?

Jurij






More information about the lugos-list mailing list