I have an expensive evaluation function, that takes long to compute and I run this over multiple objects. In theory these comuptations are independent of each other (though they use the same arguments for the evaluation). I’d like to ask if I could make the evaluation part run in parallel (using the new v1.3 features).
Here is a “sketch-MWE” (just to get the idea):
using LinearAlgebra: dot struct MyType f::Float64 end function evaluate(obj::MyType, points, normals) # this is the expensive evaluation function, # which iterates through the points and normals s = 0 for i in eachindex(points) s += obj.f*dot(points[i], normals[i]) end return s end function test() # generate random MyTypes objs = MyType.(rand(100)) # points and normals are large arrays # up to hundred thousand-million scale ps = [rand(3) for i in 100_000] ns = [rand(3) for i in 100_000] # can I make this run in parallel? score = evaluate.(objs, Ref(ps), Ref(ns)) return score end
I have two problems: 1) I don’t know how to do this, and 2) the
normals arrays are large, and I’m afraid that it would blow in memory.
I’v read the announcement blog post on multi-threading, but still no idea how to do this.
While writing this post, just came in mind to check the docs. Is it just to use the
@threads for macro?
Edit: If I have a processor with 4 cores, 8 threads, can I use