Я пытаюсь перенести часть моего R-кода на Джулию; В основном я переписан следующий R код Julia:Julia pmap performance
library(parallel)
eps_1<-rnorm(1000000)
eps_2<-rnorm(1000000)
large_matrix<-ifelse(cbind(eps_1,eps_2)>0,1,0)
matrix_to_compare = expand.grid(c(0,1),c(0,1))
indices<-seq(1,1000000,4)
large_matrix<-lapply(indices,function(i)(large_matrix[i:(i+3),]))
function_compare<-function(x){
which((rowSums(x==matrix_to_compare)==2) %in% TRUE)
}
> system.time(lapply(large_matrix,function_compare))
user system elapsed
38.812 0.024 38.828
> system.time(mclapply(large_matrix,function_compare,mc.cores=11))
user system elapsed
63.128 1.648 6.108
Как можно заметить, я получаю значительную скорость вверх при переходе от одного ядра до 11. Теперь я пытаюсь сделать то же самое в Джулии:
#Define cluster:
addprocs(11);
using Distributions;
@everywhere using Iterators;
d = Normal();
eps_1 = rand(d,1000000);
eps_2 = rand(d,1000000);
#Create a large matrix:
large_matrix = hcat(eps_1,eps_2).>=0;
indices = collect(1:4:1000000)
#Split large matrix:
large_matrix = [large_matrix[i:(i+3),:] for i in indices];
#Define the function to apply:
@everywhere function function_split(x)
matrix_to_compare = transpose(reinterpret(Int,collect(product([0,1],[0,1])),(2,4)));
matrix_to_compare = matrix_to_compare.>0;
find(sum(x.==matrix_to_compare,2).==2)
end
@time map(function_split,large_matrix)
@time pmap(function_split,large_matrix)
5.167820 seconds (22.00 M allocations: 2.899 GB, 12.83% gc time)
18.569198 seconds (40.34 M allocations: 2.082 GB, 5.71% gc time)
Как видно, я не получаю ускорения с pmap. Может быть, кто-то может предложить альтернативы.
'big_matrix' is' 250000-element Array {Any, 1}: 'Возможно, это проблема? – daycaster
Я действительно не знаю, что я очень новичок в Julia – Vitalijs
On Julia 0.4.6 Я получаю следующие результаты с 'addprocs (3)': '4.173674 секунд (22.97 M ассигнований: 2.943 GB, 14.57% gc time)' и '0.795733 секунды (292.07 k распределений: 12.377 MB, 0.83% gc time)'. Также тип 'large_matrix' -' Array {BitArray {2}, 1} '. – tim