[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