Derek Gets Technical Again: Of Warps, Wavefronts and SPMD

From our GT200 review, we learned a little about thread organization and scheduling on NVIDIA hardware. In speaking with AMD we discovered that sometimes it just makes sense to approach the solution to a problem in similar ways. Like NVIDIA, AMD schedules threads in groups (called wavefronts by AMD) that execute over 4 cycles. As RV770 has 16 5-wide SPs (each of which process one "stream" or thread or whatever you want to call it) at a time (and because they said so), we can conclude that AMD organizes 64 threads into one wavefront which all must execute in parallel. After GT200, we did learn that NVIDIA further groups warps into thread blocks, and we just learned that their are two more levels of organization in AMD hardware.

Like NVIDIA, AMD maintains context per wavefront: register space, instruction stream, global constants, and local store space are shared between all threads running in a wavefront and data sharing and synchronization can be done within a thread block. The larger grouping of thread blocks enables global data sharing using the global data store, but we didn't actually get a name or specification for it. On RV770 one VLIW instruction (up to 5 operations) is broadcast to each of the SPs which runs on it's own unique set of data and subset of the register file.

To put it side by side with NVIDIA's architecture, we've put together a table with what we know about resources per SM / SIMD array.

NVIDIA/AMD Feature NVIDIA GT200 AMD RV770
Registers per SM/SIMD Core 16K x 32-bit 16K x 128-bit
Registers on Chip 491,520 (1.875MB) 163,840 (2.5MB)
Local Store 16KB 16KB
Global Store None 16KB
Max Threads on Chip 30,720 16,384
Max Threads per SM/SIMD Core 1,024 > 1,000
Max Threads per Warp/Wavefront 960 256 (with 64 reserved)
Max Warps/Wavefronts on Chip 512 We Have No Idea
Max Thread Blocks per SM/SIMD Core 8 AMD Won't Tell Us
That's right, AMD has 2.5MB of register space

We love that we have all this data, and both NVIDIA's CUDA programming guide and the documentation that comes with AMD's CAL SDK offer some great low level info. But the problem is that hard core tuners of code really need more information to properly tune their applications. To some extent, graphics takes care of itself, as there are a lot of different things that need to happen in different ways. It's the GPGPU crowd, the pioneers of GPU computing, that will need much more low level data on how resource allocation impacts thread issue rates and how to properly fetch and prefetch data to make the best use of external and internal memory bandwidth.

But for now, these details are the ones we have, and we hope that programmers used to programming massively data parallel code will be able to get under the hood and do something with these architectures even before we have an industry standard way to take advantage of heterogeneous computing on the desktop.

Which brings us to an interesting point.

NVIDIA wanted us to push some ridiculous acronym for their SM's architecture: SIMT (single instruction multiple thread). First off, this is a confusing descriptor based on the normal understanding of instructions and threads. But more to the point, there already exists a programming model that nicely fits what NVIDIA and AMD are both actually doing in hardware: SPMD, or single program multiple data. This description is most often attached to distributed memory systems and large scale clusters, but it really is actually what is going on here.

