Using Multiple Graphic Cards
Installing multiple graphics card in your computer can have benefits in some cases, depending on your situation. The most common case is adding support for more monitors, however you need to setup you system in a very specific was to get optimal performance.
See also Multiple Monitors
All of these pointers are only related to Nvidia, as those are the only cards we've tested extensively. There are a few possible ways to use multiple graphic cards in a single system:
- GPU Affinity on Quadros: GPU affinity binds a single instance of TouchDesigner (one process) to a single GPU. With multiple GPUs in the system you can have multiple instances of TouchDesigner, each bound to a unique GPU. This avoids any GPU->GPU communication and avoids the TouchDesigner processes taking up each others GPU time. You process could be using it's 2 outputs to send data to projectors, while the 2nd GPU is connected to monitors you are using to run a 2nd TouchDesigner process that is controlling the show (sending commands and data streams to the first instance via the various networking OPs). Be sure to use the latest graphic drivers to ensure proper GPU Affinity functionality on Windows 7.
- SLI Mosaic on Quadros: This mode binds multiple identical GPUs together to drive a large array of outputs. Using this you can output to 4-8 monitors, which seem like a single large monitor to Windows.
- SLI on Geforces or Quadros: This links multiple cards together to seem like a single virtual to the OS. The goal is to use the power of both cards to generate content that will be output from the outputs of one card. This config does not give you more outputs, just more rendering power. We have not tested to see what benefits are gained from using this configuration.
- Multiple cards used as-is in Windows 7: The Windows 7 drivers from Nvidia are different than Windows XP in that all the work for all the processes get sent to the fastest GPU, and only the final images are sent across to the other GPUs to get displayed on-screen. This is different from XP where all the rendering commands were sent to all the GPUs and your system was essentially bottle-necked by the slowest GPU. This way of working can have a large performance impact on your project and is not yet recommended, but may be appropriate in certain situations.
SLI Mosaic is a feature available on Nvidia Quadro cards that allows applications to span multiple monitors with good performance. SLI Mosiac should not be confused with regular SLI, which involves connecting multiple cards for better single or dual screen performances.
You can see a table of supported SLI Mosaic configurations here. In particular take note that not all cards support 'Seamless' display, which means you will see tearing on your outputs. Also to get Premium SLI Mosaic (which is also needed for tear free output), you need one of the Nvidia certifed systems listed here.
In a Non-SLI configuration the two (or more) graphic cards are each connected to their own monitor(s), thus expanding the size of the desktop. This may be a good solution when you need many monitors and you need them to be different resolutions (since DualView doesn't work very well on Windows XP). It is also a good solution if you are having Horizontal Tearing issues because it allows you to avoid connecting different monitor models to the same graphics card.
GPU Affinity is not supported on Geforce level cards. It is not recommended that you use multiple Geforce cards in a single system. In Windows 7 all the work will get done by the fastest GPU and then final images will be copied to the other GPUs to be displayed on-screen. However the performance of this vs. Quadros is unknown (and even on Quadro's it's not a suggested way to work).
We can not offer support for graphics issues caused by using multiple Geforce cards in a single system.
Quadro Cards and GPU Affinity
GPU Affinity is a feature only available on Nvidia Quadro cards. This feature binds an instance of TouchDesigner to only specific graphic card(s). Using this feature you can create content for many monitors while at the same time splitting up the work required to create this content. Each new instance of TouchDesigner will run on it's own CPU also, so this technique also makes good use of Multi-Core CPUs. It's undocumented which Quadros will work correctly together for GPU affinity, so to be safe we suggest using Quadros from the same generation.
Using the latest Nvidia graphics drivers, GPU Affinity now works correctly on Windows 7. Unlike Windows XP, you can drag windows bound to one GPU to a monitor connected to a different GPU and the window contents will still be visible. This doesn't mean GPU Affinity isn't working, it just means the data is getting copied between GPUs. This is fine for creating your files, but during playback you should keep the windows only on monitors connected to the GPU that the process is bound to.
This feature is used by using the -gpu command line option when launching TouchDesigner. The GPUs are numbered starting at 0. For example if you only want run two instances of TouchDesigner, each running on the first and second graphic card respectively, you'd launch them like this:
touchdesigner -gpu 0 mytoefile.toe touchdesigner -gpu 1 myothertoefile.toe
GPU index 0 is the first GPU, GPU index 1 is the second GPU etc. If in affinity mode 0 the existence of the other monitors connected to graphic cards that the instance of TouchDesigner isn't bound to will be hidden from that instance of TouchDesigner. Information about monitors and the desktop resolution, will be limited to the screen area that that instance of TouchDesigner can actually work on.
You can also set a windows environment variable TOUCH_GPU_AFFINITY to the GPU number you want Touch to run on by default if the -gpu option isn't specified. TOUCH_GPU_AFFINITY=0 or TOUCH_GPU_AFFINITY=1 for example.
Connected SLI configurations
SLI is a feature where two graphic cards are linked together to become one virtual graphics card. When this happens only one graphic card can be connected to monitor(s), the other card is a slave that used just for extra processing power. The idea behind this that the work will be split between the two graphic cards. We haven't done much testing to see if there are any benefits to using SLI configurations with TouchDesigner. If you want to try, we suggest using the Alternate Frame Rendering method of SLI, as opposed to the Split Frame Rendering method. To see any speed improvements you would first need to ensure that your project is GPU bottle-necked. See the Optimize article for more information on determining bottlenecks.
See also Multiple Monitors