Michael Abrash

From Infogalactic: the planetary knowledge core
Jump to: navigation, search
Michael Abrash
Michael Abrash at Facebook's F8 2015.jpg
Michael Abrash as Oculus rift chief scientist on stage at Facebook's F8 2015
Occupation Chief Scientist
Employer Oculus VR

Michael Abrash is a game programmer and technical writer specializing in optimization, 80x86 assembly language, and game programming, a reputation cemented by his 1990 book Zen of Assembly Language Volume 1: Knowledge.[1] Related issues were covered in his later book Zen of Graphics Programming.[2] He frequently begins a technical discussion with an anecdote that draws parallels between a real-life experience he has had, and the article's subject matter. His prose encourages readers to think outside the box and to approach solving technical problems in an innovative way.

Game programmer

Abrash first bought a microcomputer while doing postgraduate studies at the University of Pennsylvania[citation needed]. Before getting into technical writing, Abrash was a game programmer in the early days of the IBM PC. His first commercial game, Space Strike, released in 1982, was a PC booter. He co-authored several PC games with Dan Illowsky who had previously written Snack Attack for the Apple II. Abrash and Illowsky worked together on Cosmic Crusader (1982), Big Top (1983), and Snack Attack II.[3]

After working at Microsoft on graphics and assembly code for Windows NT 3.1, he returned to the game industry in the mid-1990s to work on Quake for id Software. Some of the technology behind Quake is documented in Abrash's Ramblings in Realtime published in Dr. Dobb's Journal.[4] After Quake was released, Abrash returned to Microsoft to work on natural language research, then moved to the Xbox team, until 2001.[citation needed]

In 2002, Abrash went to work for RAD Game Tools, where he co-wrote the Pixomatic software renderer, which emulates the functionality of a DirectX 7-level graphics card and is used as the software renderer in such games as Unreal Tournament 2004.[citation needed] At the end of 2005, Pixomatic was acquired by Intel. When developing Pixomatic, he and Mike Sartain designed a new architecture called Larrabee, which now is part of Intel's GPGPU project.[5]

Gabe Newell, managing director of Valve, said that he had "been trying to hire Michael Abrash forever. [...] About once a quarter we go for dinner and I say 'are you ready to work here yet?'"[6] In 2011 Abrash made the move to join Valve.[7]

On March 28, 2014, virtual reality headset company, Oculus VR, published a statement saying that Michael Abrash has joined their company as Chief Scientist.[8] This was three days after Facebook announced agreements to purchase Oculus VR.[9]

Technical writer

Michael Abrash was a columnist in the 1980s for a magazine called Programmer's Journal. Those articles were collected in the 1989 book, Power Graphics Programming.

His second book, Zen of Assembly Language (1990), focused on writing efficient assembly code for the 16-bit 8086 processor, but was released after the 80486 CPU was already available.[10] The key point of Zen of Assembly Language was that performance must always be measured, and the book included a tool called the Zen Timer to check if theoretical code optimizations actually worked.

Much of the content of Zen of Assembly Language was updated in Zen of Code Optimization: The Ultimate Guide to Writing Software That Pushes PCs to the Limit (1994),[11] along with new material. The presentation of stepwise program refinement empirically demonstrated how algorithm re-design could improve performance up to a factor of 100. Assembly language re-coding, on the other hand, may only improve performance by a factor of 10. Abrash also showed how elusive performance improvement can be. Simply improving performance in one subroutine would expose bottlenecks in other routines and so on. Finally, he demonstrated processor-dependent assembly-based performance improvements by comparing assembly language optimizations across x86 family members.

Another lesson Abrash offered was how hard-earned performance rewards by such micro-optimizations could disappear or even make the program execute slower. Abrash was able to gain performance by carefully counting clock cycles of each instruction and ordering instructions in such a way that they used a minimal number of clock cycles. However, the number of clock cycles per instruction changed with new implementations of the x86 architecture and, as a result, his performance gains were lost from one generation to the next. For example, the bit-oriented "XOR EAX, EAX" (example in Intel assembler syntax) instruction was the fastest way to set a register to zero in the early generations of the x86, but most code is generated by compilers and compilers rarely generated XOR instructions, so the IA designers decided to move the frequently occurring compiler generated instructions up to the front of the combinational decode logic, making the literal "MOV EAX, $0" instruction execute faster than the XOR instruction.[12] Still, carefully hand optimized assembler code will in general perform well on later x86 processors, even without retuning for the new architecture. The reason is that the optimization policies change only gradually between the architectures, so that many optimization assumptions valid for the original architecture still hold on the new architectures, for example "integer arithmetic is significantly faster than floating point arithmetic" or "minimize memory accesses for maximum register usage".

In 1997 Abrash's Graphics Programming Black Book,[13][14] was published. It was a collection of his Dr. Dobb's articles and his work on the Quake graphic subsystem.

References

  1. Lua error in package.lua at line 80: module 'strict' not found.
  2. Lua error in package.lua at line 80: module 'strict' not found.
  3. Lua error in package.lua at line 80: module 'strict' not found.
  4. Lua error in package.lua at line 80: module 'strict' not found.
  5. Lua error in package.lua at line 80: module 'strict' not found.
  6. Lua error in package.lua at line 80: module 'strict' not found.
  7. Lua error in package.lua at line 80: module 'strict' not found.
  8. Lua error in package.lua at line 80: module 'strict' not found.
  9. Lua error in package.lua at line 80: module 'strict' not found.
  10. Lua error in package.lua at line 80: module 'strict' not found.
  11. Lua error in package.lua at line 80: module 'strict' not found.
  12. 80x86 Integer Instruction Set "MOV reg, imm 186 -> 3 clock cycle [...] XOR reg, reg 186 -> 3-4 clock cycle"
  13. Lua error in package.lua at line 80: module 'strict' not found.
  14. Lua error in package.lua at line 80: module 'strict' not found.

External links