Jun 092011

In my last post on “Understanding the Cortex A8 architecture,” I promised that I will make a web-based front-end to my Cortex A8 test harness so that the readers can run experiments themselves. The tool is ready and kicking. This post shows how a developer can use it to learn the A8 architecture.  As far as I know, this is the first setup of its kind.

Continue reading “Tips for iPhone Developers: The web-based sandbox for understanding Cortex A8 is ready (Part 3)” »

May 302011

Two readers (HWM and Amateur Professional) have rightfully called me out that my recent article–“Ten things every programmer must know ”–provides only a list of items to study without successfully conveying the importance of learning those items. These readers make a very valid point indeed and the purpose of this post is to provide the motivation. The short answer is that the importance of efficient code has increased in recent years and it is hard to write efficient code without knowing hardware.

Update 6/19/2011: I have written a computer science self-assessment for developers to test their knowledge about computer science.

Continue reading “Quick Post: Why do programmers need to understand hardware?” »

May 242011

I had a discussion with a colleague an hour ago about how much slower is python compared to C. His guess was 10x and I was expecting it to be less than 10x. It turns out that python is more than 10x slower. Before doing my own comparison, I first googled for a comparison but most of the existing comparisons had I/O operations which makes the comparison hazy because I/O takes the same amount of execution time in both languages, which indirectly favors the slower language. I decided I want my analysis to be solely compute-bound. I coded my favorite computer-bound kernel, a histogram, in both C and python and tested on an Intel Core2Quad system with 4GB of memory. The code and results follow.

Continue reading “Quick post: Python vs C in compute-bound workloads” »

May 162011

Prof. Yale Patt defines computer architecture as the contract between hardware and software. Computer architects partition the work between hardware and software,  and also define the interface between them (Instruction Set Architecture). Computer architects make their decisions based on the needs of the customers and the constraints posed by device physics and finances.

The factors that influence our decisions continue to change. This post describes what in my opinion are the top three factors that (should) influence our decisions today.

Continue reading “Three factors that influence CPU architecture” »