Skip to content
This repository has been archived by the owner on Jun 24, 2022. It is now read-only.

Commit

Permalink
get rid of all splats!
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisRackauckas committed Jul 20, 2017
1 parent b93d9e0 commit 223ee7e
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions src/solve.jl
Expand Up @@ -45,10 +45,10 @@ function solve_batch(prob,alg,parallel_type,I,pmap_batch_size,kwargs...)
new_prob = prob.prob_func(deepcopy(prob.prob),i)
prob.output_func(solve(new_prob,alg;kwargs...),i)
end,I,batch_size=pmap_batch_size)
batch_data = convert(Array{typeof(batch_data[1])},batch_data)
_batch_data = convert(Array{typeof(batch_data[1])},batch_data)

elseif parallel_type == :parfor
batch_data = @parallel (vcat) for i in I
_batch_data = @parallel (vcat) for i in I
new_prob = prob.prob_func(deepcopy(prob.prob),i)
[prob.output_func(solve(new_prob,alg;kwargs...),i)]
end
Expand All @@ -62,29 +62,27 @@ function solve_batch(prob,alg,parallel_type,I,pmap_batch_size,kwargs...)
new_prob = prob.prob_func(deepcopy(prob.prob),i)
push!(batch_data[Threads.threadid()],prob.output_func(solve(new_prob,alg;kwargs...),i))
end
batch_data = vcat(batch_data...)
batch_data = convert(Array{typeof(batch_data[1])},batch_data)
_batch_data = vector_batch_data_to_arr(batch_data)

elseif parallel_type == :split_threads
wp=CachingPool(workers())
batch_data = pmap(wp,(i) -> begin
thread_monte(prob,I,alg,i,kwargs...)
end,1:nprocs(),batch_size=pmap_batch_size)
batch_data = vcat(batch_data...)
batch_data = convert(Array{typeof(batch_data[1])},batch_data)
_batch_data = vector_batch_data_to_arr(batch_data)

elseif parallel_type == :none
batch_data = Vector{Any}()
for i in I
new_prob = prob.prob_func(deepcopy(prob.prob),i)
push!(batch_data,prob.output_func(solve(new_prob,alg;kwargs...),i))
end
batch_data = convert(Array{typeof(batch_data[1])},batch_data)
_batch_data = convert(Array{typeof(batch_data[1])},batch_data)

else
error("Method $parallel_type is not a valid parallelism method.")
end
batch_data
_batch_data
end

function thread_monte(prob,I,alg,procid,kwargs...)
Expand All @@ -96,6 +94,17 @@ function thread_monte(prob,I,alg,procid,kwargs...)
new_prob = prob.prob_func(deepcopy(prob.prob),i)
push!(batch_data[Threads.threadid()],prob.output_func(solve(new_prob,alg;kwargs...),i))
end
batch_data = vcat(batch_data...)
batch_data = convert(Array{typeof(batch_data[1])},batch_data)
vector_batch_data_to_arr(batch_data)
end

function vector_batch_data_to_arr(batch_data)
_batch_data = Vector{typeof(batch_data[1][1])}(sum((length(x) for x in batch_data)))
idx = 0
@inbounds for a in batch_data
for x in a
idx += 1
_batch_data[idx] = x
end
end
_batch_data
end

0 comments on commit 223ee7e

Please sign in to comment.