Thread overview
Commenting out a print slows my code?
Mar 10, 2011
Charles McAnany
Mar 10, 2011
Jesse Phillips
Mar 10, 2011
spir
Apr 01, 2011
vincent feltkamp
March 10, 2011
Hi, all. I'm in college, taking a freshman-level CS class. (I'm actually a
senior chemist with free time.)
Anyhoo, the warm-up assignment was Hardy Taxi problem, phrased like this:
[Exposition removed.] 1729 is the smallest number such that for
(a!=b!=c!=d)>0, there exists a combination of a, b, c, and d where a^3+b^3 =
1729 = c^3+d^3.
The task was to find all other numbers with this property less than 25,000.
The code is basically

for (int iters = 1; iters <= 25_000; iters++){
   if(isTaxiNumber(iters)){
      writefln("%s is a taxi number", iters);
   }
}

(There's also a StopWatch timing things, and isTaxiNumber returns a struct,
not a bool. See attached code.)
This code runs in about 0.09 seconds.
If I comment out the writefln, it takes 0.11 seconds.
(These are collected from about 20 runs of each. Times are very consistent.)
Any ideas why commenting out the write makes things slower?
Cheers,
Charles.
March 10, 2011
Charles McAnany Wrote:

> (There's also a StopWatch timing things, and isTaxiNumber returns a struct,
> not a bool. See attached code.)
> This code runs in about 0.09 seconds.
> If I comment out the writefln, it takes 0.11 seconds.
> (These are collected from about 20 runs of each. Times are very consistent.)
> Any ideas why commenting out the write makes things slower?
> Cheers,
> Charles.

I couldn't get the code to compile with the stop watch. So instead I removed that and used time. In this case I get user times between .150 and .200 approximately. Maybe with the print statement your program is given higher priority than without, that would mean the operating system would let your application run longer or more frequently than other programs (don't remember if one or both of those is changed).
March 10, 2011
On 03/10/2011 01:44 AM, Charles McAnany wrote:
> Hi, all. I'm in college, taking a freshman-level CS class. (I'm actually a
> senior chemist with free time.)
> Anyhoo, the warm-up assignment was Hardy Taxi problem, phrased like this:
> [Exposition removed.] 1729 is the smallest number such that for
> (a!=b!=c!=d)>0, there exists a combination of a, b, c, and d where a^3+b^3 =
> 1729 = c^3+d^3.
> The task was to find all other numbers with this property less than 25,000.
> The code is basically
>
> for (int iters = 1; iters<= 25_000; iters++){
>     if(isTaxiNumber(iters)){
>        writefln("%s is a taxi number", iters);
>     }
> }
>
> (There's also a StopWatch timing things, and isTaxiNumber returns a struct,
> not a bool. See attached code.)
> This code runs in about 0.09 seconds.
> If I comment out the writefln, it takes 0.11 seconds.
> (These are collected from about 20 runs of each. Times are very consistent.)
> Any ideas why commenting out the write makes things slower?

No idea.

But more idiomatic D would rather b:
    foreach (n ; 1..25000)
        {...}

Also I don't understand why your loop var is called 'iters'.

Finally, the attachment is not readible by me: see below.

Denis

