Going Deeper: The DX11 Compute Shader and OpenCL/OpenGL

Many developers are excited about the added flexibility of the Compute Shader (also referred to as the CS). This addition to the pipeline steps further from a render-centric API and enables more general purpose algorithms. We see added flexibility in both the type of operations that can be preformed on data and the type of data that can be operated on.

In other pipeline stages, we see limitations imposed that are designed to speed up execution that get in the way of general purpose code. Although we can shoehorn general purpose algorithms into a pixel shader program, we don't have the freedom to use data structures like trees, sharing data between pixels (and thus threads) is difficult and costly, and we have to go through the motions of drawing triangles and mapping solutions onto this.

Enter DirectX11 and the CS. Developers have the option to pass data structures over to the Compute Shader and run more general purpose algorithms on them. The Compute Shader, like the other fully programmable stages of the DX10 and DX11 pipeline, will share a single set of physical resources (shader processors).

This hardware will need to be a little more flexible than it currently is as when it runs CS code it will have to support random reads and writes and irregular arrays (rather than simple streams or fixed size 2D arrays), multiple outputs, direct invocation of individual or groups of threads as per the programmer's needs, 32k of shared register space and thread group management, atomic instructions, synchronization constructs, and the ability to perform unordered IO operations.

At the same time, the CS loses some features as well. As each thread is no longer treated as a pixel, so the association with geometry is lost (unless specifically passed in a data structure). This means that, although CS programs can still use texture samplers, automatic trilinear LOD calculations are not automatic (LOD must be specified). Additionally, depth culling, anti-aliasing, alpha blending, and other operations that have no meaning to generic data cannot be performed inside a CS program.

The type of new applications opened up by the CS are actually infinite, but the most immediate interest will come from game developers looking to augment their graphics engines with fancy techniques not possible in the Pixel Shader. Some of these applications include A-Buffer techniques to allow very high quality anti-aliasing and order independent transparency, more advanced deferred shading techniques, advanced post processing effects and convolution, FFTs (fast Fourier transforms) for frequency domain operations, and summed area tables.

Beyond the rendering specific applications, game developers may wish to do things like IK (inverse kinematics), physics, AI, and other traditionally CPU specific tasks on the GPU. Having this data on the GPU by performing calculations in the CS means that the data is more quickly available for use in rendering and some algorithms may be much faster on the GPU as well. It might even be an option to run things like AI or physics on both the GPU and the CPU if algorithms that always yield the same result on both types of processors can be found (which would essentially substitute compute power for bandwidth).

Even though the code will run on the same hardware, PS and CS code will perform very differently based on the algorithms being implemented. One of the interesting things to look at is exposure and histogram data often used in HDR rendering. Calculating this data in the PS requires several passes and tricks to take all the pixels and either bin them or average them. Despite the fact that sharing data is going to slow things down quite a bit, sharing data can be much faster than running many passes and this makes the CS an ideal stage for such algorithms.

A while back we took a look at OpenCL, and we know that OpenCL will be able to share data structures with OpenGL. We haven't yet gotten a developer's take on comparing OpenCL and the DX11 CS, but at first blush it seems that the possibilities opened up for game developers and graphics processing with DX11 and the Compute Shader will also be possible with OpenGL+OpenCL. Although the CS can be used as a general purpose hardware accelerated GPU computing interface, OpenCL is targeted more at that arena and its independence from Microsoft and DirectX will likely mean wider adoption as a GPU compute language for general purpose tasks.

The use of OpenGL has declined significantly in the game developer community over the last five years. While OpenCL may enable DX11 like applications to be written in combination with OpenGL, it is more likely that this will be the venue of workstation applications like CAD/CAM and simulations that require visualization. While I'm a fan of OpenGL myself, I don't see the flexibility of OpenCL as a significant boon to its adoption in game engines.

Drilling Down: DX11 And The Multi-Threaded Game Engine So What's a Tessellator?
POST A COMMENT

109 Comments

