[gmx-users] benchmarks
Erik Lindahl
lindahl at stanford.edu
Tue Mar 11 21:11:15 CET 2003
Hi,
>My system is a dual Opteron and I fixed the configure
>script so that it recognizes x86_64 and tests it for x86 assembly.
>It passed the tests, but it fails during the compilation.
>
>x86_cpuid.s: Assembler messages:
>x86_cpuid.s:74: Error: `+8' is not a valid 64 bit base/index expression
>x86_cpuid.s:76: Error: `+12' is not a valid 64 bit base/index
expression
>x86_cpuid.s:78: Error: `+16' is not a valid 64 bit base/index
expression
>x86_cpuid.s:80: Error: `+20' is not a valid 64 bit base/index
expression
>x86_cpuid.s:82: Error: `+24' is not a valid 64 bit base/index
expression
>
>Any ideas?
Hm.. it looks as if the 64 assembler doesn't understand the
instructions for some reason. I couldn't find any info on it when I did
a quick google search. Our assembly code uses intel syntax, but this is
well supported by the GNU assembler and I haven't heard of any
differences for x86-64.
For now you could try to compile in 32 bit mode; I'm pretty sure the 32
bit assembly loops will be faster than 64 bit C code anyway. And I'm
probably going to write a set of x86-64 assembly loops when I get
access to a machine (pretty easy since it is just a matter of using the
additional 8 SSE registers for storage, but it might take some tweaking
to get the assembler to work.)
What you could do already now is to write a small C subroutine in a
separate program with 2-3 arguments, e.g.:
void myroutine(float *f, float *g, float *h) {
*f = *g + *h;
}
and then create assembly output in 64 bit with
gcc {some flags} -S file.c
and send me the resulting "file.s". This is unfortunately in GNU
syntax, so it's probably not going to solve it immediately, but it
might provide a clue.
Cheers,
Erik
More information about the gromacs.org_gmx-users
mailing list