> begin 644 taxi.d
> M:6UP;W)T('-T9"YD871E=&EM93L@+R\@9F]R('1H92!3=&]P5V%T8V@@<W1R
> M=6-T+B`-"FEM<&]R="!S=&0N<W1R:6YG.R`O+V9O<B!T:&4@9F]R;6%T*"DN
> M(`T*:6UP;W)T('-T9"YS=&1I;SL@+R]P<FEN=&EN9RX@#0HO+R\@02!S=')U
> M8W0@=&AA="!R97!R97-E;G1S(&$@8V%B+B!)="!D;V5S;B=T(&1O('1H92!C
> M:&5C:VEN9R!T:&%T('1H92!O;F4@:6X@=&AE(&%S<VEG;FUE;G0@9&]E<RP@
> M=&AO=6=H+B`-"G-T<G5C="!T87AI0V%B>PT*"6EN="!T87AI3G5M8F5R.PT*
> M"6EN="!A+"!B+"!C+"!D.PD-"@ES=')I;F<@=&]3=')I;F<H*7L-"@D)<F5T
> M=7)N(&9O<FUA="@B8V%R("5S(#T@6R5S("5S("5S("5S72(L=&%X:4YU;6)E
> M<BP@82P@8BP@8RP@9"D[#0H)?0T*?0T*#0HO*BH-"BH@4')O9W)A;2!T:&%T
> M(&UE87-U<F5S('1H92!T:6UE(&ET('1A:V5S('1O(&1E=&5R;6EN92!T:&4@
> M=&%X:2!N=6UB97)S(&QE<W,@=&AA;B`R-3`P,"X@#0HJ($%U=&AO<CH@0VAA
> M<FQE<R!-8T%N86YY#0HJ#0HJ+PT*=F]I9"!M86EN*"E[#0H)4W1O<%=A=&-H
> M('-W.PT*"7-W+G-T87)T.PT*"69O<B`H:6YT(&ET97)S(#T@,#L@:71E<G,\
> M(#(U,#`P.R!I=&5R<RLK*7L-"@D)=&%X:4-A8B!C86))1"`](&ES5&%X:2AI
> M=&5R<RD[#0H)"6EF*&-A8DE$+F,@(3T@,"E[#0H)"0EW<FET96QN*&-A8DE$
> M*3L-"@D)?0T*"7T-"@ES=RYS=&]P.PT*"51I8VMS('1I;65486ME;B`]('-W
> M+G!E96L[#0H)=W)I=&5F;&XH(B5S7'0E<R(L,C4P,#`L=&EM951A:V5N+G1O
> M4V5C;VYD<R%F;&]A="D[#0H)<W<N<F5S970[#0H-"GT-"@T*+RHJ#0HJ(&ES
> M5&%X:2!D971E<FUI;F5S(&EF(&%N(&EN=&5G97(@<&%S<V5D('1O(&ET(&ES
> M(&$@=&%X:2!N=6UB97(L('1H870@:7,L('1H97)E(&5X:7-T<PT**B!A;B!A
> M+"!B+"!C+"!A;F0@9"P@;F]N92!O9B!T:&5M('1H92!S86UE+"!S=6-H('1H
> M870@#0HJ(&%>,RMB7C,@/2!N(#UC7C,@*V1>,RX@#0HJ(')E='5R;G,Z(`T*
> M*B!A('1A>&E#86(@<W1R=6-T+"!W:71H(&$L(&(L(&,L(&%N9"!D(&EF(&9O
> M=6YD+B!I9B!O;FQY(&]N92!S;VQU=&EO;B!T;R!X7C,K>5XS('=A<R!F;W5N
> M9"P@#0HJ(&,@86YD(&0@=VEL;"!B92!Z97)O+B!)9B!N;VYE('=E<F4@9F]U
> M;F0L('1H96X@82!A;F0@8B!W:6QL(&)E('IE<F\@87,@=V5L;"X@#0HJ('!A
> M<F%M971E<G,Z(`T**B!N(&ES(&%N(&EN=&5G97(@=&AA="!I<R!T;R!B92!C
> M:&5C:V5D(&9O<B!T87AI(&YU;6)E<BUN97-S+B`-"BHO#0IT87AI0V%B(&ES
> M5&%X:2AI;G0@;BE[#0H):6YT(&QI;6ET(#T@8W5B95)O;W1&;&]O<BAN*2`M
> M(#$[#0H):6YT(&AI=',@/2`P.R`-"@EI;G1;72!R97-U;'1S(#T@6S`L,"PP
> M+#!=.PT*"69O<B`H:6YT(&D@/2`P.R!I(#P@;&EM:70[(&DK*RD@>PT*"0EI
> M;G0@<F5S(#T@;B`M(&DJ:2II.PT*"0ED;W5B;&4@8W5B95)O;W0@/2!R97->
> M7B@Q+S,N,"D[#0H)"6EN="!N96%R97-T26YT(#T@8V%S="AI;G0I("AC=6)E
> M4F]O="`K(#`N-2D[#0H)"61O=6)L92!D:69F(#T@*&-U8F52;V]T("T@;F5A
> M<F5S=$EN="D@*B`H8W5B95)O;W0@+2!N96%R97-T26YT*3L-"@D):68@*&1I
> M9F8@/"`Q92TQ,"D@>PT*"0D):68@*&AI=',@/"`R("8F(')E<W5L='-;,5T@
> M(3T@:2D@>PT*"0D)"7)E<W5L='-;:&ET<R`J(#)=(#T@:3L-"@D)"0ER97-U
> M;'1S6VAI=',@*B`R("L@,5T@/2!N96%R97-T26YT.PT*"0D)?0T*"0D):&ET
> M<RLK.PT*"0E]#0H)?0T*"7)E='5R;B!T87AI0V%B*&XL<F5S=6QT<ULP72QR
> M97-U;'1S6S%=+')E<W5L='-;,ETL<F5S=6QT<ULS72D[#0I]#0H-"B\O+R!F
> M:6YD<R!T:&4@;&%R9V5S="!I;G1E9V5R('@@<W5C:"!T:&%T('A>,R`\(&X@
> M#0II;G0@8W5B95)O;W1&;&]O<BAI;G0@;BE[#0H)9&]U8FQE(&-U8F52;V]T
> M(#T@;B!>7B`H,2\S+C`I.PT*"6EN="!C<D9L(#T@8V%S="AI;G0I(&-U8F52
> 6;V]T.PT*"7)E='5R;B!C<D9L.PT*?0``
> `
> end

-- 
_________________
vita es estrany
spir.wikidot.com

April 01, 2011
I managed to get the file, and even compile it, but apparently the type Ticks doesn't exists any more, it is now (DMD2.052)
TickDuration, with methods TickDuration.seconds (msecs, hnsecs, ...).

on my computer, it does not generate slower code without the writeln than with. ( .38-.39 secs with, .37-.38 without)
am including the file as changed to make it work. It does vary a lot though: the first run after building takes .48 secs, the
next ones are in the ranges above. I guess it has more to do with priorities than with code efficiency.