Clojure

Update min/max functions to take advantage of primitive math

Details

  • Type: Enhancement Enhancement
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Completed
  • Affects Version/s: Release 1.3
  • Fix Version/s: Release 1.3
  • Component/s: None
  • Labels:
    None
  • Patch:
    Code
  • Approval:
    Ok

Description

Currently, the min and max functions are quite slow, since they don't take advantage of new primitive math.

Implement them in the same manner in which other primitive math functions are implemented for efficiency.

  1. fast_min_max.patch
    29/Apr/11 3:17 PM
    4 kB
    Luke VanderHart
  2. fast_min_max_no_contagion.patch
    29/Apr/11 3:17 PM
    6 kB
    Luke VanderHart
  3. 0784-min-max-take-3.patch
    06/May/11 10:11 AM
    4 kB
    Stuart Halloway

Activity

Hide
Luke VanderHart added a comment -

This patch creates inline versions of min and max, combined with overloaded implementations in c.l.Numbers. It is over an order of magnitude faster using a test like this one (from 19 seconds to 1.2 seconds on my machine):

(time (loop [a 0 b 10 c 5]
            (if (< a 1000000000)
                (recur (inc a) (min b c) (max c b)))))

There are two patches. One is contagious, but returns primitives for (long, double) input. The other is not contagious and returns primitives only for (long,long) and (double,double) args, but is still substantially faster than the original version.

Show
Luke VanderHart added a comment - This patch creates inline versions of min and max, combined with overloaded implementations in c.l.Numbers. It is over an order of magnitude faster using a test like this one (from 19 seconds to 1.2 seconds on my machine):
(time (loop [a 0 b 10 c 5]
            (if (< a 1000000000)
                (recur (inc a) (min b c) (max c b)))))
There are two patches. One is contagious, but returns primitives for (long, double) input. The other is not contagious and returns primitives only for (long,long) and (double,double) args, but is still substantially faster than the original version.
Hide
Stuart Halloway added a comment -

The May 6 "take 3" patch eliminates a few contagions that were hiding in the earlier patch, and is hopefully good to go.

Show
Stuart Halloway added a comment - The May 6 "take 3" patch eliminates a few contagions that were hiding in the earlier patch, and is hopefully good to go.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: