[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [ccp4bb]: Error running FFT in alpha
*** For details on how to be removed from this list visit the ***
*** CCP4 home page http://www.dl.ac.uk/CCP/CCP4/main.html ***
>>>>> "CCB" == C C Ballard <C.C.Ballard@dl.ac.uk> writes:
CCB> first off, what Alpha machine are you using. Previously we have
CCB> had reports of problems using fft on the XP1000, divide by zero
CCB> in that case.
Both the compiler version and the exact architecture it's targeting
could be relevant.
CCB> That seemed to have been caused by various arrays being
CCB> overwritten, although the problem was not fully tracked down.
Unless they have been redone recently, the CCP4 fftlib routines
disobey the Fortran aliasing and argument-passing rules and have
always been liable to fail with aggressive optimizers for certain
sorts of processor.¹
Also I expect that their structure -- apparently optimized for old
non-optimizing compilers -- is rather pessimized for current systems.²
I remember LTE disagrees, and I don't recall the details of how they
CCB> Several solutions were found though.
CCB> 1. use FFTBIG. This worked. It uses dynamic memory
It also doesn't have the aliasing problem.
CCB> 3. turning off optimization seemed to also cure the problem. Could be
CCB> that it arose due code reordering. Warning: this leads to a large
CCB> performance hit.
The DEC Fortran flag specific to the optimization I'm thinking of is
`-assume dummy_aliases'; there are similar ones in other compilers.
It should show whether that's the problem, at least, and would
minimize the speed hit if it is.
1. I asked a DEC engineer specifically about DEC Fortran with the sort
of invalid thing that fftlib does, but it's clear what any compiler
could do with it.
2. `FFTW' <URL:http://www.fftw.org/> seems to be state-of-the art in
basic FFT (without the crystallographic symmetry tricks). It's
also generally interesting, but is GPLed and so couldn't be used in
CCP4 without an exception from the authors.
If you lie to the compiler it will get its revenge. -- Henry Spencer