Skip to content

Loop optimization: Range forall slower if Range is value rather than literal #24

Open
@ochafik

Description

@ochafik

From @ochafik on September 1, 2011 18:34

In Scala, if you run the test

object P005 extends App{
val t = System.currentTimeMillis

val r = (1 to 20)
def isDivis(x:Int) = r forall {x % _ == 0}
def find(n:Int):Int = if (isDivis(n)) n else find (n+2)

println (find (2))
println((System.currentTimeMillis - t)/1000.0)
}

the forall is not optimized to a while loop, and runs in the same time as without ScalaCL.

If you replace the "r" with its value (1 to 20), i.e.
def isDivis(x:Int) = (1 to 20) forall {x % _ == 0}
it is optimized and runs over 4 times faster.

I think we should be able to get the same performance in both cases, since r is immutable, we know it will still be (1 to 20).

Google Code Info:
Issue #: 76
Author: [email protected]
Created On: 2011-07-05T22:34:16.000Z
Closed On:

Copied from original issue: nativelibs4java/nativelibs4java#78

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions