Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

Ovid (2709)

  (email not shown publicly)
AOL IM: ovidperl (Add Buddy, Send Message)

Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.

Journal of Ovid (2709)

Friday October 03, 2003
12:00 AM

Perl vs. C (is this typical?)

[ #15031 ]

I was doing some more work on my neural net module when I decided to try to compare the performance with AI::NeuralNet::BackProp, a pure Perl neural network. I discovered right off the bat that I can't compare them directly because of differences in how one can create a network, but I felt that I managed a close enough comparison that I could get a rough feel for the performance characteristics.

My network has the core written in C. For one set of data, I have 27 pairs of array references, each with four elements. In the C version, I iterate over these 27 pairs a total of thirty thousand times. It takes about 10 seconds. In the pure Perl version, running that data through the network just once takes about 600 seconds. Admittedly, I'm doing a lot of floating point math and storing this data in arrays, so I know that I should get a significant boost, but this seems ridiculous.

I know it's not a fair comparison. The network architectures are slightly different (the one for Perl actually favored it since I had fewer nodes) and the internals are different, but comparing 30,000 iterations in 10 seconds to one iteration in 600 seconds just blows me away. It's been a long time since I've dabbled in C, but I'm astonished to see that much of a speedup. Is this typical?

Disclaimer: my neural network is a heavily modified version of the code found in AI Application Programming by M. Tim Jones. I don't claim to be so smart as to have been able to write one myself. Go out and buy the book. If you're interested in AI and you know C, it's worth the money.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • Naturally, well written C is unbeatable in number-crunching, but a x1.8 mln times performance gain is weird. My best bet: either there's something wrong in your benchmark, or the pure Perl module is written very badly.
  • Colour me naive, (close relative of mauve I guess), but a warped kind of opposite to this happened to me this afternoon. Not in the sense of finding a numberical routine that ran x-million times faster in perl, but in being shocked at how fast perl could rip through some arithmetic.

    I'm teaching a course that touches on crypto, and the intro lecture mentions Hill's cipher in 2x2 form. (2x2 matrices with elemnents in Z_26, say 0..25.) I wondered just what proportion of matrices would be invertible mod 26, an
  • A factor of 100-200 isn't out of line, but the massive difference you're seeing means there's likely a bug in the logic somewhere--either you're doing too much in the perl code or too little in the C code...