The last article was very low level as it took even microarchitectural features into consideration. This article, we go right back up to a higher level to look at using SSE for matrix operations. The earliest definition of SSE was four-wide SIMD floating point (single precision) and is well suited for many 3D rendering operations (especially geometry).
The Optimized Matrix Library in C++ was contributed by Zvi Devir and was able to fully leverage the SIMD extensions on the Pentium III (and beyond) processor using C++.
Koby Gottlieb was instrumental in explaining some important code optimizations in the installment entitled Cleaning Memory and Partial Register Stalls in Your Code. The idea here was to follow up the first installment (where we purposely concentrated on higher level effects on performance with some nitty-gritty code optimizations that reflected specific microarchitectural characteristics of the target platform.
Looking way back (1999-2000), I helped edit a brief Optimization’s Corner as part of Gamasutra magazine. I will review a few of the ideas and summarize what they are about. This is not a reposting of the articles – you can find them already published in Gamasutra – rather it’s just a review of what was going on at the time.
The first article in the series was a short article I wrote regarding how size of primitives affect 3D graphics performance. I thought I was really clever by giving the article such a provacative title:
Optimizations Corner: Sorry, But Size Does Count! (gee, isn’t that clever?) Well, one of the main points of this article was the fact that data optimization is often more important than code optimization. Too often programmers spend a lot of time optimizing their code. They are starting already in the final stages of optimization (i.e. code) and have skipped algorithmic and data optimizations stages. Why optimize code that might not be used? While the performance data presented in the article is for software rendering (and on a bit of an older Pentium III archtecture), it is still true today that optimizations must start at a higher level. In this case, insuring that the data modeling was preprocessed correctly had a huge impact on performance.
More reviews are on the way – stay tuned…
Optimizations.org is back online after a long hiatus.
This blog is meant to serve as a place not only for my rantings and ravings about optimizations (or optimisations for all you Brits out there), but for all thoughts even tangentially related to the subject. While some of the legacy articles concentrated on optimizations for PC code (multimedia and 3D games), we’ll include thoughts on algorithmic optimizations, low-level code optimizations and even search engine optimizations for websites.