gdc or ldc for faster programs?

Ali Çehreli acehreli at yahoo.com
Tue Jan 25 19:52:17 UTC 2022


Sorry for being vague and not giving the code here but a program I wrote 
about spelling-out parts of a number (in Turkish) as in "1 milyon 42" 
runs much faster with gdc.

The program integer-divides the number in a loop to find quotients and 
adds the word next to it. One obvious optimization might be to use POSIX 
div() and friends to get the quotient and the remainder at one shot but 
I made myself believe that the compilers already do that. (But still not 
sure. :o) )

I am not experienced with dub but I used --build=release-nobounds and 
verified that -O3 is used for both compilers. (I also tried building 
manually with GNU 'make' with e.g. -O5 and the results were similar.)

For a test run for 2 million numbers:

ldc: ~0.95 seconds
gdc: ~0.79 seconds
dmd: ~1.77 seconds

I am using compilers installed by Manjaro Linux's package system:

ldc: LDC - the LLVM D compiler (1.28.0):
   based on DMD v2.098.0 and LLVM 13.0.0

gdc: dc (GCC) 11.1.0

dmd: DMD64 D Compiler v2.098.1

I've been mainly a dmd person for various reasons and was under the 
impression that ldc was the clear winner among the three. What is your 
experience? Does gdc compile faster programs in general? Would ldc win 
if I took advantage of e.g. link-time optimizations?

Ali


More information about the Digitalmars-d-learn mailing list