HotSort v2 — 32-bit Keys

- 2 mins read

I had some requests for a HotSort plot showing 32-bit key throughput for both NVIDIA CUDA and Intel GEN GPUs.

The 32-bit key sorting kernels aren’t used anywhere so I had to dust off some older benchmarks and rerun them.

Below is an updated plot of Quadro K620, Intel HD 6200 (Gen8) and CPU sorting throughputs for 32-bit and 64-bit keys.

The summary of the Quadro K620 vs. Intel HD 6200 throughput matchup is:

  • 32-bit: the Intel HD 6200 eventually surpasses the Quadro K620 at 640K 32-bit keys.
  • 64-bit: the Intel HD 6200 reaches 85% of the throughput of a Quadro K620 starting around 320K keys.

It’s clear that HotSort is exploiting the the large and tightly-coupled CUDA multiprocessors in some unique way.

A CUDA multiprocessor’s tightly-coupled cores and shared memory combined with the ability to launch a CTA that can exploit the entire multiprocessor gives HotSort on CUDA a significant head start because more work can be performed in the initial block sorting phase before resorting to merging.

However, the merging kernels require less coordination and are likely memory bandwidth-bound. The Intel HD 6200 32-bit key implementation appears to steadily catch up and eventually pass the Quadro K620. This is probably due to the 5775C’s 128MB of high-bandwidth eDRAM.

Inspecting the 32-bit key Intel GEN assembly reveals no problems and it looks very good.

But the 64-bit key Intel GEN assembly does not appear to be ideal. This might explain why the HD 6200 throughput doesn’t ever exceed the Quadro K620 despite having access to more global memory bandwidth.

Additionally, I think I’ve spotted a few cases where the HotSort v2 source code can become a little more friendly to both CUDA and GEN architectures.

I’ll make those changes and update the performance numbers in a future post.

Finally, in case anyone wants to see what throughput a GeForce GTX 980 can achieve when sorting 32-bit keys then fasten your seatbelts and look below:

The throughput peak reveals that a GTX 980 can sort 512K 32-bit keys in ~250 usecs!