Like I mentioned before, I started my thesis for my Computer Science degree. And without getting into too much detail at this point, one of the problems we are trying to tackle is the conversion from sequential programs to parallel programs.
The target architecture is not really of importance although we are stuffing it in a multi-core chip which is programmed into a Virtex 6 FPGA.
The thing that strikes me as odd is that an insane amount of work is being put into creating new applications for multi-core environments using tool-kits and various paradigms like tasks, task graphs, Khan Networks – whatever.
After years of development, the mainstream development tools come with tools to help the programmer to design multi-core programs without having to specify each and every thread and communication channels – a drawback which prevents most programmers to easily write parallel programs.
But most software these days is based on monolithic code meant to be running on a single core. Slowly parts are rewritten to exploit the surplus cores modern computers have but even then, most software scales poorly to more cores.
Since most ‘fixes’ involve a complete rewrite, this shift to actually write multi-threaded programs instead of having a hand full of manually designed partitions within a program to appear to be multi-core is finally beginning.
In a way, my research area is barely explored as I attempt to rewrite a decoder application to be converted from a single core program to something which can run on at least 8 cores… Hows that for multi-threading…