# Parallelizing GSA - A size issue

**URL:** <https://discourse.julialang.org/t/parallelizing-gsa-a-size-issue/82964>\
**Category:** Modelling & Simulations\
**Created:** [June 18, 2022, 11:44am UTC](https://discourse.julialang.org/t/parallelizing-gsa-a-size-issue/82964 "2022-06-18T11:44:25Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![xztt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xztt/32/33843_2.png) [@xztt](https://discourse.julialang.org/u/xztt)\
**Post date:** [June 18, 2022, 11:44am UTC](https://discourse.julialang.org/t/parallelizing-gsa-a-size-issue/82964/1 "2022-06-18T11:44:25Z")

</div>

Hi,

I am looking to try and speed up my code and trying to following the example in the documentation [here](https://gsa.sciml.ai/dev/tutorials/parallelized_gsa/)

On running the below

```julia
x = [prob.u0;prob.p]
function circ(x)
    prob_func(prob,i,repeat) = remake(prob;u0 = x[1:3,i], p=x[4:end,i])
    ensemble_prob = EnsembleProblem(prob,prob_func = prob_func)
    newsol = solve(ensemble_prob, Rodas5(), EnsembleThreads(), reltol=1e-6, abstol=1e-12; saveat = savetime, trajectories = size(x,10))
    ## Sol[i] is the solution for the ith set of parameters 
    out = zeros(10,size(x,10))
    for i in 1:size(x,10)
        out[1,i]= (maximum(newsol[i][LV.V])-minimum(newsol[i][LV.V]))
        out[2,i]= mean(newsol[i][LV.V])
        out[3,i]= (maximum(newsol[i][LV.p])-minimum(newsol[i][LV.p]))
        out[4,i]= mean(newsol[i][LV.p])
        out[5,i]= (maximum(newsol[i][Csa.in.p])-minimum(newsol[i][Csa.in.p]))
        out[6,i]= mean(newsol[i][Csa.in.p])
        out[7,i]= maximum(newsol[i][Csa.q])
        out[8,i]= maximum(newsol[i][Csv.q])
        out[9,i]= maximum(newsol[i][LV.p])/mean(newsol[i][LV.p])
        out[10,i]= maximum(newsol[i][Csa.in.p])/mean(newsol[i][Csa.in.p])
    end
    out 
end

lb = [4.9, -9.1, -9.1, 1.05, 0.021, 0.924, 15.33, 0.8, 0.180285, 0.34233, 1.1704, 0.0231, 0.0042, 0.777, 0.791, 7.7]
ub = [9.1, -4.9, -4.9, 1.95, 0.039, 1.716, 28.47, 0.9, 0.334815, 0.56134, 2.1736, 0.0429, 0.0078, 1.443, 1.469, 14.3]

N=2500
bounds = tuple.(lb,ub)
sampler = SobolSample()
A,B = QuasiMonteCarlo.generate_design_matrices(N, lb, ub, sampler)
@time sobol_result = gsa(circ,Sobol(),A,B, batch = true)

```

It throws the bounds error of

```julia
ERROR: BoundsError: attempt to access 10×1 Matrix{Float64} at index [1:10, 1:5000]
Stacktrace:
 [1] throw_boundserror(A::Matrix{Float64}, I::Tuple{Base.Slice{Base.OneTo{Int64}}, UnitRange{Int64}})
   @ Base ./abstractarray.jl:691
 [2] checkbounds
   @ ./abstractarray.jl:656 [inlined]
 [3] _getindex
   @ ./multidimensional.jl:838 [inlined]
 [4] getindex
   @ ./abstractarray.jl:1218 [inlined]
 [5] gsa_sobol_all_y_analysis(method::Sobol, all_y::Matrix{Float64}, d::Int64, n::Int64, Ei_estimator::Symbol, y_size::Nothing, #unused#::Val{true})
   @ GlobalSensitivity ~/.julia/packages/GlobalSensitivity/Xw0Ui/src/sobol_sensitivity.jl:116
 [6] gsa(f::typeof(circ), method::Sobol, A::Matrix{Float64}, B::Matrix{Float64}; batch::Bool, Ei_estimator::Symbol, distributed::Val{false}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
   @ GlobalSensitivity ~/.julia/packages/GlobalSensitivity/Xw0Ui/src/sobol_sensitivity.jl:59
 [7] top-level scope
   @ ./timing.jl:220 [inlined]

```

Running the serial version of this runs as expected. I suspect the error to be around where I define out however I am just sure i understand why I am getting the error.

Cheers 🙂

---

<div class="post-metadata">

**Author:** ![Vaibhavdixit02](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vaibhavdixit02/32/2916_2.png) [@Vaibhavdixit02](https://discourse.julialang.org/u/Vaibhavdixit02)\
**Post date:** [June 18, 2022, 12:43pm UTC](https://discourse.julialang.org/t/parallelizing-gsa-a-size-issue/82964/2 "2022-06-18T12:43:27Z")

</div>

> [@xztt](#):
>
> ```julia
> out = zeros(10,size(x,10))
> for i in 1:size(x,10)
> 
> ```

I am confused what you intend this to do, I think this might be the issue. [Arrays · The Julia Language](https://docs.julialang.org/en/v1/base/arrays/#Base.size), the second argument to `size` is the dimension of which you want the length, so I think iiuc you want to do `size(x,2)` inlace of `size(x, 10)`
