{"id":84,"date":"2009-04-04T17:06:31","date_gmt":"2009-04-04T23:06:31","guid":{"rendered":"http:\/\/www.realtimerendering.com\/blog\/?p=84"},"modified":"2009-04-04T17:06:31","modified_gmt":"2009-04-04T23:06:31","slug":"connections-larrabee-michael-abrash-intel-dr-dobbs-and-me","status":"publish","type":"post","link":"https:\/\/www.realtimerendering.com\/blog\/connections-larrabee-michael-abrash-intel-dr-dobbs-and-me\/","title":{"rendered":"Connections: Larrabee, Michael Abrash, Intel, Dr. Dobb&#8217;s and me"},"content":{"rendered":"<p>There has been a spate of Larrabee information during the last two weeks.\u00a0 Two GDC talks (slides near the bottom of <a href=\"http:\/\/software.intel.com\/en-us\/articles\/intel-at-gdc\/\">this page<\/a>), <a href=\"http:\/\/software.intel.com\/en-us\/articles\/prototype-primitives-guide\/\">a prototype library<\/a>, and <a href=\"http:\/\/www.ddj.com\/architect\/216402188\">an article by Michael Abrash<\/a> on the <a href=\"http:\/\/www.ddj.com\/\">Dr. Dobb&#8217;s website<\/a>.<\/p>\n<p><em>Dr. Dobb&#8217;s Journal<\/em> has been out of print since February, but for many years it was one of the leading software publications.\u00a0 When initially published in 1976 (as <em>Dr. Dobb&#8217;s Journal of Computer Calisthenics &amp; Orthodontia<\/em>) it was the first journal focusing on software development for microcomputers.\u00a0 Michael Abrash wrote many articles for Dr. Dobb&#8217;s over the years, including <a href=\"http:\/\/www.bluesnews.com\/abrash\/abrash.pdf\">a series on the Quake software renderer<\/a> in the mid 90&#8217;s.\u00a0 This series made a great impression on me; when it was published I was considering a career change from microprocessor design to graphics programming.\u00a0 At the time, I was working on Intel&#8217;s P55C processor, publicly known as &#8220;Pentium with MMX Technology&#8221;.\u00a0 This chip was notable both for being the first X86 processor with a SIMD (single instruction multiple data) instruction set, and for being the last CPU to use the in-order Pentium micro-architecture.<\/p>\n<p>When Michael Abrash wrote the Quake articles game rendering was 100% software, mostly written in assembly language.\u00a0 Abrash was the uber-game programmer, having worked on DOOM, written the Quake renderer, and published (in addition to his Dr. Dobb&#8217;s articles) <a href=\"http:\/\/www.amazon.com\/Zen-Assembly-Language-Knowledge-Programming\/dp\/0673386023\">many<\/a> <a href=\"http:\/\/www.amazon.com\/Zen-Graphics-Programming-2nd-Applications\/dp\/1883577896\">influential<\/a> <a href=\"http:\/\/www.amazon.com\/Michael-Abrashs-Graphics-Programming-Special\/dp\/1576101746\">books<\/a> <a href=\"http:\/\/www.amazon.com\/Zen-Code-Optimization-Ultimate-Software\/dp\/1883577039\">about<\/a> graphics programming, assembly and optimization (the last of which <a href=\"http:\/\/www.gamedev.net\/reference\/articles\/article1698.asp\">is available online<\/a>).<\/p>\n<p>Within a few years (around the time I finally made the jump from CPU design to game graphics programming), it seemed to many that graphics hardware and compiler improvements had made software rendering and hand-coded assembly obsolete.\u00a0 This was mirrored by my own experience; I was hired to my first game industry job on the strength of a software rasterization demo (written mostly in assembler) and by the time the game shipped, it required graphics hardware and contained very little assembly (none written by me).\u00a0 Abrash started applying his considerable skills to what he saw as the next unsolved hard problem: natural language processing.<\/p>\n<p>But he couldn&#8217;t stay away from graphics for long; when Microsoft started working on the XBox console he got involved in its design.\u00a0 In the early 2000&#8217;s, he figured out that there was a market for software renderers after all, mostly due to the mess of caps bits, unorthogonal feature support, and flaky compliance that characterized low-end graphics hardware at the time (Intel was among the greatest offenders; compounding the problem, its graphics chips sold very well so there were a lot of them out there).\u00a0 With Mike Sartain (another XBox designer), he wrote <a href=\"http:\/\/www.radgametools.com\/pixomain.htm\">Pixomatic<\/a>, a software renderer published by <a href=\"http:\/\/www.radgametools.com\/\">RAD Game Tools<\/a> (until then mostly known for the <a href=\"http:\/\/www.radgametools.com\/miles.htm\">Miles sound library<\/a>, perhaps the most widely-used middleware in the games industry).\u00a0 Of course, he published another <a href=\"http:\/\/www.ddj.com\/architect\/184405765\">series<\/a> <a href=\"http:\/\/www.ddj.com\/architect\/184405807\">of<\/a> <a href=\"http:\/\/www.ddj.com\/architect\/184405848\">articles<\/a> in Dr. Dobb&#8217;s about the experience, where he discussed how he made use of SIMD instruction sets such as MMX and SSE when optimizing Pixomatic.<\/p>\n<p>I found this particularly interesting due to my personal involvement with these instruction sets.\u00a0 After working on the first MMX hardware implementation I helped define its successor, which was twice as wide (128 bits instead of 64) and added support for floating-point SIMD.\u00a0 This instruction set was at first called MMX2, then VX, and finally split into two separate instruction sets: SSE and SSE2.\u00a0 By this time SIMD instruction set extensions were becoming quite popular; AMD had their own version called 3DNow!, and PowerPC had the AltiVec instruction set.\u00a0 Intel kept on adding new SIMD extensions: SSE3, SSSE3, SSE4.1, SSE4.2, and AVX.<\/p>\n<p>As Abrash details in <a href=\"http:\/\/www.ddj.com\/architect\/216402188\">the Larrabee article<\/a>, Larrabee got started when he decided to talk to Intel about some ideas for SIMD instructions to accelerate software rasterization.\u00a0 As a result, Larrabee includes a powerful set of SIMD instructions.\u00a0 Much wider than previous instruction sets (512 bits instead of 128, or 256 in the case of AVX), Larrabee&#8217;s instruction set contains several instructions tailored to software rasterization.\u00a0 It is also general enough to allow for automatic code vectorization of a wide variety of loops.\u00a0 Abrash had a key role in the design of the instruction set, bringing software rasterization back into the mainstream.<\/p>\n<p>Besides a good instruction set, Larrabee also needed an efficient hardware design with a large number of cores.\u00a0 Each of these cores needed to be very efficient in terms of performance-per-Watt and per-transistor.\u00a0 Since the Larrabee team started out as a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Skunk_works\">skunkworks<\/a>, they\u00a0 couldn&#8217;t afford to design a brand-new core so they looked at previous Intel cores, and the old in-order Pentium core (<a href=\"http:\/\/arstechnica.com\/hardware\/news\/2008\/07\/intels-larrabee-gpu-based-on-secret-pentagon-tech-sorta.ars\">almost the same one<\/a> I used in\u00a0 the P55C) was the one chosen.<\/p>\n<p>What I find fascinating about this story is that Abrash managed to follow rasterization all the way around the <a href=\"http:\/\/catb.org\/~esr\/jargon\/html\/W\/wheel-of-reincarnation.html\">Wheel of Reincarnation<\/a>.\u00a0 This term refers to the common process where a piece of computing functionality is first implemented in software, then moves to special-purpose hardware which gradually becomes more general until it rivals a CPU in complexity, at which point the functionality is folded back into software.\u00a0 It was coined in <a href=\"http:\/\/cva.stanford.edu\/classes\/cs99s\/papers\/myer-sutherland-design-of-display-processors.pdf\">a 1968 article by T. H, Myer and Ivan Sutherland<\/a> (the latter is widely considered the father of computer graphics).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There has been a spate of Larrabee information during the last two weeks.\u00a0 Two GDC talks (slides near the bottom of this page), a prototype library, and an article by Michael Abrash on the Dr. Dobb&#8217;s website. Dr. Dobb&#8217;s Journal has been out of print since February, but for many years it was one of [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[153,151,54,152],"class_list":["post-84","post","type-post","status-publish","format-standard","hentry","category-misc","tag-abrash","tag-dr-dobbs","tag-larrabee","tag-simd"],"_links":{"self":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/comments?post=84"}],"version-history":[{"count":0,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts\/84\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/media?parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/categories?post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/tags?post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}