줄리아에 내 R 코드 중 일부를 이식하려고합니다. 기본적으로 내가 줄리아에서 다음 R 코드를 다시 한 : 지금은 줄리아에서 동일한 작업을 수행하려고 11 하나 개의 코어에서 갈 때Julia pmap 성능
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
하나는 내가 상당한 속도 향상을 얻고있다 알 수 있듯이 :
#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을 사용하여 속도가 향상되는 것을 알 수 있습니다. 어쩌면 누군가가 대안을 제안 할 수 있습니다.
'large_matrix'는 250000 요소 배열 {Any, 1} : '이것이 문제일까요? – daycaster
나는 Julia에게 매우 익숙하지 않다는 것을 알고있다 – Vitalijs
Julia에서 0.4.6 나는'addprocs (3)'으로 다음과 같은 결과를 얻는다 : 4.173674 초 (22.97 M 할당 : 2.943 GB, 14.57 % gc 시간)'및 '0.795733 초 (292.07 k 할당 : 12.377 MB, gc 시간 0.83 %)'. 'large_matrix'의 타입은'Array {BitArray {2}, 1}'입니다. – tim