# RE: AMBER: nmode calculation

From: mingche Pan <panmingche.yahoo.com>
Date: Mon, 24 Jan 2005 14:12:13 -0800 (PST)

Dear Dr. Walker,

Thank you so much for your detailed explanation! Now I know what the problems are. Unfortunately, I am not the only user of the SGI machine (many other people are running jobs on it). Is there a workaround available to use lots of smaller arrays instead of a big array? Thanks a lot!

Mingche

Ross Walker <ross.rosswalker.co.uk> wrote:
Dear Mingche

The problem you have is that on a 32 bit machine, although you have 4 GB of memory, you can only actually allocate blocks as large as 2GB. Hence trying to allocate 3.2GB on a 32bit machine will invariably fail. Short of recoding nmode to use some kind of system that breaks the hessian up into small blocks and works out where the contents of each block is stored (this would allow more than 2GB to be used on a 32 bit machine but would require a lot of work and the resulting code would be 'VERY' slow.) the only other option is to use a 64 bit machine such as an SGI Altix.

The other problem you have, on the sgi in 64 bit mode, is that the way memory allocation works, using single pointers, you need a sufficiently big block of 'Linear' memory. What this means in practice is that your computer may have 3GB of free memory but only 1.2GB available as a sequential block. Thus allocation of 1.7GB will fail.

E.g.

0GB 0.8GB 2.0GB 2.1GB 3GB
<-allocated--><---------FREE----------><--allocated--><------------FREE------->

Maximum allocatable block is 1.2GB. You can test out how much memory is actually allocatable on your machine by writing a simple c program that allocates and then frees larger and large blocks of memory. Test the pointer that malloc returns and as soon as this is null you have hit the maximum single block of memory that can be allocated.

Are you the only user of the machine? Try doing a complete reboot and then make sure you login as the only user. You may then be able to allocate a much bigger block of memory.

So, without a re-write of nmode to use lots of smaller arrays rather than one big array you are unlikely to be able to run the size of calculation you want to do on a 32 bit machine or in a multi-user environment on a 64 bit machine.

all the best
Ross

/\
\/
|\oss Walker

---------------------------------
Do you Yahoo!?
Yahoo! Search presents - Jib Jab's 'Second Term'
-----------------------------------------------------------------------
The AMBER Mail Reflector
To post, send mail to amber.scripps.edu
To unsubscribe, send "unsubscribe amber" to majordomo.scripps.edu
Received on Mon Jan 24 2005 - 22:52:59 PST
Custom Search