Pix4D 4.3 Multi-GPU Scaling and NVLinkWritten on November 7, 2018 by William George
Pix4D is an advanced photogrammetry application, suited to a wide range of uses, with a focus on handling images captured by drone cameras. Processing of those images into point clouds and 3D meshes/textures is time-consuming, making heavy use of both the central processing unit (CPU) and graphics processor (GPU / video card) in a computer.
We are in the midst of testing a wide range of CPUs and GPUs in Pix4D 4.3, and as part of that, we wanted to check multi-GPU performance. This is particularly pertinent right now because NVIDIA has added NVLink functionality to some of their new GeForce RTX series cards. With proper software support, this allows high-speed communication between two video cards - potentially improving the performance or enabling things like memory space sharing.
So does Pix4D benefit from NVLink at all, or from multiple video cards in general? Let's find out!
To compare processing speed with one and two video cards, as well as those two paired together with NVLink, we needed to use a CPU and motherboard that would fit multiple cards and have the right spacing to use an NVLink bridge. We also wanted to ensure that the CPU wouldn't be holding back GPU performance. Based on past testing we went with Intel's Core i9 7980XE as one of the fastest processors for this application, and in order to have NVLink capability, we opted to use GeForce RTX 2080 8GB cards for the GPUs. We also included 128GB of memory and a Samsung 960 Pro SSD, to ensure that those components were not going to slow anything down. If you want to see full details, with links to the various part pages, click here to expand a comprehensive hardware list.
|Motherboard:||Gigabyte X299 Designare EX|
|CPU:||Intel Core i9 7980XE 2.6GHz
(4.2/4.4GHz Turbo) 18 Core
|RAM:||8x Crucial DDR4-2666 16GB (128GB total)|
|GPU:||1-2 x NVIDIA GeForce RTX 2080 8GB|
|Storage Drive:||Samsung 960 Pro M.2 PCI-E x4 NVMe SSD|
|OS:||Windows 10 Pro 64-bit|
|Software:||Pix4D Mapper 4.3.27*|
|*Version 4.3.31 came out during our testing, but seems limited to bug fixes|
In order to run multiple image sets and multiple iterations, we put together an AutoIt script that runs Pix4D without manual input. Because of the automation we used, all steps were performed back-to-back with no editing in-between to clean up point clouds. That means these results may not perfectly match what you'd see when using Pix4D in a real-world workflow, but it removes any chance of human error altering results between runs. We did still observe small variances on total processing time with each image set, so we ran them three times and selected the lowest overall result for each image set to be included in the charts below.
As mentioned above, we tested a few different image sets: two on the 3D Models preset and one on the 3D Map mode. These are the most demanding of the processing methods in Pix4D, hence our focus on them over the various other options available. No settings were altered from the defaults. Info about the image sets we used, and what processing mode they were used with, are available below.
Here is information about the image sets we used, including project type (3D Model vs 3D Map) and listed in order of complexity:
Without further ado, here are the results for total processing time on each of these image sets, with 1-2 video cards as well as NVLink:
Another way to look at this data is performance relative to a single RTX 2080, where we can more easily see that dual GPUs don't help:
And for those who want all the details, here are the times (in seconds) broken out into a plain data chart. Smaller numbers are better:
Does Pix4D 4.3 Benefit From Dual GPUs or NVLink?
No: as of Pix4D 4.3.27, multiple video cards do not benefit performance at all. If anything, performance is slightly lower (1-3%) with a second video card, and enabling NVLink does not change that. For Pix4D, your money would be better spent on a faster processor - and we will have a performance roundup of CPUs in this application soon.
Is Pix4D Even Detecting the Second GPU or NVLink?
Pix4D puts out a lot of detailed information in the log files generated during each run, which is where we pull the processing times from in our benchmark. You can also see in those logs what GPUs are detected and when they are being utilized, and looking over that data it does look like both of the RTX 2080 cards in this system were found by Pix4D and difference parts of the processing workload were sent to each one. However, based on the time results, that does not seem to have helped performance.
That changes with NVLink, though. When that is enabled, the second GPU does not show up at all in the Pix4D log files. This mirrors the situation we have seen with other applications, like DaVinci Resolve, where the second GPU effectively disappears when NVLink is in use. This is why programs have be written specifically to utilize NVLink: simply turning it on does not help if the software isn't built for it.