Ulrich Genick wrote:
> Hi,
>
> has anybody compiled a SHELXL version with array sizes
> suitable for full matrix refinement of small proteins.
>
> I compiled a version with LM=3200000 JW=400000000 IM=200000 LU=4096
>
> for a new quad core Xenon mac and the speeds I got were less impressive.
>
> At the same time the precompiled versions from the SHELXL website ran
> circles
> around my older Athlon boxes.
>
> My suspicion is that I did not use the best compiler or that I am not using
> the right optimizations, in particular, I have no idea what is the best
> value for LU. The instruction in the SHELXL header file indicate
> that one might have to play with this parameter...
>
> So if anybody has played around with this and made executable
> with a good compiler, I would love to get a copy.
>
>
> Thanks,
>
> Ulrich
Ulrich,
just some thoughts.
I guess you run Mac OSX on this box? I believe the Intel compiler "ifort" is
available for it, and there's most probably a trial version limited to 30 days
or so. With ifort on Linux, one should probably use the -xT option for the Xeon
of the Mac Pro.
Is Mac OSX 64bit, and does it have 64bit compilers? I do have Mac Pros but run
64bit Linux on them ... very fast indeed - but unfortunately Linux binaries
probably won't help you much.
JW=400000000 means 400 million integers, that's 1.6GB. A single array that size
might work with a 32 bit compiler but you're getting close to the point where
32bit is not quite enough. Furthermore, with such big a problem your're also
approaching the point where it might be better to do all calculations in double
precision accuracy - which means a doubling of memory requirements.
With "precompiled versions" do you mean the OpenMP versions? You need those to
fully utilize all the cores of your quad core Xeon Mac. If you use the OpenMP
version then the size of the "B" array in shelxh is JW*<number_of_threads> -
which again points to the requirement for 64bit compilation. The latest versions
of gfortran do support OpenMP but I find them not to be reliable.
If you download the source code of the OpenMP version, then there's also a
little README which explains how it has to be compiled. Although that's a bit
outdated, it should still point you in the right direction.
Concerning LU, I use the following formula: <L1-cache-size>/(13*4); rounded down
towards the nearest multiple of 8. This would give 624 for a 32K L1 cache.
Multiples also work well. 4096 appears to be a bit high.
HTH,
Kay
--
Kay Diederichs http://strucbio.biologie.uni-konstanz.de
email: [log in to unmask] Tel +49 7531 88 4049 Fax 3183
Fachbereich Biologie, Universität Konstanz, Box M647, D-78457 Konstanz
|