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