You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
argnames = [gensym(:MTKArg) for i in1:length(args)]
135
147
arg_pairs =map(vars_to_pairs,zip(argnames,args))
136
148
ls =reduce(vcat,first.(arg_pairs))
@@ -143,23 +155,39 @@ function _build_function(target::JuliaTarget, rhss, args...;
143
155
144
156
oidx =isnothing(outputidxs) ? (i -> i) : (i -> outputidxs[i])
145
157
X =gensym(:MTIIPVar)
158
+
159
+
rhs_length = rhss isa SparseMatrixCSC ?length(rhss.nzval) :length(rhss)
160
+
161
+
if parallel isa DistributedForm
162
+
numworks = Distributed.nworkers()
163
+
reducevars = [Variable(gensym(:MTReduceVar))() for i in1:numworks]
164
+
lens =Int(ceil(rhs_length/numworks))
165
+
finalsize = rhs_length - (numworks-1)*lens
166
+
_rhss =vcat(reduce(vcat,[[getindex(reducevars[i],j) for j in1:lens] for i in1:numworks-1],init=Expr[]),
167
+
[getindex(reducevars[end],j) for j in1:finalsize])
168
+
elseif rhss isa SparseMatrixCSC
169
+
_rhss = rhss.nzval
170
+
else
171
+
_rhss = rhss
172
+
end
173
+
146
174
ifeltype(eltype(rhss)) <:AbstractArray# Array of arrays of arrays
147
-
ip_sys_exprs =reduce(vcat,[vec(reduce(vcat,[vec([:($X[$i][$j][$k] =$(conv(rhs))) for (k, rhs) ∈enumerate(rhsel2)]) for (j, rhsel2) ∈enumerate(rhsel)],init=Expr[])) for (i,rhsel) ∈enumerate(rhss)],init=Expr[])
175
+
ip_sys_exprs =reduce(vcat,[vec(reduce(vcat,[vec([:($X[$i][$j][$k] =$(conv(rhs))) for (k, rhs) ∈enumerate(rhsel2)]) for (j, rhsel2) ∈enumerate(rhsel)],init=Expr[])) for (i,rhsel) ∈enumerate(_rhss)],init=Expr[])
148
176
elseifeltype(eltype(rhss)) <:SparseMatrixCSC# Array of arrays of arrays
149
-
ip_sys_exprs =reduce(vcat,[vec(reduce(vcat,[vec([:($X[$i][$j].nzval[$k] =$(conv(rhs))) for (k, rhs) ∈enumerate(rhsel2)]) for (j, rhsel2) ∈enumerate(rhsel)])) for (i,rhsel) ∈enumerate(rhss)])
177
+
ip_sys_exprs =reduce(vcat,[vec(reduce(vcat,[vec([:($X[$i][$j].nzval[$k] =$(conv(rhs))) for (k, rhs) ∈enumerate(rhsel2)]) for (j, rhsel2) ∈enumerate(rhsel)])) for (i,rhsel) ∈enumerate(_rhss)])
150
178
elseifeltype(rhss) <:SparseMatrixCSC# Array of sparse matrices
151
-
ip_sys_exprs =reduce(vcat,[vec([:($X[$i].nzval[$j] =$(conv(rhs))) for (j, rhs) ∈enumerate(rhsel)]) for (i,rhsel) ∈enumerate(rhss)])
179
+
ip_sys_exprs =reduce(vcat,[vec([:($X[$i].nzval[$j] =$(conv(rhs))) for (j, rhs) ∈enumerate(rhsel)]) for (i,rhsel) ∈enumerate(_rhss)])
152
180
elseifeltype(rhss) <:AbstractArray# Array of arrays
153
-
ip_sys_exprs =reduce(vcat,[vec([:($X[$i][$j] =$(conv(rhs))) for (j, rhs) ∈enumerate(rhsel)]) for (i,rhsel) ∈enumerate(rhss)], init = Expr[])
181
+
ip_sys_exprs =reduce(vcat,[vec([:($X[$i][$j] =$(conv(rhs))) for (j, rhs) ∈enumerate(rhsel)]) for (i,rhsel) ∈enumerate(_rhss)], init = Expr[])
154
182
elseif rhss isa SparseMatrixCSC
155
-
ip_sys_exprs = [:($X.nzval[$i] =$(conv(rhs))) for (i, rhs) ∈enumerate(rhss.nzval)]
183
+
ip_sys_exprs = [:($X.nzval[$i] =$(conv(rhs))) for (i, rhs) ∈enumerate(_rhss)]
156
184
else
157
-
ip_sys_exprs = [:($X[$(oidx(i))] =$(conv(rhs))) for (i, rhs) ∈enumerate(rhss)]
185
+
ip_sys_exprs = [:($X[$(oidx(i))] =$(conv(rhs))) for (i, rhs) ∈enumerate(_rhss)]
0 commit comments