M
Mark Shelor
I've encountered a troublesome inconsistency in the Perl extension I've
written for CPAN (Digest::SHA). The problem involves the use of a
static array within a performance-critical transform function. When
compiling under gcc on my big-endian PowerPC (Mac OS X), declaring this
array as "static" DECREASES the transform throughput by around 5%.
However, declaring it as "static" on gcc/Linux/Intel INCREASES the
throughput by almost 30%.
I would prefer that the array not be "static" so that the underlying C
function will be thread-safe. However, giving up close to 30%
performance on gcc/Linux/Intel is unacceptable for a digest routine,
whose value is often closely tied to speed.
Can anyone enlighten me on this mystery, and recommend a simple, clean,
portable way to assure good performance on all host types?
TIA, Mark
written for CPAN (Digest::SHA). The problem involves the use of a
static array within a performance-critical transform function. When
compiling under gcc on my big-endian PowerPC (Mac OS X), declaring this
array as "static" DECREASES the transform throughput by around 5%.
However, declaring it as "static" on gcc/Linux/Intel INCREASES the
throughput by almost 30%.
I would prefer that the array not be "static" so that the underlying C
function will be thread-safe. However, giving up close to 30%
performance on gcc/Linux/Intel is unacceptable for a digest routine,
whose value is often closely tied to speed.
Can anyone enlighten me on this mystery, and recommend a simple, clean,
portable way to assure good performance on all host types?
TIA, Mark