Я столкнулся со следующей проблемой:
У меня есть функция с именем TrainModel, которая работает очень долго в одном потоке. Когда он заканчивает вычисления, он возвращает функцию в качестве выходного аргумента, пусть назовет ее f. Когда я задаю тип этого f, Джулия возвращает:
(общая функция с 1 методом)
(я не уверен, что эта последняя информация полезна для всех, кто это читает)
Теперь на втором этапе мне нужно применить функцию f к очень большому массиву значений. Это шаг, который я хотел бы распараллелить. Запустив Julia с несколькими процессами, например
julia -p 4
в идеале я бы использовал:
pmap(f, my_values)
или, возможно:
aux = @parallel (hcat) for ii=1:100000000
f(my_values[ii])
end
К сожалению, это не работает. Юлия жалуется, что работники не знают о функции f, то есть я получаю сообщение:
ОШИБКА: функция f не определена в процессе 2
Как я могу сделать функцию f доступной для всех работников? Очевидно, что "грязным" решением будет выполнение отнимающей много времени функции TrainModel для всех рабочих, например, это возможно:
@everywhere f = TrainModel( ... )
но это будет пустой тратой процессора, когда все, что я хочу, это то, что только результат f доступен всем работникам.
Хотя я искал сообщения с похожими проблемами, до сих пор я не мог найти ответ...
Спасибо заранее! лучше,
Н.