I don't think there is a inefficiency here. It will be just one extra empty vector since all the other "real" ones are identical size. Sounds like a good strategy to me.
I'm not quite at the stage where I can profile yet. I will send if I can get it to a point where it might be significant. Thanks for the help, Wes On Tue, Jan 15, 2013 at 5:26 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote: > On Tue, Jan 15, 2013 at 4:21 PM, Weston Lowrie <wlowrie at > u.washington.edu>wrote: > >> That's interesting. If I understand you correctly, I would create a >> vector of the size I want specifically for calculating the ownership range, >> then use that on the real vectors. Sounds like that would work. >> >> In my case, with many vectors, it does not make sense to copy them to a >> resized vector every time I want them to grow leading to many creates and >> destroys. >> > > You can't dynamically resize vectors like that, and the global offsets > change when you resize. > > Please profile before jumping to the conclusion that there is some > terrible inefficiency here. Unless all your loop does is create Vecs of > different sizes, chances are that the VecCreate is insignificant. If you > have a profile in which it's a big deal, please send the profile and > explain what you are doing and why. > > >> >> Wes >> >> >> On Tue, Jan 15, 2013 at 5:15 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote: >> >>> VecGetOwnershipRange() >>> >>> You can use VecCreateMPIWithArray() using your own array preallocated to >>> be as long as you want. If you profile, you'll probably find this is not a >>> meaningful optimization. >>> >>> >>> On Tue, Jan 15, 2013 at 4:12 PM, Weston Lowrie <wlowrie at uw.edu> wrote: >>> >>>> Hi, >>>> >>>> I have a problem where I want to grow the size of a Vec (or Mat) many >>>> times during program execution. I think for efficiency purposes I would >>>> just want to allocate a maximum size, and then only use the portion that I >>>> need. In the vector case, it is rather simple, just use the beginning of >>>> the vector, and add values to the end. >>>> >>>> This leads to me to the problem of processor ownership ranges. From a >>>> previous email I noticed one could use the PetscLayout object and keep >>>> adjusting it as the useful part of the vector grows. Does this sound like >>>> a good approach? >>>> >>>> I noticed the PetscLayout is not available in Fortran bindings. Any >>>> workarounds for this? I suppose I can just manually calculate the >>>> processor ranges? >>>> >>>> Thanks for the help, >>>> Wes >>>> >>>> >>>> >>>> >>>> >>> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20130115/160832e5/attachment-0001.html>
