Are different GPU models compatible with each other?

Can different product lines (Tesla, Quadro, GTX) from different generations be used simultaneously in the same CUDA application, with one of the GPUs also driving the GUI?

If there are constraints to such interoperability, are they documented anywhere?

i think it is more a question of the application - your code and what you have in your code

some of the functions require a min compute capability, and something like separate compilation also require a certain compute capability

reference ‘just in time’ compilation in the programming guide… should give you an idea of how the system/ driver is going to view/ approach the matter, i think

I don’t think that section of the guide talks about the different driver versions (not) stepping on each others’ toes.

I remember reading somewhere that not everything is compatible.

I was thinking of the cuda c best practices guide; sorry

15.3. Building for Maximum Compatibility

Each generation of CUDA-capable device has an associated compute capability version that indicates the feature set supported by the device (see CUDA Compute Capability). One or more compute capability versions can be specified to the nvcc compiler while building a file; compiling for the native compute capability for the target GPU(s) of the application is important to ensure that application kernels achieve the best possible performance and are able to use the features that are available on a given generation of GPU.

When an application is built for multiple compute capabilities simultaneously (using several instances of the -gencode flag to nvcc), the binaries for the specified compute capabilities are combined into the executable, and the CUDA Driver selects the most appropriate binary at runtime according to the compute capability of the present device. If an appropriate native binary (cubin) is not available, but the intermediate PTX code (which targets an abstract virtual instruction set and is used for forward-compatibility) is available, then the kernel will be compiled Just In Time (JIT) (see Compiler JIT Cache Management Tools) from the PTX to the native cubin for the device. If the PTX is also not available, then the kernel launch will fail.

So, in theory different GPU versions might work together via JIT, but I don’t see it stated explicitly that they will.

I remember reading a statement like “you cannot mix X and Y in one system” where X and Y were from {Telsa, Quadro, GeForce}, but I can’t find it now.

My memory is slightly vague, but I recall that you can install the nvidia driver/ kernel multiple times; the point being is that the default is a single installation, with the driver managing work distribution across the different devices; I have to revisit my installation notes to put this in more clarity

I have 2 GPUs in my system, with different compute capabilities; and cuda seems very willing to want to utilize both; I normally don’t allow this though, as the one gpu drives the monitor, and it would mess up my algorithms’ execution

I doubt nvidia would make such theoretical statements, if it does not hold in practice; nevertheless, it shouldn’t be very expensive to test, particularly if you already have multiple devices