Tuesday, March 23, 2010

What to do with 48 cores

Multiple threads allow for various problems to be solved in different ways that were not possible in past years. For example, regular expressions may have two different paths that they can take based on the input. Normally, a regular expression engine has to try one way then back track to the other or, if I understand DFAs correctly, return to a previous state that is stored. With multiple threads, multiple paths can be tested concurrently, therefore a sufficiently complex regular expression with a sufficiently complex and large data set to match against could run more efficiently on a multi-core system compared to a single-core system, however the benefits of more cores are likely to decrease as more are added.

So, what can one do with 48 cores that will truly maximize their potential? To truly see the benefit of them, data has to be very accessible to them, hence the application should maximize RAM/cache usage and avoid disk access as much as possible. Ray tracing, if done right, would be a great application for this since it can be done in parallel very easily, however anyone interested in computer graphics would suggest this rendering it less interesting and unique. Cryptography enthusiasts could suggest password or message cracking as a potential use.

Link analysis, on the other hand, would be very interesting. Granted, the data is strewn randomly through memory, thus cache misses will most likely be common, however with a sufficient number of cores, many different paths can be taken concurrently. Specifically, I can see this being of use in intelligence gathering or similar efforts in law enforcement. For example, let's say that a suspect is found. Through link analysis, we can look at all known associates, bank accounts, etc. and try to determine patterns. A small amount of relationships may be feasible on a smaller computer, however larger organizations may have more complex relationships, especially if there is significant interaction with entities outside of the core organization. With enough cores, many relationships can be explored in parallel and the software can then infer details about the relationships, such as seeing if suspects are possibly gaining information from an insider.

The human aspect of this is only one possibility. Looking at crimes to discover patterns is another, especially at a national level certain crimes are not localized. Imagine a serial killer who travels a significant amount and has victims in many cities. Local authorities may never see this pattern or share this information. Also, such a system can look at individual aspects of each crime and infer patterns with other crimes. These relationships can then be weighted to show how likely a relationship is. Granted, this is not a silver bullet, however every bit of information that can relate different crimes together may help match up multiple clues, thus leading investigators closer to a suspect.

So, in conclusion, my idea is not the sexiest or the coolest, however I hope it is more original and potentially useful than others.