C++ AMP Debugger and WARP Accelerator Support on Windows 7

Thursday, March 28, 2013 – 9:25 pm

Debugging and WARP accelerator support is now available on Windows 7 and Windows Server 2008 RC2 with the Platform Update for Windows 7. The following blog posts outline how to use these:

This is great news for developers who are on Windows 7 and want to either develop on it or have their application fall back to WARP on customers’ Windows 7 machines without a C++ AMP capable GPU.

I lobbied the product team on this one as lots of readers asked both myself and Kate about it. Looks like they and the DirectX team got it done. Really happy to see that it’s actually happened and within six months of the Visual Studio 2012 release.

In other news NVidia have added support for hardware debugging. You can read about how to enable this on the C++ AMP team’s blog too:

Things are really looking up for GPU development on Windows.

Once You Know, You Newegg

GPU Technology Conference 2013

Thursday, March 21, 2013 – 5:01 pm

A few years ago I went to the NVidia GPU Technology Conference. I promised myself I’d be back in a few years and speak at it. Well’ it’s 2013 and here I am! The week has been really fun; lots of good talks, especially the keynotes. I also seem to be hanging around with the OpenCL crowd who turn out to be a lot of fun.

An Overview of Accelerated Parallelism with C++ AMP

S3317_AdeMiller“C++ AMP is Microsoft’s GPU programming technology. This presentation, by one of the authors of "C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++" (MSPress), gives an overview of C++ AMP’s features. The presentation will introduce C++ AMP’s algorithms and containers programming model and its two minor additions to the C++ language. By programming against a hardware agnostic data parallel accelerator model, rather than specific hardware, developers can future proof their applications to run on a variety of data parallel hardware. Several C++ AMP examples will be demonstrated, showing the array and array_view container types and the parallel_for_each algorithm. The examples will be extended so show how C++ AMP code can be optimized and then used with the Parallel Patterns Library on the CPU to take advantage of multiple GPUs and achieve further performance improvements with braided parallelism.”

Now the whole speaking thing is out the way it’s time to get back to the real thing, implementing radix sort for the C++ AMP Algorithms Library. Something to do on the flight home.

Writing A Programming Book

Wednesday, January 9, 2013 – 12:30 am

6206Really you should do yourself a huge favor. The next time one of your friends suggests you write a book, just ignore them. That’ll also save you the onerous task of reading the rest of this post.

Still reading? Oh dear. Well I guess I feel compelled to inflict some well meant advice. This is based on collaborating on three books in the last few years. I’ve also written numerous technical papers, a PhD thesis (i.e. another book) and several published articles. Glutton for punishment, that’s me.

1) Understand what you’re writing about

If you’re contemplating writing a technical book on something, then you probably already consider yourself to be something of an expert. Writing a book is a great opportunity to round out all the dark corners of the topic and understand it completely. There’s a lot to be said for learning something by forcing yourself to explain it to someone else. This is not an invitation to decide to write a book something as you’re learning it. The result will read like a Presidential candidates manifesto but with fewer outright lies.

