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.
SLI Mosaic and EyeFinity
SLI Mosaic (Nvidia Quadro cards) and EyeFinity (AMD cards) binds multiple GPUs together to drive a large array of outputs. Using this you can output to many more monitors, which seem like a single large monitor to Windows.
Although multiple GPUs are used in this mode, the extra GPUs do not add performance to the system. In fact, using this mode will actually result in worse performance than an identical output canvas on a single GPU. This is because a single GPU is still doing all of the work, and the extra one(s) are just outputting the final image. The cost of synchronizing and moving images between the GPUs is extra overhead a single GPU configuration doesn't have.
If a splitter such as a DataPath splitter can be used with a single GPU instead of multiple GPUs, that will perform better than using multiple GPUs.
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.
A good more recent document on Mosaic Recommended Connections can be found here (Jan 2014).
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 puts multiple GPUs to work. One 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).
It is also a good solution if you are having Horizontal Tearing by avoiding connecting outputs with different resolution/refresh rate (EDIDs) to the same graphics card.
When using GPU Affinity, make sure that the windows from the TouchDesigner process which is bound to a particular GPU do not overlap onto the desktop space of the other GPU(s). If windows are shown on the wrong GPUs it will cause the data to get copied between GPUs which is what we are trying to avoid by using GPU affinity. This is acceptable for creating and editing your files, but during performance playback you should keep the windows only on monitors connected to the GPU that the process is bound to.
GPU Affinity is supported by Nvidia Quadro GPUs, and all modern AMD GPUs.
GPU Affinity is used by using the
-gpuformonitor command line option when launching TouchDesigner. This command binds the process to the GPU connected to the specified monitor. The monitors are indexed the same way they are in the Monitors DAT, which is left to right and bottom to top. You can specify any monitor that is connected to the particular GPU you want to bind to. For example if you only want run two instances of TouchDesigner, each running on the first and second graphic card respectively, and each GPU has only 1 monitor connected, you'd launch them with a .bat file like this:
set APPPATH=C:\Program Files\Derivative\TouchDesigner\bin start "%APPPATH%" "%APPPATH%\TouchDesigner" -gpuformonitor 0 C:/Projects/Playback.toe start "%APPPATH%" "%APPPATH%\TouchDesigner" -gpuformonitor 1 C:/Projects/Control.toe
To see if the binding is working as you expected, use the Monitors DAT and look at the 'affinity' column.
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 or later 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. Even on Quadro's working without GPU affinity is not a suggested way to work.
We can not offer support for graphics issues caused by using multiple Geforce cards in a single system.
SLI and Crossfire
SLI (Nvidia) and Crossfire (AMD) 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 the monitor(s), the other card is just used for extra processing power. The idea behind this that the work will be split between the two graphic cards.
Using this feature requires that the driver have a good idea of what is going to happen every frame, so it knows how to schedule the work. This works well for video games since they perform the same render passes each frame (shader, main, post-process, for example). So each game has it's own profile built into the driver for it's particular usage pattern. This does not work well for TouchDesigner since every .toe will have a different usage pattern. Thus, there is no profile built into the drivers for TouchDesigner for SLI/Crossfire. 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.
Multiple GPUs used as-is
Without GPU Affinity/SLI Mosaic all the work for 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 similar to SLI Mosaic/EyeFinity, but the driver is set up in a less optimal mode. 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.
See also Multiple Monitors