Ladies and gentlemen,
Note: Until the end of this blog article, I talk about my history why I came where I am now. You may fast-forward to the next articles.
Times have changed. I still remember the time when I was kid and I was starting with computers. My father bought the first family computer to do his basic office work (mainly using Word.) It was an Acer desktop PC running Windows 95. It had 2.1 GB of hard disk space and 32 MB of RAM. At the time of purchase, this desktop PC was supposedly the top-in the line machine.
Back in the days, nobody really knew how to use the computer. My father knew only the basics of the basics (turn the computer on, and open a program.). Next in the line, came my elder brother who, at the time, at best knew how to install a PC game.
Internet was scarce commodity since we were using dial-up. Dial-up networks were ridiculously slow and we paid per minute.
Then there was me. I was not allowed to use to computer at all, since I was known to break stuff. However, a couple of months later, I was allowed to have access since we were learning how to use Microsoft Paint at school. And they were right; I did end up breaking the computer – at least the software. I somehow crashed Windows entirely and it would boot anymore. Needless to say, my father was extremely furious as he had to pay the technician to fix it.
Speeding up a bit and skipping some part, a few months later, I had started programming. It was the most basic of things. I was automating some tasks with batch. Batch was fun. It was sequential, logical and loved the jumps, done with the goto: statement. I was still small when I started with Visual Basic, all on my own. I did some stupid programs and they were fun.
A bit a year after the purchase of that desktop machine, the latter was upgraded to Windows 98 and to 64MB of RAM. I was already more knowledgeable in computer stuffs than anybody else in the family.
It appears that a significantly large amount computer professionals these days happen to learn their first programming language on their own. All of them started with proper languages (like C, C++, python) or scripting languages or markup languages (like HTML).[sources: sampling my immediately network].
Well, my generation of people were born in the age of uni-processors which makes sense why we start with such languages. We then get acquainted to MPI and OpenMP at the university.
Times have changed now, and as multi-core processors are becoming the de facto standard these days. Even low-powered devices like mobile phones are multicore. As the trend speaks for itself, it will be time to start teaching MPI and co. right in high school itself (or even before).
While I started with serial programs, I guess in a few years to come, kids will start right away with algorithms. The basic books about programming will already guide them to think into parallel ways of solving problems. Serial algorithms will be a thing of the past and will not even be teached at all (maybe in history classes.). Just kidding.
Anyway, if you were like me and were raised in the uni-processor world and you want to embark on the HPC bandwagon, it is paramount to understand some core computer architecture concepts before you are able to grasp why things are done the way they are.
You will need to understand what is going on when a processor is multicore. You will need to know what is a NUMA architecture. (I assume you know clearly the von Neumann architecture. What, no? Don’t panic :)) I will introduce it, and briefly tell you about the Flynn’s taxonomy. Knowing these fundamental architectures, you will have the basic foundation to embrace the parallel world.
More coming soon..