I guess it would be a better guess if you could includethe cpu type/speed for a rough reference...
Devrim Baris Acar On Fri, Dec 24, 2010 at 09:55, Alan Busby <thebu...@thebusby.com> wrote: > Hi All, > > > On Fri, Dec 24, 2010 at 4:32 PM, Meikel Brandmeyer <m...@kotka.de> wrote: > > Most interesting is also the relation between the different versions on >> the given machine. Just the numbers of one algorithm aren't really >> comparable, I guess. (different machine, different load, different phase of >> moon, who knows...) >> > > Did the below just for my own amusement on a 64bit linux box, and thought > it might be interesting to others. The fastest implementation was using > areduce with 1.3.0-alpha and unchecked ops for 2800ns. Unoptimized C was > doing 700ns though, and with -O2 it was 400ns. Reminds me why JNI can be so > valuable sometimes. > > > /* -O0 low of 700ns > -02 low of 400ns */ > int char_count(char* ptr) > { > int count = 0; > int i; > > for(i=0; ptr[i]; ptr++) > if(ptr[i]!=32) > count++; > > return count; > } > > > ;; 1.2.0 low of 65000ns > > > > ;; 1.3.0-alpha3 low of 46000ns > > > > ;; > > > > (defn count-num-chars-v1 [^String s] > (loop [s s acc 0] > (if (seq s) > (recur (rest s) (if (= (first s) \space) acc (inc acc))) > acc))) > > > ;; 1.2.0 low of 6200ns > > > > ;; 1.3.0-alpha3 low of 4800ns > > > > ;; > > > > (defn count-num-chars-v2 [^String s] > (let [len (.length s) > space (int 32)] > (loop [i (int 0), c (int 0)] > (if (< i len) > (recur > (inc i) > (if (== (.codePointAt s i) space) > c > (unchecked-inc c))) > c)))) > > > ;; 1.2.0 low of 12500ns > > > > ;; 1.3.0-alpha3 low of 4450ns > > > > ;; 1.3.0-alpha3 with *unchecked-math* enabled low of 2800ns > > > > ;; > > > > (defn count-num-chars-v3 [^String s] > (let [as (.toCharArray s)] > (areduce as idx acc 0 (if (= (int (aget as idx)) (int \space)) acc > (inc acc))))) > > > ;; 1.2.0 untested > > > > ;; 1.3.0-alpha3 low of 4500ns > > > > ;; > > > > (defn count-num-chars-v4 ^long [^String s] > (let [l (.length s) > c \space] > (loop [i 0 acc 0] > (if (< i l) > (recur (inc i) > (if (identical? (.charAt s i) c) acc > (inc acc))) > acc)))) > > > Hope this helps, > Alan > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en