View All Comments

  • ssj4Gogeta - Saturday, January 31, 2009 - link

    oh ok. thanks. :) Reply
  • PrinceGaz - Friday, January 30, 2009 - link

    I was aware of the idea of the Tesselator in AMD's DX10.1 hardware, but this article was excellent in putting everything together in how it will (or might) function in the DX11 pipeline, and everything else associated with the additions DX11 builds on top of DX10, and the reasons behind what has been done and the implications of it.

    This is definitely up there with the best of the articles Anand himself posts here; well done Derek. It was the sort of article that first made AT my favourite site to visit first for reviews-- in depth and written by someone who knew what he was talking about. Thankyou.
    Reply
  • PrinceGaz - Friday, January 30, 2009 - link

    Just because you don't use like it doesn't mean that lots of people are using it day-in day-out on PCs it was pre-installed on. Admittedly I dual-boot Vista and XP, and 99 times out of 100 it is XP (the Vista installation is only used either to help my father when speaking on the phone and who bought a laptop with Vista last year, or to run 3DMark Vantage), but Vista is very popular with most people who use it. My father hasn't any complaints with it (okay so he hasn't used any other O/S, but does that matter).

    Personally, I intend to jump from XP to Win7 SP1 when it is released. My current Vista installation is 64-bit Ultimate SP1 and it works, but with only 2GB of RAM, I find that XP does everything just as well or better. I would say Vista is very successful though, as almost all computers sold with Windows today have Vista installed rather than XP. There are probably more computers now sold with irrelevant OS's like Linux or OS/X, than there are those that come shipped with XP (netbooks excluded).

    PS: actually I like some Linux distros, so if you found the previous paragraph at all offensive, I apologise. But the average user isn't going to want a PC with a Linux distro, unless it comes fully pre-configured with every app they need pre-installed.
    Reply
  • ameatypie - Tuesday, February 3, 2009 - link

    sorry, but i completly disagree with this. Vista is RUBBISH. If you use it on your average comuter, it is slow. If you use it on a computer worse then that, it is worse then slow - it is useless. If you use it on a fast computer, it wastes half the reasorces that get thrown at it and it doesnt use the other half efficantly enough.
    The only reason people now days are using vista is because they are forced to with new computers - espically laptops.
    I have seen the windows 7 beta, and THAT is going to be pretty good........ But vista is still RUBBISH. :P
    Reply
  • just4U - Wednesday, February 4, 2009 - link

    No one is FORCED to use Vista and it's certainly NOT rubbish. It is definitely a step way up from XP. I am using the Win7 Beta right now and it's a improvement but why anyone would say its pretty good and Vista is not is beyond me as they are very similiar.

    I really do think all the Vista bashing has come from people who just don't use it or never really gave it much of a chance. NO instead they go back to (what one user said..) That Bastion of security and stability ... Windows XP. Note the sarcasm. Xp was good for it's time but Vista blows it out of the water.
    Reply
  • nilepez - Wednesday, February 4, 2009 - link

    By average, do you mean a processor slower than a Athlon 64 3000+ and a 4 year old graphics card?

    Just curious, because I've got a machine like that that has no problems running Vista (and gets an Vista Experience score between 4 and 5).

    Clearly your idea of average is a machine that was, at best, average 4 years ago.
    Reply
  • Zoomer - Monday, February 2, 2009 - link

    Well, if you throw lots of ram (8GB), fast new graphics card, and use nLite to remove/disable crap like UAC, Defender, firewall, readyboost, and make programs run with administrator privileges by default, it's usable.

    Nothing like Ubuntu though. However, Ubuntu doesn't run games, or rather, developers don't write mainstream 3D games for it, so I just use VMs or remote connections.

    One thing I have not figured out is to change the mouse behavior in windows to more closely resemble linux: mouse wheel should scroll the window the pointer is hovering over, regardless of the active window. Unfortunately, it doesn't seem possible. Therefore, Vista sucks. ;p
    Reply
  • gochichi - Thursday, February 19, 2009 - link

    Ubuntu is also bloated. I mean, I can't get my hard drive to stop making noises on Ubuntu.. NOR on Vista... which annoys me to no end. I was finally able to stop the noises in Vista but Ubuntu still grinds it away.

    Ubuntu is the stuff though. I run Office 2003 on it using Wine and that runs great. But the truth is that Office 2007 is actually better and so Vista is better. you start taking games into account and Windows is clearly the best period... consoles and everything... I'll take a Windows box anyday.

    Ubuntu is here to stay, it's getting better every six months. Because Windows XP hasn't died and refuses to die... it gives the open source community time to play catch up. Like Wine, it can reach Windows XP status and if it does (when it does, hopefully before Windows XP is totally dead) it'll be a great option.

    Ubuntu is always a great option, the problem is that Microsoft OSs are as "free" money-wise because they come preloaded on 99% of PCs. They only people buying separate versions of Microsoft OSs are Apple users (the irony! OH THE IRONY!) and the handful of people builiding their own systems.

    The typical case is like my laptop. By default Vista Home Premium... and it does dual boot to Ubuntu sometimes mostly for my Unix class. I think it's a joy to use it either way, but Ubuntu doesn't have any price advantage at all. And it never will because it's cheaper for Dell (in this case) to pay Microsoft the OEM fee for Vista (or Windows 7 in the near future) than it is to offer the technical support on Ubuntu. Vista (even Vista) also gives the system synergy and enhances the value of the hardware which more than justifies the OEM fee. I like dual booting, and I know that I'd get better at Ubuntu if I didn't have Vista but I find dual booting too irresistible.

    So Ubuntu is great, it can't be denied. And one of these days Wine (the windows "not" emulator) might catch up enough so that productivity software can run better on Ubuntu than on Windows XP. Windows XP is Microsoft's Achile's Heel.

    Because if new Macs didn't run Windows XP in a virtual machine as well as they do, they wouldn't be so widely adopted.

    Windows XP symbolizes the overall lack of progress in the industry, and other companies are approaching its usability or swallowing it whole (like through a VW like with Macs and Fusion etc).

    Overall, the computer industry has stagnated. Windows 7 might help, and DirectX11 might help, but I think it'll just keep things from slowing down so rapidly. So they'll continue to slow down, just less quickly.

    Reply
  • ameatypie - Tuesday, February 3, 2009 - link

    but then, how many people apart from myself and a few select others are going to throw 8GB of RAM, an 8800GT or higher series graphics card, and a beefy quad core at it? not many, if any. Reply
  • nilepez - Wednesday, February 4, 2009 - link

    1. You don't need that for Vista.
    2. 8GB of ram can be had for under 100 bucks
    3. Vista would run fine on a $20.00 PCI-e card
    4. Vista ran fine with a 6600gt or a X800 card (both over 2 years old by the time Vista was generally available).

    If you're talking about a card for gaming, well that has little to do with Vista and most tests now show that games run about the same on XP and Vista. This is no different htan XP upon release. It took a year or 2 before games ran about as well on XP as 9x.
    Reply

Log in

Don't have an account? Sign up now