I have been working with some CUDA development of server-based software (not a desktop app) and I have found that development under Windows is generally more easy than under Ubuntu.
Here are the advantages of developing CUDA under Windows:
- Drivers installation is easy. It’s just download > install > reboot.
- The Nsight plugin for Visual Studio seems to be more up to date (latest release: version 2021.2.1, June 2021) than the Nsight plugin for Eclipse (latest release: version 9.0, April 2019). The Nsight plugin for Visual Studio provides quite a comfortable development environment; among other things it allows to set debugger breakpoints inside kernels which can be very handy.
However, when it comes to deploying the developed CUDA code to production servers (for server-based apps), it gets more confusing.
First, using a flavor of Linux on a server is an obvious choice as it is an industry standard for many server-based apps (LAMP, Ruby on Rails, etc.). I don’t have anything against using Windows on a server, but it seems to be a specific case for organizations that know why they do that.
Second, there are signs of that Linux is used to run CUDA code in production. For example, there are two AWS Amazon Machine Instances for CUDA (with pre-installed drivers) and all of them use Linux to run CUDA code on GPU-optimized AWS instances. There are no AMIs that use Windows.
What is the industry best practice to deploy CUDA-powered server-based software to production? Is it usually developed under Windows and then compiled for a Linux-based production server?