Assign TD to run on GPU with no monitors attached

Hi all,

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.

Where else can I look to trouble shoot this?

The correct process is to use the command line option -gpuformonitor x

If you place a Monitor DAT you see an ‘affinity’ column for all monitors(or spoofed edids).
Use that to check you’ve set the correct id.

The process is explained here: … nity_Usage

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

hmm…Do you have nvidia Mosaic enabled by any chance which binds the gpu’s already together? In that case disable it.

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.

well if Mosaic is only applied to one gpu that should be ok I think.
but you say you have mosaic on GPU 1 and TD runs ons GPU 0?

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

Can you share the command you using?

I’ve also been launching TD instances from within TD, and experiencing the same behavior where -gpuformonitor is ignored

Also, what build are you using? Thanks

build 2018.25000

I am using the command, from the command line:

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.

Hi ,

I need a 6display mosaic. to save money i thought a system like this :

one big GPU : m6000 24 gb (i’m working on a huge 9021x1152 ledwall)

and according to what i’m reading here; if i run TD on the monitor attached to it (m6000), all the gpu calculation will be made from it.

after i will later ask to a window comp to display all i need here :

NVS 810 with a 6 display mosaic
( … e75b99517d)

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.