nmap (reference ruby class which combines narray and mmap) na_str (c extension)
mmap : http://moulon.inra.fr/ruby/mmap.html narray : http://narray.rubyforge.org/
na_str is designed to allow data sharing between narray object and other ruby objects. the shared data is that returned by the objects to_s or to_str method and rb_string_new4. using this technique memory mapped (using guy's mmap extensions) data can be altered with no explicit io on the users part and partial changed to numerical grids can occur very quickly and persistently. the nmap.rb reference impl is a concrete example of this usage and is included in the distribution.
jib:~/eg/ruby/na_str > cat a.rb # # the nmap extension is installed along with na_str # require 'nmap' # # the NMap ctor interface is similar to NArray's, but a backing file must also # be specified # path, x, y = 'int.data', 3, 4 nmap = NMap.int path, x, y # # copy the last row to the first # nmap.na[true, 0] = nmap.na[true, 3] # # set the last row to be the current time. if you run this a few times you'll # notice that changes to the narray are automatically written to the to # backing file via the magic of mmap # nmap.na[true, 3] = Time.now.to_i # # show the narray # p nmap.na jib:~/eg/ruby/na_str > ruby a.rb NArray(ref).int(3,4): [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ], [ 1151439012, 1151439012, 1151439012 ] ] jib:~/eg/ruby/na_str > ruby a.rb NArray(ref).int(3,4): [ [ 1151439012, 1151439012, 1151439012 ], [ 0, 0, 0 ], [ 0, 0, 0 ], [ 1151439014, 1151439014, 1151439014 ] ]
jib:~/eg/ruby/na_str > cat a.rb # # reference impl installed with na_str # require 'nmap' # # setup a narray grid containing 1 gb of ints # gb = 2 ** 30 mb = 2 ** 20 sizeof_int = .pack('i').size gig_of_ints = gb / sizeof_int nmap = NMap.int '1GB', gig_of_ints # # set about 1 million of the ints to 42 # nmap.na[0 .. mb] = 42 # # show that the data was written # p nmap.na[mb - 1] jib:~/eg/ruby/na_str > time ruby a.rb 42 real 0m0.078s user 0m0.020s sys 0m0.020s jib:~/eg/ruby/na_str > ls -ltar 1GB -rw-rw-r-- 1 ahoward ahoward 1073741824 Jun 27 14:28 1GB