www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Re: GDC for dummies

reply bearophile <bearophileHUGS lycos.com> writes:
Jerome:
 That's your problem right there. You can install MinGW wherever you
 want (although it's probably best to avoid spaces in the path),
 but you *must* install gdc to the *same* folder.
 Then add c:\mingw\bin to the path if it didn't do it

It works, thank you very much :-) As a first test I have tried to benchmark the templated Bitfield accessors: Timings (seconds), n=4_000_000*25: C: 0.80 GDC: 1.30 DMD: 3.18 Compiled with: gcc version 3.4.5 (mingw special) (gdc 0.24, using dmd 1.020) DMD v1.023 gcc version 3.4.2 (mingw-special) Compilation parameters I have used: gcc -O3 -s -finline-functions -ffast-math -fomit-frame-pointer -funroll-loops -march=pentiumpro bitfieldsC.c -o bitfieldsC gdc -O3 -s -frelease -finline-functions -ffast-math -fomit-frame-pointer -funroll-loops -march=pentiumpro bitfieldsD.d -o bitfieldsD2 dmd -O -release -inline bitfieldsD.d And for reference here is the assembly too, it's interesting. ASM from GCC: .file "bitfieldsC.c" .def ___main; .scl 2; .type 32; .endef .data .align 4 LC0: .long 1628676761 .long 1620574103 .long 1237153253 .long 1098880307 .long 87513741 .long 13181925 .long 14686126 .long 7429435 .long 16286706 .long 6474381 .long 4879794 .long 7734725 .long 3745958 .long 13353858 .long 4236193 .long 7587 .long 4309 .long 28846 .long 7313 .long 14516 .long 126 .long 143 .long 171 .long 221 .long 156 .section .rdata,"dr" LC1: .ascii "%d\12\0" .text .p2align 4,,15 .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl %ebp movl $16, %eax movl %esp, %ebp pushl %edi pushl %esi pushl %ebx subl $140, %esp andl $-16, %esp call __alloca call ___main leal -136(%ebp), %eax movl $100, %ecx movl $LC0, %edx movl %ecx, 8(%esp) xorl %esi, %esi xorl %edi, %edi movl %edx, 4(%esp) movl %eax, (%esp) call _memcpy L9: xorl %ebx, %ebx .p2align 4,,15 L8: movl -136(%ebp,%ebx,4), %eax movl -132(%ebp,%ebx,4), %edx movl %eax, %ecx shrl $2, %ecx andl $1, %eax andl $127, %ecx addl %eax, %ecx leal (%esi,%ecx), %ecx movl %edx, %esi movl -128(%ebp,%ebx,4), %eax shrl $2, %esi andl $1, %edx andl $127, %esi addl %edx, %esi addl %esi, %ecx movl -124(%ebp,%ebx,4), %edx movl %eax, %esi shrl $2, %esi andl $1, %eax andl $127, %esi addl %eax, %esi movl %edx, %eax addl %esi, %ecx shrl $2, %eax movl -120(%ebp,%ebx,4), %esi andl $127, %eax andl $1, %edx addl %edx, %eax addl $5, %ebx addl %eax, %ecx movl %esi, %eax shrl $2, %eax andl $1, %esi andl $127, %eax addl %esi, %eax cmpl $24, %ebx leal (%ecx,%eax), %esi jle L8 incl %edi cmpl $3999999, %edi jle L9 movl %esi, 4(%esp) movl $LC1, (%esp) call _printf leal -12(%ebp), %esp xorl %eax, %eax popl %ebx popl %esi popl %edi popl %ebp ret .def _memcpy; .scl 3; .type 32; .endef .def _printf; .scl 3; .type 32; .endef ---------------------- ASM from GDC: .file "bitfieldsD.d" .globl __D34TypeInfo_S10bitfieldsD10INTORFLOAT6__initZ .section .data$_D34TypeInfo_S10bitfieldsD10INTORFLOAT6__initZ,"w" .linkonce same_size .align 4 __D34TypeInfo_S10bitfieldsD10INTORFLOAT6__initZ: .long __D15TypeInfo_Struct6__vtblZ .long 0 .long 21 .long __D34TypeInfo_S10bitfieldsD10INTORFLOAT6__initZ+44 .long 4 .long 0 .long 0 .long 0 .long 0 .long 0 .long 0 .ascii "bitfieldsD.INTORFLOAT\0" .globl __D10bitfieldsD10INTORFLOAT6__initZ .section .rdata,"dr" .align 4 __D10bitfieldsD10INTORFLOAT6__initZ: .space 4 LC0: .ascii "%d\12\0" .text .p2align 4,,15 .globl __Dmain .def __Dmain; .scl 2; .type 32; .endef __Dmain: pushl %ebp movl $25, %ecx movl $25, %edx pushl %edi xorl %ebp, %ebp xorl %edi, %edi pushl %esi pushl %ebx subl $140, %esp movl %ecx, %ebx movl %edx, 4(%esp) sall $2, %ebx leal 16(%esp), %esi movl $__D11TypeInfo_Ak6__initZ, (%esp) call __d_newarrayT movl $1628676761, (%edx) movl $1620574103, 4(%edx) movl $1237153253, 8(%edx) movl $1098880307, 12(%edx) movl $87513741, 16(%edx) movl $13181925, 20(%edx) movl $14686126, 24(%edx) movl $7429435, 28(%edx) movl $16286706, 32(%edx) movl $6474381, 36(%edx) movl $4879794, 40(%edx) movl $7734725, 44(%edx) movl $3745958, 48(%edx) movl $13353858, 52(%edx) movl $4236193, 56(%edx) movl $7587, 60(%edx) movl $4309, 64(%edx) movl $28846, 68(%edx) movl $7313, 72(%edx) movl $14516, 76(%edx) movl $126, 80(%edx) movl $143, 84(%edx) movl $171, 88(%edx) movl $221, 92(%edx) movl $156, 96(%edx) movl %ebx, 8(%esp) xorl %ebx, %ebx movl %edx, 4(%esp) movl %esi, (%esp) call _memcpy cmpl $4000000, %ebx jge L9 L25: xorl %ecx, %ecx jmp L11 .p2align 4,,7 L23: movl 16(%esp,%ecx,4), %edx xorl %esi, %esi movl %edx, %eax shrl $2, %eax andl $1, %edx andl $127, %eax addl %edx, %eax movl 20(%esp,%ecx,4), %edx addl %eax, %edi adcl %esi, %ebp xorl %esi, %esi movl %edx, %eax shrl $2, %eax andl $1, %edx andl $127, %eax addl %edx, %eax movl 24(%esp,%ecx,4), %edx addl %eax, %edi adcl %esi, %ebp xorl %esi, %esi movl %edx, %eax shrl $2, %eax andl $1, %edx andl $127, %eax addl %edx, %eax movl 28(%esp,%ecx,4), %edx addl %eax, %edi adcl %esi, %ebp xorl %esi, %esi movl %edx, %eax shrl $2, %eax andl $1, %edx andl $127, %eax addl %edx, %eax movl 32(%esp,%ecx,4), %edx addl %eax, %edi adcl %esi, %ebp xorl %esi, %esi movl %edx, %eax shrl $2, %eax andl $1, %edx andl $127, %eax addl %edx, %eax addl %eax, %edi adcl %esi, %ebp addl $5, %ecx L11: cmpl $25, %ecx jl L23 incl %ebx cmpl $4000000, %ebx jl L25 L9: movl %edi, 4(%esp) movl %ebp, 8(%esp) movl $LC0, (%esp) call _printf addl $140, %esp xorl %eax, %eax popl %ebx popl %esi popl %edi popl %ebp ret .section .rdata,"dr" LC1: .ascii "bitfieldsD\0" .globl __D10bitfieldsD12__ModuleInfoZ .data .align 4 __D10bitfieldsD12__ModuleInfoZ: .long 0 .long 0 .long 10 .long LC1 .long 1 .long __D10bitfieldsD12__ModuleInfoZ+48 .long 0 .long 0 .long 0 .long 0 .long 0 .long 0 .long __D3std5stdio12__ModuleInfoZ .align 4 ___mod_ref.0: .long 0 .long __D10bitfieldsD12__ModuleInfoZ .section .ctors,"w" .align 4 .long __D10bitfieldsD9__modinitFZv .text .p2align 4,,15 .globl __D10bitfieldsD10INTORFLOAT4signMFZk .def __D10bitfieldsD10INTORFLOAT4signMFZk; .scl 2; .type 32; .endef __D10bitfieldsD10INTORFLOAT4signMFZk: movl 4(%esp), %eax movl (%eax), %eax andl $1, %eax ret .p2align 4,,15 .globl __D10bitfieldsD10INTORFLOAT4signMFkZv .def __D10bitfieldsD10INTORFLOAT4signMFkZv; .scl 2; .type 32; .endef __D10bitfieldsD10INTORFLOAT4signMFkZv: movl 4(%esp), %eax movl 8(%esp), %ecx movl (%eax), %edx andl $1, %ecx andl $-2, %edx orl %ecx, %edx movl %edx, (%eax) ret .p2align 4,,15 .globl __D10bitfieldsD10INTORFLOAT14biasedexponentMFZk .def __D10bitfieldsD10INTORFLOAT14biasedexponentMFZk; .scl 2; .type 32; .endef __D10bitfieldsD10INTORFLOAT14biasedexponentMFZk: movl 4(%esp), %eax movl (%eax), %eax shrl %eax andl $255, %eax ret .p2align 4,,15 .globl __D10bitfieldsD10INTORFLOAT14biasedexponentMFkZv .def __D10bitfieldsD10INTORFLOAT14biasedexponentMFkZv; .scl 2; .type 32; .endef __D10bitfieldsD10INTORFLOAT14biasedexponentMFkZv: movzbl 8(%esp), %eax movl 4(%esp), %ecx movl (%ecx), %edx addl %eax, %eax andl $-511, %edx orl %eax, %edx movl %edx, (%ecx) ret .p2align 4,,15 .globl __D10bitfieldsD10INTORFLOAT11significandMFZk .def __D10bitfieldsD10INTORFLOAT11significandMFZk; .scl 2; .type 32; .endef __D10bitfieldsD10INTORFLOAT11significandMFZk: movl 4(%esp), %eax movl (%eax), %eax shrl $9, %eax ret .p2align 4,,15 .globl __D10bitfieldsD10INTORFLOAT11significandMFkZv .def __D10bitfieldsD10INTORFLOAT11significandMFkZv; .scl 2; .type 32; .endef __D10bitfieldsD10INTORFLOAT11significandMFkZv: movl 4(%esp), %ecx movl 8(%esp), %eax movl (%ecx), %edx andl $8388607, %eax sall $9, %eax andl $511, %edx orl %eax, %edx movl %edx, (%ecx) ret .p2align 4,,15 .def __D10bitfieldsD9__modinitFZv; .scl 3; .type 32; .endef __D10bitfieldsD9__modinitFZv: movl __Dmodule_ref, %eax movl $___mod_ref.0, %edx movl %edx, __Dmodule_ref movl %eax, ___mod_ref.0 ret .def _memcpy; .scl 2; .type 32; .endef Bye, bearophile
Nov 28 2007
parent 0ffh <frank frankhirsch.youknow.what.todo.net> writes:
bearophile wrote:
 Jerome:
 That's your problem right there. You can install MinGW wherever you
 want (although it's probably best to avoid spaces in the path),
 but you *must* install gdc to the *same* folder.
 Then add c:\mingw\bin to the path if it didn't do it

It works, thank you very much :-) As a first test I have tried to benchmark the templated Bitfield accessors: Timings (seconds), n=4_000_000*25: [...]

Nice, thanks for the info! But, now of course I wonder how D2.Phobos' templates compare... =) regards, frank
Nov 28 2007