From help-octave-request at bevo dot che dot wisc dot edu Wed Oct 29 11:17:40 2003 Subject: Re: Realtime cost of call by value From: Glenn Golden To: taltman at lbl dot gov Cc: help-octave at bevo dot che dot wisc dot edu Date: Wed, 29 Oct 2003 10:16:21 -0700 This is a multipart MIME message. --==_Exmh_-20910991380 Content-Type: text/plain Hi Tomer, taltman at lbl dot gov writes: > > I just did a set of timing tests, and I believe that there might be > some fundamental difference. > I agree. In fact, plotting the call by value and "call by global" timing separately, rather than the difference between the two, shows it very clearly. The call by value time increases roughly linearly in the size of the array, which is consistent with copy down, while the global times remain nearly flat. (There is some small growth in the "call by global", but the absolute value is small [if you correct factor of 10 error in your program :)] and is not important for my application.) Thanks very much for demonstrating this! It's good news because it's an existence proof that it is possible to operate on globals efficiently, i.e. without copy down. This still leaves open my original question though: How does one go about realizing this behavior in a DLD? (Unfortunately, I can't use the interpter for what I'm doing for speed reasons, so I have to do it in a DLD.) When I operate on globals along the lines of what was suggested in the mailing list from several months back (at least as I understood it), i.e. OV t = get_global_value("foo"); A = t.matrix_value(); A(0,0) = scalar; t = A; set_global_value("foo", t) then the timing growth is roughly linear in the size of foo, indicating that copy down is occurring. (The overhead of the symbol table lookup washes out for reasonably large foos.) So what's the correct approach? How does the interpreter deal with globals in such a way that copy-down is defeated? Is it via the link_to_global_variable() function? If so, how is it used? I have tried to do my homework here and figure it out myself from the sources, but unsuccessfully so far. Anyone? (My timing DLD attached, showing several approaches, none of which work.) - Glenn --==_Exmh_-20910991380 Content-Type: text/plain ; name="hmmmwrap.cc" Content-Description: hmmmwrap.cc Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hmmmwrap.cc" I2luY2x1ZGUgPG9jdGF2ZS9vY3QuaD4KI2luY2x1ZGUgPG9jdGF2ZS92YXJpYWJsZXMuaD4K I2luY2x1ZGUgPHN5cy90aW1lLmg+CgoKdHlwZWRlZglvY3RhdmVfdmFsdWVfbGlzdAlPVkw7 CnR5cGVkZWYJb2N0YXZlX3ZhbHVlCQlPVjsKCi8vCi8vIFN0YXRpY3MgZm9yIHRpbWluZyBy b3V0aW5lcy4KLy8Kc3RhdGljCWxvbmcJcnRfdXNlY190dTsKc3RhdGljCWxvbmcJcnRfdXNl Y190czsKc3RhdGljCXN0cnVjdAl0aW1ldmFsCXRtc3RyOwoKLy8KLy8gRndkLgovLwp2b2lk CQlydF91c2VjX2luaXQoKTsKdm9sYXRpbGUgZG91YmxlCXJ0X3VzZWMoKTsKT1ZMIAkJaG1t bTEoT1ZMIGFyZ3MpOwp2b2lkCQlobW1tMigpOwp2b2lkCQlobW1tMygpOwoKCgovLwovLyBo bW1td3JhcCgpCi8vCi8vIERMRCB3cmFwcGVyIGZvciB0aGUgaG1tbU4oKSB0aW1pbmcgdGVz dCBmdW5jdGlvbnMsIGJlbG93LgovLwpERUZVTl9ETEQoaG1tbXdyYXAsIGFyZ3MsICwgIlVz YWdlOiBobW1td3JhcChsZW5ndGgpXG4iKQp7CiAgICBPVkwJcmV0dmFsLCB0bXA7CiAgICBm bG9hdAkJZXQ7CgogICAgcnRfdXNlY19pbml0KCk7CS8vIENsaWNrLgoKCWhtbW0zKCk7CS8v IFRlc3QgZnVuY3Rpb24uCgogICAgZXQgPSBydF91c2VjKCk7CS8vIENsaWNrLgoKICAgIGZw cmludGYoc3RkZXJyLCAiZXQgPSAlLjFmIHVzZWNcbiIsIGV0KTsKCiAgICByZXR2YWwoMCkg PSAwOwogICAgcmV0dXJuIHJldHZhbDsKfQoKCgovLwovLyBobW1tMSgpCi8vCi8vIFJlYWQg dGhlICgxLDEpIGVsZW1lbnQgb2YgYXJndW1lbnQgTWF0cml4LiBTaG91bGQgbm90IGNhdXNl IGNvcHkgZG93bgovLyAoYW5kIGRvZXNuJ3QsIGFzIGxvbmcgYXMgTWF0cml4IGEgaXMgZGVj bGFyZWQgY29uc3QsIGFzIEpvaG4gcG9pbnRlZCBvdXQuKQovLwpPVkwgIGhtbW0xKE9WTCBh cmdzKQp7CiAgICBPVkwJcmV0dmFsOwogICAgZG91YmxlCQlkOwogICAgCiAgICByZXR2YWwo MCkgPSAtOTk5OwoKICAgIGNvbnN0IE1hdHJpeCBhID0gYXJncygwKS5tYXRyaXhfdmFsdWUo KTsKICAgIGQgPSBhKDAsIDApOwoKICAgIC8vCiAgICAvLyBUaGUgZm9sbG93aW5nIGlzIG9u bHkgdG8gY29udmluY2UgY29tcGlsZXIgbm90IHRvIG9wdGltaXplIGF3YXkKICAgIC8vIHRo ZSBhYm92ZSBhc3NpZ25tZW50ICBkID0gYSgwLCAwKS4gCiAgICAvLwogICAgaWYgKGFyZ3Mu bGVuZ3RoKCkgPT0gLTEyMzQpCS8vIENvbXBpbGVyIGRvZXNuJ3Qga25vdyB0aGlzIGlzIGlt cG9zc2libGUKICAgIAlmcHJpbnRmKHN0ZGVyciwgIkltcG9zc2libGUgICAlZlxuIiwgZCk7 CiAgICAKICAgIHJldHVybiByZXR2YWw7Cn0KCgoKLy8KLy8gaG1tbTIoKQovLwovLyBNb2Rp ZnkgdGhlICgxLDEpIGVsZW1lbnQgb2YgZ2xvYmFsICJmb28iLCB1c2luZyBnZXQvc2V0X2ds b2JhbF92YWx1ZSgpLgovLyBFeGVjdXRpb24gdGltZSByb3VnaGx5IHByb3BvcmF0aW9uYWwg dG8gbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGZvbywKLy8gaW5kaWNhdGluZyB0aGF0IGNvcHkg ZG93biBvY2N1cnMuCi8vCnZvaWQgaG1tbTIoKQp7CiAgICBjaGFyCWdsb2JuYW1lW10gPSAi Zm9vIjsKCiAgICBpZiAoIWlzX2dsb2JhbGx5X3Zpc2libGUoZ2xvYm5hbWUpKQogICAgewoJ ZnByaW50ZihzdGRlcnIsICI/IGlzX2dsb2JhbGx5X3Zpc2libGUoJXMpIGZhaWxlZFxuIiwg Z2xvYm5hbWUpOwoJcmV0dXJuOwogICAgfQoKICAgIE9WIHZhbCA9IGdldF9nbG9iYWxfdmFs dWUoZ2xvYm5hbWUpOwoKICAgIE1hdHJpeCBhID0gdmFsLm1hdHJpeF92YWx1ZSgpOwogICAg YSgwLDApID0gLTk5OTk5OwogICAgdmFsID0gYTsKCiAgICBzZXRfZ2xvYmFsX3ZhbHVlKGds b2JuYW1lLCB2YWwpOwp9CgoKCi8vCi8vIGhtbW0zKCkKLy8KLy8gRmFuY2llciB2ZXJzaW9u IG9mIGhtbW0yKCksIGluIHZhaW4gYXR0ZW1wdCB0byBndWVzcy9kdXBsaWNhdGUgaG93Ci8v IGludGVycHJldGVyIGNhbiBhY2Nlc3MgZ2xvYmFscyB3aXRob3V0IGNhdXNpbmcgY29weSBk b3duLiBTYW1lIHJlc3VsdHMKLy8gYXMgaG1tbTIoKS4gIE51bWVyb3VzIHZhcmlhdGlvbnMg b24gdGhpcyB0aGVtZSBhdHRlbXB0ZWQgKHNvbWUgb2YgdGhlbQovLyBjb21tZW50ZWQgb3V0 IGhlcmUpIGJ1dCBub25lIHNlZW0gdG8gZG8gdGhlIHRyaWNrIG9mIGF2b2lkaW5nIGNvcHkK Ly8gZG93bi4gV2hhdCdzIHRoZSBtYWdpYyBmb3JtdWxhPwovLwp2b2lkIGhtbW0zKCkKewog ICAgY29uc3QgY2hhcglnbG9ibmFtZVtdID0gImZvbyI7CgogICAgLy9zeW1ib2xfcmVjb3Jk ICpzciA9IGdsb2JhbF9zeW1fdGFiLT5sb29rdXAoZ2xvYm5hbWUpOwogICAgc3ltYm9sX3Jl Y29yZCAqc3IgPSBjdXJyX3N5bV90YWItPmxvb2t1cChnbG9ibmFtZSk7CgogICAgaWYgKCEg c3IpCiAgICB7CglmcHJpbnRmKHN0ZGVyciwgIj8geHh4eF9zeW1fdGFibC0+bG9va3VwKCVz KSBmYWlsZWRcbiIsIGdsb2JuYW1lKTsKCXJldHVybjsKICAgIH0KCiAgICAvL3NyLT5wcmlu dF9pbmZvKG9jdGF2ZV9zdGRvdXQpOwogICAgCiAgICAvL3NyLT51bnByb3RlY3QoKTsJCQkv LyBObyBoZWxwLgoKICAgIE9WIHZhbCA9IHNyLT5kZWYoKTsKICAgIE1hdHJpeCBhID0gdmFs Lm1hdHJpeF92YWx1ZSgpOwogICAgYSgwLDApID0gLTk5OTk5OwkJLy8gQ29weSBkb3duIG9j Y3VycyByaWdodCBoZXJlLi4uCiAgICB2YWwgPSBhOwkJCS8vIC4uLm5vdCBoZXJlLi4uCiAg ICBzci0+ZGVmaW5lKHZhbCk7CQkvLyAuLi5hbmQgbm90IGhlcmUuCn0KCgoKCi8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci8vCi8vIFRpbWluZyByb3V0aW5lcy4KLy8KLy8gcnRfdXNlYygpIHJl dHVybnMgZWxhc3BlZCB1c2VjIHNpbmNlIHByZXZpb3VzIGNhbGwgdG8gcnRfdXNlY19pbml0 KCkuCi8vCnZvaWQgcnRfdXNlY19pbml0KCkKewogICAgZ2V0dGltZW9mZGF5KCZ0bXN0ciwg TlVMTCk7CiAgICBydF91c2VjX3R1ID0gdG1zdHIudHZfdXNlYzsKICAgIHJ0X3VzZWNfdHMg PSB0bXN0ci50dl9zZWM7Cn0KCnZvbGF0aWxlIGRvdWJsZSBydF91c2VjKCkKewogICAgZG91 YmxlCWQ7CgogICAgZ2V0dGltZW9mZGF5KCZ0bXN0ciwgTlVMTCk7CiAgICBkID0gKChkb3Vi bGUpdG1zdHIudHZfc2VjIC0gKGRvdWJsZSlydF91c2VjX3RzKSoxZTYgKwoJCSgoZG91Ymxl KXRtc3RyLnR2X3VzZWMgLSAoZG91YmxlKXJ0X3VzZWNfdHUpOwogICAgcmV0dXJuIGQ7Cn0K --==_Exmh_-20910991380-- ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------