There seems to be a difference in memory allocation when J is run in an ijx window and with jconsole. With Example 2 in an ijx window, I run out of memory when allocating A. On the same machine, the entire example runs fine under jconsole.
Best wishes, John Randall Oleg Kobchenko wrote: > Yes this is really strange: I thought operations > with MMF nouns should not take up physical memory. > Especially if the result is mapped, moreover > if there are no intermediate operations. > > But even simple operations, like C=: A*B all mapped > take even more memory than not mapped. > (Using left arg "JFL map_jmf_ y" does not help.) > > Example 1. > require 'jmf files dir' > ]P=: jpath'~temp' > c:\math\j601\temp > > A=: i.20 20 > B=: %>:i.-20 20 > > createjmf_jmf_ (P,'/A.jmf');*/20 20 8 > createjmf_jmf_ (P,'/B.jmf');*/20 20 8 > createjmf_jmf_ (P,'/C.jmf');*/20 20 8 > map_jmf_ 'A1';P,'/A.jmf' > map_jmf_ 'B1';P,'/B.jmf' > map_jmf_ 'C1';P,'/C.jmf' > A1=: i.20 20 > B1=: %>:i.-20 20 > > 7!:2 'A * B' > 4800 > 7!:2 'C1=: A1 * B1' > 4992 > > > Example 2. > (Choose total sizes exceeding your physical + swap file, > swap file should be fixed). > > createjmf_jmf_ (P,'/a.jmf'); 40e6 * 8 > createjmf_jmf_ (P,'/b.jmf'); 40e6 * 8 > createjmf_jmf_ (P,'/c.jmf'); 40e6 * 8 > > map_jmf_ 'A';P,'/a.jmf' > map_jmf_ 'B';P,'/b.jmf' > map_jmf_ 'C';P,'/c.jmf' > showmap_jmf_'' > +-------+-----------------------+--+---+---+----------+----------+--+---------+----+ > |name |fn |sn|fh |mh |address |header |ts|msize > |refs| > +-------+-----------------------+--+---+---+----------+----------+--+---------+----+ > |A_base_|c:\math\j601\temp/a.jmf| |224|228|539820032 |539820032 | > |320000000|2 | > +-------+-----------------------+--+---+---+----------+----------+--+---------+----+ > |B_base_|c:\math\j601\temp/b.jmf| |232|236|859832320 |859832320 | > |320000000|2 | > +-------+-----------------------+--+---+---+----------+----------+--+---------+----+ > |C_base_|c:\math\j601\temp/c.jmf| |240|244|1179844608|1179844608| > |320000000|2 | > +-------+-----------------------+--+---+---+----------+----------+--+---------+----+ > > > A=: i.40e6 > B=: i.40e6 > B=: >:B > B=: %B > |out of memory > | B=: %B > > unmapall_jmf_'' NB. OK let's restart > 0 0 0 > map_jmf_ 'B';P,'/b.jmf' > B=: %B > unmapall_jmf_'' > 0 > map_jmf_ 'C';P,'/c.jmf' > C=: 40e6#0.1 NB. initialize to form of results > unmapall_jmf_'' > 0 0 0 > map_jmf_ 'A';P,'/a.jmf' > map_jmf_ 'B';P,'/b.jmf' > map_jmf_ 'C';P,'/c.jmf' > C=: A*B > |out of memory > | C=:A *B > dir P > 1.ijs 417 23-Apr-06 16:25:24 > 1.ijx 4509 07-May-06 03:38:21 > 2.ijs 1050 27-Apr-06 06:39:33 > a.jmf 320000284 07-May-06 03:40:21 > b.jmf 320000284 07-May-06 03:40:24 > c.jmf 320000284 07-May-06 03:40:27 > temp.txt 111 22-Apr-06 08:19:34 > > > > --- Anssi Seppälä <[EMAIL PROTECTED]> wrote: > >> I have two big 2-dimensional arrays in mapped files A and B. I need >> to calculate +/ A * B efficiently and without "out of memory". >> >> In the case A was a vector the . (dot) can make it +/ . * , but this >> does not work if A is a matrix. Is there a way to do this without a >> program loop? >> >> Anssi > > > > __________________________________________________ > Do You Yahoo!? > Tired of spam? Yahoo! Mail has the best spam protection around > http://mail.yahoo.com > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
