Is there a way to designate TD to run on a specific GPU? I’m working on a multi-GPU system where I will be spawning multiple TD instances to handle several video device in streams. Each stream has a lot of GPU intense processing going on, and I’d like to have them run as compute processes on GPUs that have no outputs.
It seems that TD can sortof set GPU output by selecting which monitor to display on, which then processes the TD data on the GPU that this monitor is attached to.
I’m in a situation, however, where I have 5 GPUs but only one is connected to displays. The extra GPUs are intended to operate for compute power.
Has anyone done anything like this?
Thanks in advance!
I’m on a system using Quadro p5000 GPUs which have allowed me to set up a spoofed EDID.
I have done so for each GPU which does not have a physical monitor attached. I still am unable to get touch to use that GPU’s resources.
I have tried both setting the perform window to auto-launch to monitor 2 (which is in this case one of the spoofed monitors), and I have also tried launching from the command line with the additional
-gpuformonitor 2
And, according to Task Manager, in both scenarios touch still consumes resources from GPU 0 rather than any other GPU, regardless of the fact that it successfully “displays” on this spoofed monitor.
Yep,
that’s the page which led me to using the -gpuformonitor argument
When launching touch with that additional argument, Task Manager still shows touch running on GPU 0, even though touch is correctly launching on monitor 2 (a spoofed monitor on GPU 2)
I’ve attached the monitor file contents as an image to preserve the formatting
I do have Mosaic enabled, but only on GPU 1
Unfortunately it is a requirement for this installation so I could disable it for testing but this needs to work with mosaic enabled due to the warping software we’ll be using. This is a long term installation so manual warp/calibration isn’t an option.
Correct, TD is running on GPU 0 regardless of what monitor I attempt to assign it to using -gpuformonitor n
In the Monitor Dat I’ve copied above, the mosaic GPU is GPU 4 although in Task Manager I don’t see anything running on GPU 4 most of the time. Occasionally there is a system process but otherwise nothing.
Offhand it feels like that -gpuformonitor argument isn’t getting picked up. What happens if you set the value to 10? Do you get a dialog box saying it’s out of range?
How are you giving the argument to TD? From the command line?
Yes, it appears that -gpuformonitor isn’t getting picked up.
I’m launching from command line, yes, using the commands provided in the wiki to keep it straightfoward.
This doens’t seem 100% consistent, but it does seem that if I move the cmd window to another GPU and launch TD from there, TD will run on whichever GPU is connected to the monitor that the command window was on when it launched TD. I’m still trying to find a consistent rule here, but not quite finding it. It is definitely still not behaving as expected
set APPPATH=C:\Program Files\Derivative\TouchDesigner099\bin
start “%APPPATH%” “%APPPATH%\TouchDesigner099” -gpuformonitor 2 monitor_test.toe
the project monitor_test.toe has its perform window set to run in window 2 which is a spoofed monitor running on GPU 2.
When starting up, the project does successfully start on that spoofed monitor, but continues to use resources from GPU 0
Hmm, for me if I put 20 as the gpu index I get a warning message box, which shows it’s getting picked up.
Do you have a system with a more basic setup, just 1 or 2 GPUs, with regular connections, to see if it works on those. Trying to determine if the bug is specific to your setup.
this set up is actually less expansive then 2 quadro and a sync card.
what do you think about this plan ??
i’ve already read all the info in wiki about multiple gpu. I notice that in windows, if i choose a main monitor and i run a TD file on it, and display it everywhere, the calculation will be made on the GPU connected to this monitor.
any further info about Gpu signal flow is really appreciated.