Performance chasing has always been the theme in the game of CPU design and manufacturing. Players in this game try their best to make processor running faster and consuming less power. To achieve that, the designers need to test running various workloads on the new architecture to make sure there is no big performance issue and the major portion of them may run even better than on the old ones. To deliver the performance gain, CPU designers may have to conjecture the behaviors of the software programs, tweak the instruction pipeline and memory sub-systems, in addition to creating more complex but more efficient instructions. While Moore's Law still holds true and the on-die transistor budget does provide room for the hardware to do more. This is a known trend - but not the full one.
Writing great code is probably the dream of every software developer. Ever since they start learning programming, they were told there are measurable criteria of great code like good convention, beautiful architecture, and cross-platform compatibility. But seldom performance can draw early attention of the tutors. Code optimization techniques may only appears in the classes for developers who specialize in system software like compiler. Relying on the hardware upgrade to achieve performance gain is still the perception.
While the arguable definition of software and hardware's responsibility for performance has existed and will apparently continue, one thing is clear. The applications, regarding the needs from the end users, go versatile. Solely counting on the hardware to deliver performance for all software is not a smart thought. As hot as it might be in the real world competition, software developers need to write performance code as early as possible in their development cycles.
We may be able to do a better job if we would take the challenge to teach writing performance code when students start their journey of programming. Actually, programs (in native programming language) are composed of data structures (variables and structures) and constructs like loop, condition/branch and routines. Applying some known tricks to each of those will make the code's performance good enough. And pattern-like teachable points will make it easier to be gotten right.
It's good to see the education industry has started to follow the trend - the number of universities that teach parallel programming to take performance gain reaches 1000 world wide. Will it be more difficult to insert those performance bit into the current curricula?
Writing great code is probably the dream of every software developer. Ever since they start learning programming, they were told there are measurable criteria of great code like good convention, beautiful architecture, and cross-platform compatibility. But seldom performance can draw early attention of the tutors. Code optimization techniques may only appears in the classes for developers who specialize in system software like compiler. Relying on the hardware upgrade to achieve performance gain is still the perception.
While the arguable definition of software and hardware's responsibility for performance has existed and will apparently continue, one thing is clear. The applications, regarding the needs from the end users, go versatile. Solely counting on the hardware to deliver performance for all software is not a smart thought. As hot as it might be in the real world competition, software developers need to write performance code as early as possible in their development cycles.
We may be able to do a better job if we would take the challenge to teach writing performance code when students start their journey of programming. Actually, programs (in native programming language) are composed of data structures (variables and structures) and constructs like loop, condition/branch and routines. Applying some known tricks to each of those will make the code's performance good enough. And pattern-like teachable points will make it easier to be gotten right.
It's good to see the education industry has started to follow the trend - the number of universities that teach parallel programming to take performance gain reaches 1000 world wide. Will it be more difficult to insert those performance bit into the current curricula?
