Just outside of Fort Greene Park this afternoon, we saw an unusual sight: in a classroom in Brooklyn Technical High School, 15 juniors and seniors sat listening closely as Jeffrey M. Birnbaum, managing director and global head of platform solutions at Bank of America, taught them the finer points of parallel programming for high-performance computing applications, using code he had written himself. "This is a tough subject," he told them. "In any tough subject, it helps to see what someone else has done."

The class was part of a three-day boot camp that Birnbaum conceived and put together in collaboration with Intel engineers (with support from Bank of America, IBM and Blade Networks, as well as Randy Asher, the school's principal, who enthusiastically embraced the idea) to help students learn basic parallel programming concepts. Birnbaum was inspired by a realization that there are not enough skilled parallel programmers to meet the demand in industries such as Wall Street; his reading of the book Threading Building Blocks by James Reinders, Intel's chief evangelist, which instructs developers to learn to "think parallel" (in other words, understand how to write programs to perform many tasks at once, rather than one process after another); and a meeting with a high school student who took an immediate interest in parallel programming ideas, as well as Birnbaum's own conversion from serial to parallel programming, which took place about eight years ago.

"It became clear to me that you need to reopen your mind in order to re-run experiments that you may have run before," he says. "Young people are going to come with open minds, they'll be willing to trying anything, they'll come up with new solutions to problems. For a lot of the big problems we have today, we need new, creative solutions." In his class today, Birnbaum notes that his students asked thoughtful, insightful questions. "They had no problem even with advanced concepts that many of them were seeing for the first time," he says.

Parallel processing is important to Wall Street's survival and competitiveness, Birnbaum says. "In any software-involved industry -- and it would be hard to find an industry that's not software-involved -- software performance dictates the solutions that are possible," he says. "There's been a major shift in computer science like no other time for 20 years. CPUs today are fundamentally different than they were five years ago. They offer a real parallel programming opportunity."

To those Wall Street technologists who don't see a need to write or rewrite applications to run in parallel because they can get their applications to run on multi-core servers using virtualization or grid software, Birnbaum notes that there's no reason not to do parallel programing, virtualization and grid all in the same environment. But parallel programming provides a key advantage when different processes need to share data — in parallel programming, every thread can access the same data set at the same time and commonalities can be exploited. For instance, if a bond calculator for options spreads is calculating many of the same underliers for several different bonds, running the calculations on separate processors will require the same calculations to be made multiple times. But in parallel processing, results of calculations can be cached and applied to multiple bonds, eliminating the re-computing of the same tasks and making the program more efficient.

"Don't be trapped [in serial programming thinking]," Birnbaum advises. "Run tests. Multicore servers will produce different results."

Intel's Reinders, who also taught at the Brooklyn boot camp this week, says there are three key concepts to understand to write parallel programs well: scaling, correctness and maintainability.

Scaling is writing a program so that as it runs on more cores it will run faster. "Understanding what causes a program to scale is important and it's not a concept we've had to deal with before," he says.

Correctness has to do with the fact that, as Reinders says, "programming always has bugs, but some only occur in parallel programming." Two types of parallel-programming bugs are data races, which are error conditions in which two signals or sets of data collide, and deadlock, which is when two computer programs sharing the same resource prevent each other from accessing the resource, resulting in both programs ceasing to function. "If you understand these bugs, you'll understand what can go wrong," he says.

Maintainability of code is about writing applications such that they'll be useful 20 years from now. "There are good says to run programs in parallel and bad ways," he says.