I was talking to some people at the Intel booth at Linux World Expo
yesterday about their compiler, and decided to try it out on Perl.  I
have some results below, but first some caveats:

- perlbench is not a very good measure of how web applications will
perform.  It tends to be weighted towards math functions.

- If your application is spending most of its time doing I/O (i.e.
reading from a database), this will probably not help you.  Most
mod_perl apps are I/O bound, waiting for databases.

- I don't know anything about compiler flags.  I just used the ones that
Intel used in their comparison.

- There were two test failures on the Perl compiled with Intel's
compiler.  I don't know yet if these are serious.

So, with all that out of the way, perlbench showed about a 4%
improvement using "aggressive" optimization flags with gcc, and Intel's
compiler got about 8% above that, or 12% better than Perl compiled with
defaults for Linux.  The details are attached.  Note that my baseline
Perl, compiled with all Linux defaults, still beats the one that ships
with Red Hat 9 by about 20%.

If I get ambitious, I might try compiling enough pieces with icc to run
one of Josh's templating benchmarks.

- Perrin


A) perl-5.008001
        path        = /usr/local/perl581/bin/perl
        cc          = cc
        optimize    = -O3
        ccflags     = -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE 
-D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm
        usemymalloc = n

B) perl-5.008001
        path        = /usr/local/perl581_icc/bin/perl
        cc          = icc
        optimize    = -O3
        ccflags     = -we147 -xW -tpp7 -ipo -ipo_obj -fno-strict-aliasing 
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm
        usemymalloc = n

C) perl-5.008001
        path        = /usr/local/perl581_gcc_agg/bin/perl
        cc          = cc
        optimize    = -O3
        ccflags     = -ffast-math -funroll-all-loops -fomit-frame-pointer 
-march=pentium4 -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE 
-D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm
        usemymalloc = n

                           A       B       C
                        ----    ----    ----
arith/mixed              100     115      90
arith/trig               100     146     106
array/copy               100      98      99
array/foreach            100     113     139
array/index              100     109      93
array/pop                100     106      99
array/shift              100     107      97
array/sort-num           100     100     100
array/sort               100     140     108
call/0arg                100     102      93
call/1arg                100     116     117
call/2arg                100      98      83
call/9arg                100     121      99
call/empty               100      95      70
call/fib                 100     102      97
call/method              100     101      97
call/wantarray           100     106      98
hash/copy                100     125     108
hash/each                100     119      95
hash/foreach-sort        100     131     101
hash/foreach             100     123     103
hash/get                 100     108      89
hash/set                 100     134      94
loop/for-c               100      99      83
loop/for-range-const     100     123      98
loop/for-range           100     124     103
loop/getline             100     130     113
loop/while-my            100     120     162
loop/while               100     124     127
re/const                 100      98     104
re/w                     100     124     111
startup/fewmod           100     101     104
startup/lotsofsub        100     110     107
startup/noprog           100      54      99
string/base64            100     110     107
string/htmlparser        100     112      99
string/index-const       100     110      83
string/index-var         100     112      90
string/ipol              100     106      89
string/tr                100     120     120

AVERAGE                  100     112     102

-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to