[MINC-development] Re: [MINC-users] Re: [geeks] voxel loop

Peter NEELIN minc-development@bic.mni.mcgill.ca
Tue, 2 Dec 2003 22:15:33 -0500


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---2066828793-1237723228-1070421318=:7013171
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.SGI.4.44.0312022215241.7013171@shadow.bic.mni.mcgill.ca>

On Fri, 28 Nov 2003, Maxime Descoteaux wrote:

> My problem is that I run out of memory on full brain mr images.  I need
> help setting things up?  I normally have "Volume" data structures lying
> around (too many)!  Why?
>
> Well, I do a multiscale vessel extraction. So, at all time and for every
> scale, I need six volumes to compute the symmetric Hessian matrix of [...]
>
> So, I also have 5 other volumes to save the output of the analysis
> [...]
> This is a lot of volumes lying around....  Is voxel_loop a solution to my
> problem?  I am not quite familiar with the buffer idea and I am not quite
> sure on how to set things up...

No. Voxel_loop is not designed for neighbourhood operations. You could
probably kludge it to do that, but I don't think that that would be a good
idea.

You can use volume_io to create temporary volumes that are cached - that
essentially swap to disk. You have to either set an environment variable
to force caching or make a library call. You also have to play around a
bit to make sure that the temp files live where you have disk space (if
/tmp is not large enough).

I've just had a look - I have an old example that tries to do this. You
might want to play around with it. I've attached it.

Note that you can do caching in two modes: random access and slice access.
Random access caches blocks of data. Unfortunately, reading a single block
requires reading much more than the block since files are organized by
rows. Slice access caches rows and so it does not thrash so badly. Random
access will be better on memory in the general case, but really needs an
underlying data organization that has a similar block structure (not yet
supported in minc). So use slice access. You will probably be iterating
over rows anyway, so it should work for you.

Just for comparison, one test case that I ran took 55 seconds without
caching, 97 seconds with slice access and 430 seconds with random access.
This was with 85 MB of image data on a 64 MB machine, so obviously it was
faster to let the machine swap than do caching. (Hmmm... that's not very
encouraging!) Anyway, play with it and see how it goes - much depends on
how you access the data.

Have fun!

            Peter
----
            Peter Neelin (neelin@bic.mni.mcgill.ca)



---2066828793-1237723228-1070421318=:7013171
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="volio_cachetest.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SGI.4.44.0312022215180.7013171@shadow.bic.mni.mcgill.ca>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="volio_cachetest.c"

LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU5JIEhlYWRlciAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQE5BTUUgICAg
ICAgOiB2b2xpb19zbGljZXRlc3QNCkBJTlBVVCAgICAgIDogaW5wdXQgZmls
ZW5hbWUNCkBPVVRQVVQgICAgIDogdGVtcG9yYXJ5IGZpbGVuYW1lIGJhc2Ug
YW5kIG91dHB1dCBuYW1lDQpAREVTQ1JJUFRJT046IFByb2dyYW0gdG8gdGVz
dCB2b2x1bWUgY2FjaGluZy4NCkBNRVRIT0QgICAgIDogDQpAR0xPQkFMUyAg
ICA6IA0KQENSRUFURUQgICAgOiBNYXJjaCAyMywgMjAwMSAoUGV0ZXIgTmVl
bGluKQ0KQE1PRElGSUVEICAgOiANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8
c3RkbGliLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8bGlt
aXRzLmg+DQojaW5jbHVkZSA8ZmxvYXQuaD4NCiNpbmNsdWRlIDx2b2x1bWVf
aW8uaD4NCg0KI2RlZmluZSBOVk9MUyAxMA0KDQojZGVmaW5lIERFRkFVTFRf
Q0FDSEVfVEhSRVNIT0xEICg4MCoxMDI0KjEwMjQpDQoNCiNkZWZpbmUgQ0FD
SEVfU0laRSAoMioxMDI0KjEwMjQpDQoNCiNkZWZpbmUgQ0FDSEVfQUNDRVNT
IFNMSUNFX0FDQ0VTUw0KLyogI2RlZmluZSBDQUNIRV9BQ0NFU1MgUkFORE9N
X1ZPTFVNRV9BQ0NFU1MgKi8NCg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg
KmFyZ3ZbXSkNCnsNCiAgIGNoYXIgKnByb2c7DQogICBjaGFyICppbnB1dF9m
aWxlbmFtZTsNCiAgIGNoYXIgKnRlbXBfcHJlZml4Ow0KICAgY2hhciAqb3V0
cHV0X2ZpbGVuYW1lOw0KICAgVm9sdW1lIGludm9sdW1lLCB0ZW1wdm9sdW1l
W05WT0xTXSwgb3V0dm9sdW1lOw0KICAgY2hhciAqZGltZW5zaW9uX25hbWVf
bGlzdFtdID0geyIiLCAiIiwgIiJ9Ow0KICAgaW50IGl2b2w7DQogICBpbnQg
c2l6ZXNbM107DQogICBSZWFsIHZhbHVlLCB0ZW1wdmFsdWU7DQogICBkb3Vi
bGUgcGFyYW1ldGVyc1tdID0gezEuMCwgMi4wLCAzLjAsIDEuMCwgMi4wLCAz
LjAsIDEuMCwgMi4wLCAzLjAsIDEuMH07DQogICBkb3VibGUgbWluaW11bSwg
bWF4aW11bTsNCiAgIG5jX3R5cGUgZGF0YV90eXBlOw0KICAgaW50IHNpZ25l
ZF9mbGFnOw0KICAgUmVhbCB2b3hlbF9taW4sIHZveGVsX21heDsNCiAgIGNo
YXIgdGVtcF9maWxlX25hbWVbMjU2XTsNCiAgIGNoYXIgKnRlbXBfZmlsZV9z
dWZmaXg7DQogICBpbnQgaXgsIGl5LCBpejsNCg0KICAgLyogQ2hlY2sgYXJn
dW1lbnRzICovDQogICBwcm9nID0gYXJndlswXTsNCiAgIGlmIChhcmdjICE9
IDQpIHsNCiAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAl
cyBpbmZpbGUubW5jIHRlbXBwcmVmaXggb3V0ZmlsZS5tbmNcbiIsDQogICAg
ICAgICAgICAgICAgICAgICBwcm9nKTsNCiAgICAgIHJldHVybiBFWElUX0ZB
SUxVUkU7DQogICB9DQogICBpbnB1dF9maWxlbmFtZSA9IGFyZ3ZbMV07DQog
ICB0ZW1wX3ByZWZpeCA9IGFyZ3ZbMl07DQogICBvdXRwdXRfZmlsZW5hbWUg
PSBhcmd2WzNdOw0KDQogICAvKiBSZWFkIGluIHRoZSBpbnB1dCB2b2x1bWUg
Ki8NCiAgICh2b2lkKSBwcmludGYoIlJlYWRpbmcgaW5wdXQgdm9sdW1lXG4i
KTsNCiAgIGlmIChpbnB1dF92b2x1bWUoaW5wdXRfZmlsZW5hbWUsIDMsIGRp
bWVuc2lvbl9uYW1lX2xpc3QsIA0KICAgICAgICAgICAgICAgICAgICBOQ19G
TE9BVCwgVFJVRSwgMC4wLCAwLjAsIA0KICAgICAgICAgICAgICAgICAgICBU
UlVFLCAmaW52b2x1bWUsIE5VTEwpICE9IE9LKSB7DQogICAgICAodm9pZCkg
ZnByaW50ZihzdGRlcnIsICIlczogRXJyb3IgcmVhZGluZyB2b2x1bWUgJXNc
biIsDQogICAgICAgICAgICAgICAgICAgICBwcm9nLCBpbnB1dF9maWxlbmFt
ZSk7DQogICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOw0KICAgfQ0KDQogICAv
KiBDcmVhdGUgdGhlIHByZWZpeCBmb3IgdGVtcG9yYXJ5IGZpbGUgbmFtZXMg
Ki8NCiAgICh2b2lkKSBzcHJpbnRmKHRlbXBfZmlsZV9uYW1lLCAiJXNfJWQi
LCB0ZW1wX3ByZWZpeCwgKGludCkgZ2V0cGlkKCkpOw0KICAgdGVtcF9maWxl
X3N1ZmZpeCA9ICZ0ZW1wX2ZpbGVfbmFtZVtzdHJsZW4odGVtcF9maWxlX25h
bWUpXTsNCg0KICAgLyogQ3JlYXRlIHRoZSB0ZW1wb3Jhcnkgdm9sdW1lcyAq
Lw0KI2lmbmRlZiBOT0NBQ0hFDQogICAodm9pZCkgcHJpbnRmKCJTZXR0aW5n
IHVwIGNhY2hlZCB0ZW1wIHZvbHVtZXNcbiIpOw0KICAgc2V0X25fYnl0ZXNf
Y2FjaGVfdGhyZXNob2xkKDApOw0KICAgc2V0X2RlZmF1bHRfbWF4X2J5dGVz
X2luX2NhY2hlKENBQ0hFX1NJWkUpOw0KICAgc2V0X2NhY2hlX2Jsb2NrX3Np
emVzX2hpbnQoQ0FDSEVfQUNDRVNTKTsNCiNlbHNlDQogICAodm9pZCkgcHJp
bnRmKCJTZXR0aW5nIHVwIHRlbXAgdm9sdW1lcyBpbiBtZW1vcnlcbiIpOw0K
I2VuZGlmDQogICBmb3IgKGl2b2w9MDsgaXZvbCA8IE5WT0xTOyBpdm9sKysp
IHsNCiAgICAgIHRlbXB2b2x1bWVbaXZvbF0gPSANCiAgICAgICAgIGNvcHlf
dm9sdW1lX2RlZmluaXRpb24oaW52b2x1bWUsIE5DX0ZMT0FULCBUUlVFLCAw
LjAsIDAuMCk7DQojaWZuZGVmIE5PQ0FDSEUNCiAgICAgICh2b2lkKSBzcHJp
bnRmKHRlbXBfZmlsZV9zdWZmaXgsICJfJWQubW5jIiwgaXZvbCk7DQogICAg
ICAodm9pZCkgcHJpbnRmKCJDYWNoaW5nIHZvbHVtZSB0byAlc1xuIiwgdGVt
cF9maWxlX25hbWUpOw0KICAgICAgc2V0X2NhY2hlX291dHB1dF92b2x1bWVf
cGFyYW1ldGVycyh0ZW1wdm9sdW1lW2l2b2xdLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2ZpbGVfbmFtZSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkNfRkxP
QVQsIFRSVUUsIDAuMCwgMC4wLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9maWxlbmFtZSwgDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2b2xpbyB0ZXN0IHRl
bXBvcmFyeSBmaWxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7DQojZW5kaWYNCiAgIH0NCg0KICAgLyogUmVz
ZXQgdGhlIGNhY2hlIHRocmVzaG9sZCAqLw0KI2lmbmRlZiBOT0NBQ0hFDQog
ICBzZXRfbl9ieXRlc19jYWNoZV90aHJlc2hvbGQoREVGQVVMVF9DQUNIRV9U
SFJFU0hPTEQpOw0KI2VuZGlmDQoNCiAgIC8qIEdldCBzaXplIG9mIGRpbWVu
c2lvbnMgKi8NCiAgIGdldF92b2x1bWVfc2l6ZXMoaW52b2x1bWUsIHNpemVz
KTsNCg0KICAgLyogTG9vcCBvdmVyIHZveGVscywgY2FsY3VsYXRpbmcgdGVt
cG9yYXJ5IHZvbHVtZXMgKi8NCiAgICh2b2lkKSBwcmludGYoIkNhbGN1bGF0
aW5nIHRlbXBvcmFyeSB2b2x1bWVzXG4iKTsNCiAgIGZvciAoaXo9MDsgaXog
PCBzaXplc1swXTsgaXorKykgew0KICAgICAgZm9yIChpeT0wOyBpeSA8IHNp
emVzWzFdOyBpeSsrKSB7DQogICAgICAgICBmb3IgKGl4PTA7IGl4IDwgc2l6
ZXNbMl07IGl4KyspIHsNCg0KICAgICAgICAgICAgdmFsdWUgPSBnZXRfdm9s
dW1lX3JlYWxfdmFsdWUoaW52b2x1bWUsIGl6LCBpeSwgaXgsIDAsIDApOw0K
DQogICAgICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIHRlbXBvcmFyeSB2YWx1
ZXMgKi8NCiAgICAgICAgICAgIGZvciAoaXZvbD0wOyBpdm9sIDwgTlZPTFM7
IGl2b2wrKykgew0KICAgICAgICAgICAgICAgdGVtcHZhbHVlID0gc2luKHZh
bHVlICogKGl2b2wrMS4wKSk7DQogICAgICAgICAgICAgICBzZXRfdm9sdW1l
X3JlYWxfdmFsdWUodGVtcHZvbHVtZVtpdm9sXSwgaXosIGl5LCBpeCwgMCwg
MCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cHZhbHVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgIH0N
CiAgIH0NCg0KICAgLyogQ3JlYXRlIHRoZSBvdXRwdXQgdm9sdW1lICovDQog
ICBvdXR2b2x1bWUgPSBjb3B5X3ZvbHVtZV9kZWZpbml0aW9uKGludm9sdW1l
LCBOQ19GTE9BVCwgVFJVRSwgMC4wLCAwLjApOw0KDQogICAvKiBMb29wIG92
ZXIgdm94ZWxzIGFnYWluLCBjYWxjdWxhdGluZyBvdXRwdXQgdmFsdWVzICov
DQogICAodm9pZCkgcHJpbnRmKCJDYWxjdWxhdGluZyBvdXRwdXQgdm9sdW1l
XG4iKTsNCiAgIG1pbmltdW0gPSBEQkxfTUFYOw0KICAgbWF4aW11bSA9IC1E
QkxfTUFYOw0KICAgZm9yIChpej0wOyBpeiA8IHNpemVzWzBdOyBpeisrKSB7
DQogICAgICBmb3IgKGl5PTA7IGl5IDwgc2l6ZXNbMV07IGl5KyspIHsNCiAg
ICAgICAgIGZvciAoaXg9MDsgaXggPCBzaXplc1syXTsgaXgrKykgew0KDQog
ICAgICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIG91dHB1dCB2YWx1ZSAqLw0K
ICAgICAgICAgICAgdmFsdWUgPSAwLjA7DQogICAgICAgICAgICBmb3IgKGl2
b2w9MDsgaXZvbCA8IE5WT0xTOyBpdm9sKyspIHsNCiAgICAgICAgICAgICAg
IHRlbXB2YWx1ZSA9IA0KICAgICAgICAgICAgICAgICAgZ2V0X3ZvbHVtZV9y
ZWFsX3ZhbHVlKHRlbXB2b2x1bWVbaXZvbF0sIGl6LCBpeSwgaXgsIDAsIDAp
Ow0KICAgICAgICAgICAgICAgdmFsdWUgKz0gcGFyYW1ldGVyc1tpdm9sXSAq
IHRlbXB2YWx1ZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLyog
U2F2ZSB0aGUgdmFsdWUgKi8NCiAgICAgICAgICAgIHNldF92b2x1bWVfcmVh
bF92YWx1ZShvdXR2b2x1bWUsIGl6LCBpeSwgaXgsIDAsIDAsIHZhbHVlKTsN
Cg0KICAgICAgICAgICAgLyogS2VlcCB0cmFjayBvZiB0aGUgcmFuZ2UgKi8N
CiAgICAgICAgICAgIGlmICh2YWx1ZSA8IG1pbmltdW0pIG1pbmltdW0gPSB2
YWx1ZTsNCiAgICAgICAgICAgIGlmICh2YWx1ZSA+IG1heGltdW0pIG1heGlt
dW0gPSB2YWx1ZTsNCg0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KDQog
ICAvKiBTZXQgdGhlIHJhbmdlIG9mIHRoZSBkYXRhICovDQogICBzZXRfdm9s
dW1lX3JlYWxfcmFuZ2Uob3V0dm9sdW1lLCBtaW5pbXVtLCBtYXhpbXVtKTsN
Cg0KICAgLyogU2F2ZSB0aGUgZmlsZSwgY29weWluZyB0aGUgZGF0YSB0eXBl
IGFuZCByYW5nZSBmcm9tIHRoZSBpbnB1dA0KICAgICAgdm9sdW1lICovDQog
ICBkYXRhX3R5cGUgPSBnZXRfdm9sdW1lX25jX2RhdGFfdHlwZShpbnZvbHVt
ZSwgJnNpZ25lZF9mbGFnKTsNCiAgIHZveGVsX21pbiA9IGdldF92b2x1bWVf
dm94ZWxfbWluKGludm9sdW1lKTsNCiAgIHZveGVsX21heCA9IGdldF92b2x1
bWVfdm94ZWxfbWF4KGludm9sdW1lKTsNCiAgICh2b2lkKSBwcmludGYoIlNh
dmluZyB0aGUgb3V0cHV0IHZvbHVtZVxuIik7DQogICBvdXRwdXRfbW9kaWZp
ZWRfdm9sdW1lKG91dHB1dF9maWxlbmFtZSwgZGF0YV90eXBlLCBzaWduZWRf
ZmxhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm94ZWxfbWluLCB2
b3hlbF9tYXgsIG91dHZvbHVtZSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRfZmlsZW5hbWUsICJ0ZXN0X3Byb2dyYW0iLCBOVUxMKTsNCg0K
ICAgLyogRGVsZXRlIHRoZSB2b2x1bWVzICovDQogICAodm9pZCkgcHJpbnRm
KCJDbGVhbmluZyB1cFxuIik7DQogICBkZWxldGVfdm9sdW1lKGludm9sdW1l
KTsNCiAgIGRlbGV0ZV92b2x1bWUob3V0dm9sdW1lKTsNCiAgIGZvciAoaXZv
bD0wOyBpdm9sIDwgTlZPTFM7IGl2b2wrKykgew0KICAgICAgZGVsZXRlX3Zv
bHVtZSh0ZW1wdm9sdW1lW2l2b2xdKTsNCiAgIH0NCg0KICAgLyogRGVsZXRl
IHRoZSB0ZW1wb3JhcnkgZmlsZXMgKi8NCiAgIGZvciAoaXZvbD0wOyBpdm9s
IDwgTlZPTFM7IGl2b2wrKykgew0KICAgICAgKHZvaWQpIHNwcmludGYodGVt
cF9maWxlX3N1ZmZpeCwgIl8lZC5tbmMiLCBpdm9sKTsNCiAgICAgICh2b2lk
KSByZW1vdmUodGVtcF9maWxlX25hbWUpOw0KICAgfQ0KDQogICByZXR1cm4g
RVhJVF9TVUNDRVNTOw0KfQ0K
---2066828793-1237723228-1070421318=:7013171--