Skip to content

Instantly share code, notes, and snippets.

@w01fe
w01fe / hiphip_add_in_place.clj
Last active December 19, 2015 13:40
hiphip_add_in_place.clj
(defn add-in-place!
"Modify xs, incrementing each element by the corresponding element of ys"
[xs ys]
(dbl/afill! [x xs y ys] (+ x y)))
(defn pointwise-product
"Produce a new double array with the product of corresponding elements of xs and ys"
[xs ys]
(dbl/amap [x xs y ys] (* x y)))
@w01fe
w01fe / hiphip_aget.clj
Created July 10, 2013 06:52
hiphip_aget.clj
(dbl/aset xs i (* 2.0 (dbl/aget xs (inc i)))))
@w01fe
w01fe / hiphip_dot_product.clj
Created July 10, 2013 06:52
hiphip_dot_product.clj
;; 8.5 us for 10k doubles: 2.3 GFlops
(require '[hiphip.double :as dbl])
(defn dot-product [ws xs]
(dbl/asum [x xs w ws] (* x w)))
@w01fe
w01fe / java_dot_product.java
Created July 10, 2013 06:50
java_dot_product.java
// 8.5 us for 10k doubles: 2.3 GFlops
public double dotProduct(double [] ws, double[] xs) {
double result = 0.0;
for (int i=0; i < ws.length; ++i) {
result += ws[i] * xs[i];
}
return result;
}
@w01fe
w01fe / clj_areduce_dot_product.clj
Last active December 19, 2015 13:39
clj_areduce_dot_product.clj
;; 8.5 us for 10k doubles: 2.3 GFlops
;; (11 us with *unchecked-math* false)
(defn dot-product [^doubles ws ^doubles xs]
(areduce xs i ret 0.0
(+ ret (* (aget xs i)
(aget ws i)))))
;; 1ms for 10k doubles: 20 MFlops
(defn dot-product [^doubles ws ^doubles xs]
(reduce + (map * ws xs))
(eval `(fn positional-graph#
~arg-keywords
(let ~(vec (interleave (vals value-syms) function-calls))
(new ~(def-graph-record g)
~@(->> g pfnk/output-schema keys (map value-syms))))))
(let [Ra (Ra-fnk day-of-year lat)
Rs (Rs-fnk tmax tmin kRs Ra)
...])
(fn term32635
[map2634]
(let
[Rs (get map2634 :Rs nil)
Rso (get map2634 :Rso nil)]
(-> (* 1.35 Rs) (/ Rso) (- 0.35))))
(defn restricted-call
"Call fnk f on the subset of keys its input schema explicitly asks for."
[f in-map]
(f (select-keys in-map (keys (pfnk/input-schema f)))))