julia: передача pmap в векторах с индексами
Я хотел бы использовать Джулии pmap
сделать что-то вроде этого:
pmap( f, v, inits[i])
где f
это функция, которую я хочу вызвать параллельно v
который является некоторым массивом. Я также хочу передать некоторые параметры f
(inits
), но inits
сам по себе является массивом, и я хочу, чтобы i-й параметр передавался правильному процессу. Имеет ли это смысл?
Я мог бы сделать это, отсортировав "свою собственную" версию pmap, поскольку это легко сделать с помощью remotecall_fetch
, Вот эта реализация, если вышеупомянутое сбивало с толку:
i=1
nextidx() = (idx=i; i+=1; idx)
@sync begin
for k in 1:np
if k != myid() || np == 1
@async begin
while true
idx = nextidx()
if idx > chains
break
end
result[idx] = remotecall_fetch(k, mcmc_sub, m, iters, burnin,
thin, idx, ps[idx], p)
end
end
end
end
end
1 ответ
Предположим, у вас есть вход v
что вы хотите запустить pmap
на. Каждый элемент v
также имеет связанный вектор единиц, которые хранятся в столбцах матрицы inits
,
inits = reshape(randn(20), 5,4)
v = collect(1:4)
Ключ заключается в том, чтобы написать вашу функцию, чтобы принять кортеж ваших входных данных и ваших начальных значений
f = function(args::Tuple{Int64, Vector{Float64}})
x, inits = args
return sum(x * inits)
end
а затем сжать ваши входные данные и единицы измерения
args = collect(zip(v, [inits[:,j] for j in 1:4]))
pmap(f, args)