Jump to content
Readicculus

GPU in Houdini

Recommended Posts

Could someone please explain how exactly Houdini uses the GPU in a few different scenerios? Apart from drawing the viewport, what else is actually going on under the hood? How and when does Houdini use the GPU over the CPU? or both?

 

Say you have two 4 2080ti's linked in pairs with NVLink. Does Houdini just use one pair, one card, all four, or would it be best to set the environment variable in a way so that one pair is used for GPU, and the other is OpenCL; does it matter?

 

What would be most ideal? Like, if you were doing massive simulations or were to hypothetically use a Quadro RTX card, is that better overall, or more suited to just have one card? I don't really understand how it utilizes multiple cards if at all, and if another card is a bit of a waste. Could a single Titan RTX handle most anything Houdini throws at it, or would someone see a dramatic increase in performance, and how so, if they added another Titan RTX. Is that a huge advantage over the one if you linked those via NVLink?

I realize that might be great for GPU render engines like Octane or Redshift, but does it give Houdini an incredible amount of extra performance? Linking two expensive cards together like that, what kind of scenerio would be the limit in a sense? When might Houdini hit a bottleneck if a studio or professional that could afford a configuration like that?

Does OpenCL use linked cards like that too? Large amount of VRAM?

 

Thanks for helping me understand

Share this post


Link to post
Share on other sites
Posted (edited)
On 3/31/2019 at 3:13 PM, Readicculus said:

Apart from drawing the viewport, what else is actually going on under the hood?

Houdini will use the GPU for a few things that are OpenCL accelerated like Pyro simulations and FLIP simulations. Using the GPU for things like that relies on the GPU having enough memory to store all of the data so at some point only the CPU will be able to handle the workload.

On 3/31/2019 at 3:13 PM, Readicculus said:

Say you have two 4 2080ti's linked in pairs with NVLink. Does Houdini just use one pair, one card, all four, or would it be best to set the environment variable in a way so that one pair is used for GPU, and the other is OpenCL; does it matter?

Houdini won't use more than one GPU for any given task. For example the viewport is drawn with a single GPU. A simulation that uses OpenCL will run on a single GPU. Environment variables can be used to define what card to use for what.

On 3/31/2019 at 3:13 PM, Readicculus said:

What would be most ideal? Like, if you were doing massive simulations or were to hypothetically use a Quadro RTX card, is that better overall, or more suited to just have one card?

For Houdini one higher performance GPU with more memory is a better option than multiple GPU.

On 3/31/2019 at 3:13 PM, Readicculus said:

Does OpenCL use linked cards like that too?

It can in theory but it's up to the developer to decide how to manage multiple devices, memory, etc. For a typical workstation go with the best single GPU that fits in the budget.

Edited by lukeiamyourfather
  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)
3 hours ago, lukeiamyourfather said:

It can in theory but it's up to the developer to decide how to manage multiple devices, memory, etc. For a typical workstation go with the best single GPU that fits in the budget.

I believe what you are saying is that I could code via OpenCL to uses any range of nodes, or memory use from multiple cards; but that is strictly done by allocating and instructing it to do so. Is that correct?

 

To be clear, are you saying that Houdini will not recognize 2 cards linked with NVLink? Not yet? So, two 11GB graphics cards linked won't register the VRAM as 22GB? Since it only uses one card, that memory and throughput is wasted, or not usuable or advantageous to Houdini as of now?

 

Thank you so much for the response. I think I understand much better in general, minus the above follow ups.

Edited by Readicculus

Share this post


Link to post
Share on other sites

its that's easy.  written stuff for GPU needs 2 things, a host program and a kernel. the host program is usually written mid/high level language like (C, python etc..) the host program handles data management, complies kernels etc... the host program detect hardware GPU and complies and send the kernels to the GPU and feed the kernels with Data. in Houdini the openCL wrangle is the host program. the openCL Kernels (code/snippets) can only handle the data from local GPU/Memory which it got send from the Host program (OpenCL wrangle node). current openCL wrangle Houdini does not support multi GPU's. you have write you own openCL wrangle node via houdini API to make it happen, but you have to dive deep into parallel processing and data management or the GPU's sit there waiting most of the time for Data to be moved around.  

If you rewrite nodes as openCL version, you need basic routines first. openCL is pretty low level. you need to write function like noise, PCopen, neighbours, ramp's etc...

based on lastest test Houdini does not take full advantage of shared memory nor does it use multi GPU's. Pyro or Vellum uses only little part of the GPU. I could get self written Kernels to use 100% of the GPU for simpler Operation. I know only handful software packages, which run entirely Simulation's on GPU's. I am not sure, but I think only Cuda can take advantage of NVlink right now.

 

Share this post


Link to post
Share on other sites

Gpu rendering is much simpler to parrelize than fluid simulatens. Octane could use multiple gpus because the transferd all the scene data to each gpu. The gpu's rendered the temp. Rays data and merged the rays into a final image. So it's a simple task todo.

Simulations need to be in sync for the 3d data and you must split it up on the gpu's because the data size gets quickly bigger. You also can's use a random seed and merge all the data like a gpu render octane does. So not easy todo(maybe in some years possible with vulkan) and even ocatne couldn't hand in the last decade custom attribute (more then two).

Share this post


Link to post
Share on other sites
Posted (edited)

Appreciate the responses and info @Mandrake0 @schwungsau @lukeiamyourfather

 

I was reading up a bit, and came across this.  https://www.servethehome.com/dual-nvidia-titan-rtx-review-with-nvlink/3/

So, the NVLink is definitely not being used in Houdini, but would be for GPU renderers like Octane and Redshift-eventually correct? Sorry for redundant question, English is not my native language, and I had trouble following some sentences above.

Edited by Readicculus

Share this post


Link to post
Share on other sites

Redshift and octane are under development for nvlink support. 

When houdini will add GPU rendering is a open question for some time. It could(speculation) be H18 or later.

Share this post


Link to post
Share on other sites
9 hours ago, Mandrake0 said:

When houdini will add GPU rendering is a open question for some time. It could(speculation) be H18 or later.

My fault. I wasn't referring to GPU rendering in Houdini. Meant for OpenCL memory share via NVLink in Houdini from the wrangle node; as @schwungsau pointed out. I was just kind of hoping Houdini would recognize NVLink as one local GPU for use in sims without having to rewrite some miracle from the API.

 

Share this post


Link to post
Share on other sites
On 5/2/2019 at 11:36 PM, schwungsau said:

 I know only handful software packages, which run entirely Simulation's on GPU's. I am not sure, but I think only Cuda can take advantage of NVlink right now.

Andy Lomas is amazing  :)

Share this post


Link to post
Share on other sites
On 5/2/2019 at 7:58 PM, Readicculus said:

I believe what you are saying is that I could code via OpenCL to uses any range of nodes, or memory use from multiple cards; but that is strictly done by allocating and instructing it to do so. Is that correct?

Yes. In the case of Houdini, like Pyro, it doesn't use multiple OpenCL devices but in theory it could. Probably easier said than done. You could develop your own tools that use multiple GPU (nontrivial and would need appropriate skills to accomplish).

On 5/2/2019 at 7:58 PM, Readicculus said:

To be clear, are you saying that Houdini will not recognize 2 cards linked with NVLink? Not yet? So, two 11GB graphics cards linked won't register the VRAM as 22GB? Since it only uses one card, that memory and throughput is wasted, or not usuable or advantageous to Houdini as of now?

No idea about NVLink and OpenCL memory. I would assume the answer is no until someone shows it working with Houdini. Maybe email support? I wouldn't be surprised if someone at SESI has tested this scenario out.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×