in reply to Re: Weird performance issue with Strawberries and Inline::C
in thread Weird performance issue with Strawberries and Inline::C

Strawberryperl 5.32 used gcc 8.3.0 while 5.42.0.1 uses gcc 13.2.0 which probably accounts for the difference between versions.

From looking at godbolt gcc 8.3.0 optimizes that branch into the conditional expression while 13.2.0 doesn't

  • Comment on Re^2: Weird performance issue with Strawberries and Inline::C

Replies are listed 'Best First'.
Re^3: Weird performance issue with Strawberries and Inline::C
by syphilis (Archbishop) on Oct 13, 2025 at 02:53 UTC
    From looking at godbolt gcc 8.3.0 optimizes that branch into the conditional expression while 13.2.0 doesn't

    Going back through my own builds of perl on Windows, I can see that the rot goes back as far as gcc-10.
    I don't know if gcc-9 was afflicted with this same issue as I don't have a perl that was built with gcc-9.

    Incidentally, things are much better with perl-5.42.0 built using Microsoft's Visual Studio 2022:
    v5.42.0 String length: 100000 Rate c4 c3 c4 13558/s -- -8% c3 14740/s 9% --
    (Well done, them ;-)

    BTW, the OP will probably be able to use gcc-8.3.0 to build the script, and reap the benefits of the better optimization capabilities provided by gcc-8.3.0.
    I inserted the following just prior to the "use Inline C => << 'END_OF_C';" in the OP's script.
    use Inline C => Config => # Force recompilation FORCE_BUILD => 1, # Set CC to to path to gcc.exe version 8.3.0 CC => 'C:/sp/_64/sp-5.32.0/c/bin/gcc.exe', # View build output BUILD_NOISY => 1, ;
    That worked fine for me on my build of perl-5.42.0, using gcc-15.1.0:
    v5.42.0 String length: 100000 Rate c3 c4 c3 14460/s -- -0% c4 14531/s 0% --
    Without that modification, the output was:
    v5.42.0 String length: 100000 Rate c4 c3 c4 3528/s -- -76% c3 14777/s 319% --
    UPDATE:
    I tried that same hack of using gcc.exe version 8.3.0 with current blead (built using gcc-15.2.0) and it failed with:
    try2_pl_62b5.c: loadable library and perl binaries are mismatched (got + first handshake key 0000000012e00080, needed 0000000012d00080)
    Looks like us hackers have now been deprived of yet another liberty.
    It's a bit more fickle than I thought. The hacked script works fine for my own build of perl-5.42.0, but not for Strawberry's build of perl-5.42.0. (There are small differences between those two builds of 5.42.0, but it would make better sense to me if it was the other way around. Anyway .... whilst I find this to be tantalizingly interesting, it's not massively important.)
    (If it's going to crash, I would prefer that they let it just do that - rather than forbid something simply because the practice is deemed to be dubious.)

    Cheers,
    Rob
Re^3: Weird performance issue with Strawberries and Inline::C
by NERDVANA (Priest) on Oct 13, 2025 at 02:51 UTC
    Wow that's a cool website! Never seen that before.