Modern graphics architectures process multiple data sets (such as a vertex or a pixel and its attributes) with single programs (a shader program in graphics or a kernel if we're talking GPU computing) that are run both independently on multiple "cores" and in groups within a "core". Functionally we maintain one instruction stream (program) per context and apply it to multiple data sets, layered with the fact that multiple contexts can be running the same program independently. As with distributed SPMD systems, not all copies of the program are running at the same time: multiple warps or wavefronts may be at different stages of execution within the same program and support barrier synchronization.

For more information on the SPMD programming model, wikipedia has a good page on the subject even though it doesn't talk about how GPUs would fit into SPMD quite yet.

GPUs take advantage of a property of SPMD that distributed systems do not (explicitly anyway): fine grained resource sharing with SIMD processing where data comes from multiple threads. Threads running the same code can actually physically share the same instruction and data caches and can have high speed access to each others data through a local store. This is in contrast to larger systems where each system gets a copy of everything to handle in its own way with its own data at its own pace (and in which messaging and communication become more asynchronous, critical and complex).

AMD offers an advantage in the SPMD paradigm in that it maintains a global store (present since RV670) where all threads can share result data globally if they need to (this is something that NVIDIA does not support). This feature allows more flexibility in algorithm implementation and can offer performance benefits in some applications.

In short, the reality of GPGPU computing has been the implementation in hardware of the ideal machine to handle the SPMD programming model. Bits and pieces are borrowed from SIMD, SMT, TMT, and other micro-architectural features to build architectures that we submit should be classified as SPMD hardware in honor of the programming model they natively support. We've already got enough acronyms in the computing world, and it's high time we consolidate where it makes sense and stop making up new terms for the same things.

That Darn Compute:Texture Ratio A Quick Primer on ILP and ILP vs. TLP Extraction
Comments Locked

215 Comments

View All Comments

  • calumhm - Friday, September 11, 2009 - link

    i mean, ATI invented the unified pixel/shader architechture, or so i believe, and this generation they've got dx10.1 level hardware something like 7 months and counting before Nvidia have any.

    Also i once read an article about SLI and Crossfire, about how SLI has only one rendering type, scissors. (meaning the screen is divided in two) Whereas ATI have scissors, tiled, (so that the more demanding areas of the screen are better divided amongst the cards) and others.
    Also, you can combine any HD series ATI card with any HD series card! thats way better than having to say, buy another 7800 for SLI because just one isn't doing it anymore, even though the 9800 series are out. With CFire you could add a 4870 to your old 3870!

    Im currently with Nvidia (a 9600gt (found one for £60!)) but am frequently impressed by ATI.

    -IS- ATI the smart customer's choice?
  • heaneyforestrntpe68 - Thursday, October 21, 2021 - link

    well I am looking forward to a single card setup. SLI or CF is beyond the reach of my pockets. :P https://bit.ly/2Z7E1jr
  • billywigga - Friday, August 29, 2008 - link

    im pretty shore the 4870 is low profile ive been looking everywhere for a low profile graphics card and i think i foung a high ends one unlike the geforce 8400 and the 8600 those arenot very good and they dont look good either but where do i buy the 4870
  • Hrel - Thursday, August 21, 2008 - link

    Why has there been no article comparing the 8800GT to the 9800GT? Is it just a rebrand, are there noticeable performance differences. It's 9 series, I assume it has hybrid power, but I don't know. Anandtech, PLEASE! Do an article on this.
  • billywigga - Friday, August 29, 2008 - link

    bang for the buck id get the 9800 because its newer also all the diffrence is it has more intagrated ram your saving a lot if you just get more ram to your computer.
  • firewolfsm - Friday, August 1, 2008 - link

    I'm trying to do the same benchmark for Crysis for my 4850 as I have a similar system and a fresh vista install. Just wondering what kind of driver settings you used.
  • spikeysting - Saturday, July 19, 2008 - link

    I just got it for $179 at Frys. Such a good deal.
  • Yangorang - Tuesday, July 8, 2008 - link

    Anyone tried this mod?
    http://www.hardforum.com/showthread.php?t=1319658">http://www.hardforum.com/showthread.php?t=1319658
  • jALLAD - Friday, July 4, 2008 - link

    I would for sure go for the 4870. (I am a Quake Wars fan boy u see :P)
    But I was unsure how these would perform on Linux. Is the driver support reliable? Right now I use a 7950 NVIDIA and their support on Linux is almost shite. I was wondering whether its better or worse...

    Anyone ?
  • KriegenSchlagen - Monday, July 7, 2008 - link

    If you are a Quake Wars fan, aren't the scores higher in 3-4 GeForce SLI configs vs. Crossfire mode 4870?

Log in

Don't have an account? Sign up now