For what it's worth these topics are taught in university to a certain extent.
I took a class last semester where we had to write an assembler and virtual machine for MIPS (in C), had exams on branch prediction, instruction pipelining, program-performance as impacted by different types of caches.
But really, there is a lot of information to absorb. Intel's been doing heavy research on processors for decades. It's one thing to be familiar with the concept of branch prediction and instruction pipelining, it's another thing to know enough to actually have a [positive] impact on the performance of a program.
I can't remember where I saw it, but there was some mildly controversial talk from someone in industry to that effect at a CS conference, chastising universities for teaching their students about how CPUs work by using a model based more or less on 1980s RISC machines, which in his view was not very relevant to how a modern CPU works, and gave the wrong performance intuitions. I don't remember if he proposed a solution, though. In computer-engineering majors you solve that by having multiple courses, which work their way up to the modern complexities, but in a one-semester architecture course as part of a CS major, there isn't infinite room.
Comments
For what it's worth these topics are taught in university to a certain extent.
I took a class last semester where we had to write an assembler and virtual machine for MIPS (in C), had exams on branch prediction, instruction pipelining, program-performance as impacted by different types of caches.
But really, there is a lot of information to absorb. Intel's been doing heavy research on processors for decades. It's one thing to be familiar with the concept of branch prediction and instruction pipelining, it's another thing to know enough to actually have a [positive] impact on the performance of a program.
I can't remember where I saw it, but there was some mildly controversial talk from someone in industry to that effect at a CS conference, chastising universities for teaching their students about how CPUs work by using a model based more or less on 1980s RISC machines, which in his view was not very relevant to how a modern CPU works, and gave the wrong performance intuitions. I don't remember if he proposed a solution, though. In computer-engineering majors you solve that by having multiple courses, which work their way up to the modern complexities, but in a one-semester architecture course as part of a CS major, there isn't infinite room.
If someone could remember what mjn is talking about, I would really appreciate a link to the talk.