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?
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 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.
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