Even if you know the subject cold that doesn’t mean you understand what explaining it to others is going to entail. When you assemble the outline (see #3) do it with an eye to identifying topics that will be harder to explain or less familiar to your audience (see #2).

Read the rest of this entry »

I’m Speaking at The GPU Technology Conference

Friday, December 14, 2012 – 7:11 pm

So I got my talk accepted to GTC 2013. It runs from March 18-21 at the San Jose McEnery Convention Center. I went a couple of years ago and really enjoyed it. At the time I made it a goal to come back as a speaker and now here we are! Hope next year’s is even better.

image

S3317
An Overview of Accelerated Parallelism with C++ AMP

Ade Miller (Principal Architect , Microsoft Corporation)

C++ AMP is Microsoft’s GPU programming technology. This presentation, by one of the authors of "C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++" (MSPress), gives an overview of C++ AMP’s features. The presentation will introduce C++ AMP’s algorithms and containers programming model and its two minor additions to the C++ language. By programming against a hardware agnostic data parallel accelerator model, rather than specific hardware, developers can future proof their applications to run on a variety of data parallel hardware. Several C++ AMP examples will be demonstrated, showing the array and array_view container types and the parallel_for_each algorithm. The examples will be extended so show how C++ AMP code can be optimized and then used with the Parallel Patterns Library on the CPU to take advantage of multiple GPUs and achieve further performance improvements with braided parallelism.

Session Level: All
Session Type: Talk
Topic Areas: Development Tools & Libraries, Parallel Programming Languages & Compilers

C++ AMP Extras: Tile Size Checking at Compile Time

Thursday, December 6, 2012 – 3:31 pm

Many tiled C++ AMP algorithms rely on the tile size being a an exact multiple of two, scan and reduce are both examples of this.

    template <int TileSize, typename T>
    void InclusiveScanAmpTiled(array_view<T, 1> input,
        array_view<T, 1> output)
    {
        // ... 

Ideally you would like to check at compile time that the TileSize template parameter is a power of two. You can do this with a combination of static_assert and a template meta-program (TMP).

        static_assert(IsPowerOfTwoStatic<TileSize>::result,
            "TileSize must be a power of 2.");

Read the rest of this entry »

C++ AMP Extras: String Reversal

Tuesday, October 16, 2012 – 1:52 pm

As part of a series of follow ups to the C++ AMP book I’m writing some blog posts highlighting other examples of C++ AMP at work. Most of these are going to take the form of interview style questions that highlight various things people have asked me about or discussions of data-parallel programming patterns.

This one takes the form of a coding interview question beloved by interviewers, “Given a pointer to a null terminated array of char, reverse the order of the string”. It highlights how to deal with types not directly supported by C++ AMP.

Read the rest of this entry »

C++ AMP Book Ships!

Tuesday, September 25, 2012 – 11:33 am

C++ AMP Book CoverWell, I can’t exactly say it was easy but finally the C++ AMP book is “done” and available for purchase. You can buy the book or eBook from O’Reilly. It’s also available on Safari Books online and Amazon.com. The hardcopy should ship in another week or so (Amazon has a print date of the 3rd Oct.)

There’s a sample of the book you can download and read before buying. The source code for all the samples is available on CodePlex. I’m going to be making a few minor updates to it to correct a few issues we’ve found.

I’ve actually started writing some blog posts on C++ AMP. These should appear in the next couple of months. You’ll be able to follow them by tracking posts tagged with the C++ AMP tag.

Ade Miller’s Kevin Bacon number is 4

Thursday, September 13, 2012 – 11:58 am

Google now supports searches like “Bacon number Ade Miller”. As I’m not Tom Hanks a post was required.

Turns out its actually quite hard to have a really high Kevin Bacon number. A friend of mine on the East coast briefly data Sean Young, who has a Bacon number of 2. So mine is 4.

Ade and John worked together.

John and Sean Young dated.

Sean Young and James Hong appeared in Blade Runner.

James Hong and Kevin Bacon appeared in R.I.P.D..

This was going to be a post about reversing strings in C++ AMP but my Bacon number was more important. Now I’ve finished the book there might be more than one blog post every few months.

Hiring, Hiring, Hiring, Better Hiring

Monday, April 23, 2012 – 8:34 am

highhopes

I’m also thinking about hiring for a third reason. I’ve submitted a talk to Seattle Code Camp. With all this hiring I’ve been thinking a lot about what makes a good interview, interviewer and interviewee. Not to mention how the whole process might be improved from the ground up.

Technical Interviews, the Good, the Bad and the Awesome

For most people a bad hiring decision is the biggest mistake they can make and a great hire can take you and your team to a whole new level. So why do so many teams approach hiring in an ad-hoc manner? This talk is some thoughts on how to improve both as an interviewer and as an interviewee in a technical interview.

What does it take to hire great developers? How to be a great interviewer and run an interview loop. What makes a good coding question and what doesn’t. Hint “write merge sort” doesn’t cut it.

As a candidate how can I navigate technical interviews and coding questions in particular? What are interviewers looking for? How do I show that I have the skills they are looking for?

Is today’s technical interview process the best we can do? How can we build the best experience for both the interviewee and interviewer? Some final thoughts on working within your companies existing framework and were we might go from there.

Ade Miller has been getting hired and hiring for the past couple of decades. Currently he interviews two or three people each week.

Who is the “Will Code for Food!” guy. That’s Mark. Mark’s chutzpah got him a job at the bottom of the .com bubble. He ended up interviewing me for some positions Greythorn when I too got laid off in the tail end of the bubble’s collapse.

Hiring, Hiring Hiring, We’re Hiring

Thursday, April 19, 2012 – 4:50 pm

2012-04-18 17.43.41I’ve been thinking a lot about hiring recently, having just been through the whole interviewing process as part of my move to Microsoft Studios. Now I’m thinking about hiring again because… my team is hiring!

I’m the development manager for one of the studios here within Microsoft Studios. We have several positions open. These are not only for developers with game experience but also great generalist developers who aren’t afraid about working with some fantastic cutting edge technologies. I’m not kidding here. I’ve been in the software business for nearly two decades now and this is one of the most interesting things I’ve ever worked on.

There are more but here are just a few of the positions we’re hiring for right now. There’ll be more coming later. Above all I’m looking for smart people who can solve tough problems and get things done. It goes without saying that the team works in a pretty agile way. Trust me, it’s a great project.

Software Engineering: Development

Lead Game Engineer

Gameplay Programmer-IEB-Microsoft Studios

We’re the people that developed Kinect and profoundly changed the way people interact with technology. Now our incubation team is ready to change the world again, but we need your help!

We’re a small and growing team of experienced incubators and game developers working with truly inspiring entertainment technology. We brainstorm exciting and ground-breaking experiences and quickly build working prototypes on top of developing tech. We transform our ideas into reality through shipping first-to-market products.

You’re a developer with a stellar track record and you love to learn and tackle new challenges. You’re excited to collaborate directly with artists and designers in a game development-savvy studio to build and iterate on prototypes to achieve our creative vision. You’re looking to make significant contributions to the early stages of a project with huge growth potential.

If you think this sort of thing is for you then you can apply through the links above.