Strange behavior from Compile[ ]
- To: mathgroup at yoda.physics.unc.edu
- Subject: Strange behavior from Compile[ ]
- From: barry at math.ucla.edu (Barry Merriman)
- Date: Tue, 27 Aug 91 15:46:32 PDT
I'm trying to benchmark the speed of Mma 2.0 on Compile-ed calculations. I've come across some strange "feature" in the Mma compiler. Essentially, it compiles a Do loop of < 50,000 loops fine, but can't compile it when it goes to > 50,000 loops. Very odd, since 50,000 is not a particularly big integer, and so shouldn't bother the compiler. Here what I do: (Mma 2.0 on NeXTstation) In[30]:= (* compiled benchmark of 40,000 multiplies *) benchmark40 = Compile[ {x0,y0}, Module[{x = x0,y = y0}, Do[ y *= x, {40000} ]; y ] ] Out[30] := (* OK *) CompiledFunction[{x0, y0}, Module[{x = x0, y = y0}, Do[y *= x, {40000}]; y], -CompiledCode-] In[31]:= (* Time our 40,000 benchmark *) Timing @ benchmark40[1.0001, 1.0] Out[31]:= (* not bad---0.03 MFLOPS on a 3.0 MFLOP machine *) {1.51667 Second, 54.5872} In[32]:= (* try a 50,000 multiply becnhmark *) benchmark50 = Compile[ {x0,y0}, Module[{x = x0,y = y0}, Do[ y *= x, {50000} ]; y ] ] Out[32]:= CompiledFunction[{x0, y0}, Module[{x = x0, y = y0}, Do[y *= x, {50000}]; y], -CompiledCode-] In[33]:= (* Time the 50,000 benchmark *) Timing @ benchmark50[1.0001, 1.0] CompiledFunction::cfn: (* Trouble !!! *) Numerical error encountered at instruction 23 ; proceeding with uncompiled evaluation. Out[33]:= (* lost big on time! slowed down by factor of 60, "as usual" *) {34.1 Second, 148.376}