Otto Berkes – the last Xbox founder – leaves Microsoft

Way back when I was writing my OpenGL Book, I had the good fortune to run across some stupendous folks at Microsoft who were forthright and open and very very helpful to me, answering questions, implementation details, and generally reviewing a lot of my work. One of these guys was Otto Berkes. Later the API wars would put him and most of the other OpenGL team onto the DirectX team (which is one reason it suddenly jumped in quality between releases),  and eventually he went on with Seamus Blackley, Kevin Bachus, and Ted Hase to be the core Xbox team. He’s the last one to leave Microsoft, and I wish him all the best.

Posted in DirectX, Ex-Microsoft, OpenGL, PC Graphics | Leave a comment

Blog – take 2

So, a few months after updating my website to be more of a blog format ( since that’s what it was anyway), I managed to enter setting in WordPress confuse it utterly and leave it unusable. Much to my surprise, my web provider does not backup content, just e-mail, at my subscription level. Fortunately, I was able to recover most of the content, and I finally sat down, re-created my blog format in WordPress, and am re-posting all of the content from before the unfortunate event. What a pain in the ass. I hope you guys enjoy it!

Posted in Miscellaneous | Leave a comment

Double Your Program Speed with One Easy Change

My friend Stan Melax has written a number of articles on optimization using SSE instructions. He’s also talked about some simple things you can do to make your program run faster. I’d like to reiterate one of these because it’s just so simple to do and it’s such a big payoff. It turns out that the Microsoft C++ compiler falls back to using x87 instructions unless you tell it differently. What you want is to enable SSE instructions in your code. You might be wondering how this will limit your program. Both Intel and AMD’s processors have supported SSE3 instruction since 2004/2005 respectively. So as long as you are targeting a PC made in the last six years there should be no problem in enabling SSE3.

The problem is that the default setting-enable x87 instructions-hearkens back to the day of math coprocessors. In other words, back when a math coprocessor was a separate chip that you could install on your motherboard. The coprocessor was integrated back in the ’486 days, so this bit of legacy isn’t really necessary anymore. You want to make two changes to the default settings to make your calculations faster.

If you doubt this is important the just look at the flak Nvidia caught for its PhysX software implementation. An investigation by David Kanter at Real World Technologies found that Nvidia’s PhysX software implementation for use by CPUs still uses x87 code (plus David says the software implementation seems to only use one thread on multithreaded systems, whereas the hardware version is multithreaded).

Go to the properties dialog. Select C++, then Code Generation. You want to make two changes; set Enable Enhanced Instruction Set, and select Enable Streaming SIMD 2 Extensions. This will enable the SSE instructions. Next you want to select Floating-Point Model, and set it to Fast. This tells the compiler that you want to use 32-bit floats, not doubles;
Here’s a graphic of what it looks like;

Your mileage may vary, but if you do any amount of math in your program this simple modification will greatly speed up your program. If you are wondering about older machines and SSE compatibility, I don’t actually know what will happen if you run this on a PC that doesn’t have the required SSE capabilities – I assume it’ll seg fault and blue screen. While checking CPU capabilities is too big a topic to cover here (perhaps in another post), you can look up the CPUID instruction if you want to puzzle it out. For me, I’d assume that if it’s running WinXP or better, then the SSE instructions will be OK.

I’ll post a link to Stan’s article when it’s up.

 

Posted in Code | 2 Comments

Microsoft Developer Network Article on Threading – Part 2 – Scalable Multithreaded Programming with Tasks

The second of my series of articles on threading is up on Microsoft Systems Developer Network Magazine:

Scalable Multithreaded Programming with Tasks

This article is about using tasks to break up a lengthy job into a series of smaller ones – called “tasks” – which can be individually run on a thread. Of course, there are some restrictions on how you can do this and not have the threads step on each other. In some cases it’s impossible to take a serial task and create collection of independent (or nearly so) smaller tasks. But frequently you can have a task make an assumption out the global state and if you’re right most of the time, it’s a win at the expense of occasionally repeating or redoing some work because your tasks didn’t have the exactly correct information.

Posted in Code, Published Articles | Leave a comment

Microsoft Developer Network Article on Threading – Part 1 – Scalable Multithreaded Programming with Thread Pools

The first of a series of articles on threading is up on Microsoft Systems Developer Network Magazine:

Scalable Multithreaded Programming with Thread Pools

This article is a gentle introduction on how to get better CPU performance with little effort.  If your application is fairly CPU intensive, it’s usually fairly easy to make it multiprocessor friendly by using a little preprocessor magic to instruct the compiler that an operation can be run on multiple threads. Discusses C# and C++ multithreaded programming.

Posted in Code, Published Articles | Leave a comment

Kevin Bachus joins Bebo

Social networking site Bebo (Blog Early, Blog Often.) has hired Kevin Bachus as their “Chief Product Officer”.  Bebo is similar (but smaller) than other social networking sites, like Facebook and MySpace.

The most interesting thing about Bebo is that it was acquired by AOL on March 13, 2008 for $850 million.  In June, 2010 AOL announced it was planning to sell  Bebo to Criterion Capital Partners for (less than an eventually revealed)  10M$US.  AOL’s sale was supposedly due to the falling numbers of unique users. Bebo users were moving to the social giants Facebook and Twitter, and AOL said that Bebo couldn’t compete with other Social Networking sites at its current state. “They couldn’t commit to taking on the massive task to keep Bebo in the social network ‘race’ “.

Update May, 2011 – Bebo creator Michael Birch, said of Bebo (after he made about $600 million from selling Bebo to AOL) “I think the main reason it didn’t work was just that Facebook was beating it, and people would leave Bebo to join Facebook,”. What’s Birch up to now? – “little social network. I wouldn’t say it’s a competitor to Facebook,” he quickly added. “I don’t think it makes sense to try and be what they are. I do think it makes sense to be what they’re not.”

Posted in Ex-Microsoft | Leave a comment

Site Revision

I’ve been pretty busy at work and haven’t had a lot of time or inclination to post here over the last two years. Generally I got the job at Intel because one of the things I did here is what I now get paid for, so a lot of effort shows up at work and not here. I’ve had this web site since about 1995 with the last revision in about 2001, where I started writing more on graphics topics. Now they have these newfangled things called “blogs” that fit what I’ve been doing, plus there are now there are engines that do all the updating, formatting, tracking, etc. for you. So I’m in biting the bullet and reformatting everything, and eventually I’ll have it up and running the way I like it. It will just take me a while.

Posted in Miscellaneous | Leave a comment

Kick-ass graphics and Larrabee!

Back in 2008 I took a job with Intel. Intel was starting to ramp up its Larrabee effort and was looking to hire some knowledgeable graphics engineers who could also talk to game developers about *other* things like threading, performance, and optimization. This kept me pretty busy with not enough time to talk about graphics, optimization. And there’s no though about talking about Larrabee since that was not my group.  Unfortunately Larrabee wasn’t ready in time so that aspect of my job, while quite a lot of fun, won’t be ready for public consumption for a while. On the other hand, the other aspects of my job were chugging along and I get to do conference talks of these aspects as well, so expect to see some information on multithreading using tasks, using performance tools, programming on Intel’s integrated graphics cores (which really don’t suck anymore), and something new for me, data parallelism though SSE/AVX programming. Since this stuff isn’t as secret as Larrabee, I’m reactivating and reworking my old website into a blog format, since that what is was way back before they had anything called a blog.

Posted in Graphics, Graphics Hardware, PC Graphics | Leave a comment