Although not designed for it, old-school punched card machines were capable of pretty sophisticated computations. Here's a tidbit from Richard Feynman [1] on the crucial part played by IBM machines in the Manhattan Project circa 1945. They had even implemented a form of pipeline parallelism:<p>> Anyway we decided that the big problem--which was to figure out exactly what happened during the bomb's implosion, so you can figure out exactly how much energy was released and so on--required much more calculating than we were capable of. A clever fellow by the name of Stanley Frankel realized that it could possibly he done on IBM machines. The IBM company had machines for business purposes, adding machines called tabulators for listing sums, and a multiplier that you put cards in and it would take two numbers from a card and multiply them. There were also collators and sorters and so on.<p>> So Frankel figured out a nice program. If we got enough of these machines in a room, we could take the cards and put them through a cycle. Everybody who does numerical calculations now knows exactly what I'm talking about, but this was kind of a new thing then--mass production with machines. We had done things like this on adding machines. Usually you go one step across, doing everything yourself. But this was different--where you go first to the adder, then to the multiplier, then to the adder, and so on. So Frankel designed this system and ordered the machines from the IBM company because we realized it was a good way of solving our problems. [...]<p>> But one of the secret ways we did our problems was this. The problems consisted of a bunch of cards that had to go through a cycle. First add, then multiply--and so it went through the cycle of machines in this room, slowly, as it went around and around. So we figured a way to put a different colored set of cards through a cycle too, but out of phase. We'd do two or three problems at a time. [...]<p>> As the cards went through, sometimes the machine made a mistake, or they put a wrong number in. What we used to have to do when that happened was to go back and do it over again. But they noticed that a mistake made at some point in one cycle only affects the nearby numbers, the next cycle affects the nearby numbers, and so on. It works its way through the pack of cards. If you have fifty cards and you make a mistake at card number thirty-nine, it affects thirty-seven, thirty-eight, and thirty-nine. The next, card thirty-six, thirty-seven, thirty-eight, thirty-nine, and forty. The next time it spreads like a disease.
So they found an error back a way, and they got an idea. They would only compute a small deck of ten cards around the error. And because ten cards could he put through the machine faster than the deck of fifty cards, they would go rapidly through with this other deck while they continued with the fifty cards with the disease spreading. But the other thing was computing faster, and they would seal it all up and correct it. Very clever.<p>[1] "Surely You're Joking, Mr. Feynman!", Los Alamos chapter