I have several VL patches, that handle very big sets of data.
These are calculated only once at the start of my application and then fed into dynamic buffers for computations on the GPU. Now the problem is that these VL patches have an enormous amount of ticks, just for serving the data back to vvvv.
I actually only want the data once - sample and hold style. Is there a way to evaluate / call the output part of the VL patch only for one frame? And is there a general method of deevaluating VL patches. I put them in vvvv subpatches and deevaluated these, but this seems unnecessarily hacky.
Seems like this is common practice for now.
Maybe switch right before your outputs inside VL to disable the graph upstream? Haven’t tested though …
Another strategy is to put the computation in an ‘if’ region as demonstrated here or a ‘ManagedProcess’ region for stateful processes.
The data is only computed on the bang and has to be collected at the end using a pad or a S+H node in VL. This bang could come from an ‘OnOpen’ node in vvvv.
you can also add an operation to your VL supatch that is only called when you need it to be calculated. or put it into an async region.
in any case store the result into a pad and read the data in the mainloop from there. use the process node like this:
Thanks for the further suggestions.
And right, I’m using conditional evaluation of parts of the patch extensively already. This is all great, but my problem is still that the “Store result in pad” and “Output whenever Update is called” part already is ridiculously expensive if you have spreads with several hundrets of thousands of elements (Which you reach easily when working with geometry). So what I really would need is a way to control the Update function I guess.
Actually as I read @tonfilm’s answer again, I will see if this method improves anything.
Best way to upload data to the GPU from VL is the craftlie MeshJoin node… It goes directly to the GPU without touching any vvvv wrapper code. It only updates the geometry if you call update on it. You can get the geometry with the get data node in vvvv. See the Renderer module for an example…