查看: 1161|回复: 5

在单机上运行julia并行有加速成功的例子吗

[复制链接]
论坛徽章:
0
发表于 2017-4-15 13:47 | 显示全部楼层 |阅读模式

Julia

我用sharedarray + @parallel for 与 array + for对比
总是并行版本慢
回复

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2017-4-15 14:04 | 显示全部楼层
似乎是快了
#=
cnt = SharedArray(Int,1)
cnt[1]=0;
st=time();

for i in 1:10^7
cnt[1]=cnt[1]+1;
end;

ed=time();
println(cnt[1])
println(ed-st);

cnt = Array(Int,1)
cnt[1]=0;
st=time();

for i in 1:10^7
cnt[1]=cnt[1]+1;
end;

ed=time();
println(cnt[1])
println(ed-st);
=#
cnt = SharedArray(Int,1)
cnt[1]=0;
st=time();

@parallel for i in 1:10^7
cnt[1]=cnt[1]+1;
end;

ed=time();
println(cnt[1])
println(ed-st);
println(cnt)

输出
julia> include("d:\\testp.txt")
0
0.42100000381469727
[10000000]
不明白一开始cnt[1]为什么输出0
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2017-4-15 14:07 | 显示全部楼层
被注释代码的结果,cnt[1]的输出是好的
julia> include("d:\\testp.txt")
10000000
2.1689999103546143
10000000
1.6689999103546143
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2017-4-15 14:09 | 显示全部楼层
把sharedarray改为array也能算对,也是一样的速度
cnt = Array(Int,1)
cnt[1]=0;
st=time();

@parallel for i in 1:10^7+100
cnt[1]=cnt[1]+1;
end;

ed=time();
println(ed-st);
println(cnt[1])

println(cnt)
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2017-4-15 16:40 | 显示全部楼层
访问数组也是并行快
a=trues(10^7);

for i in 1:10^6
a[i*10]=0;
end
cnt = Array(Int,1);
cnt[1]=0;
st=time();

@parallel for i in 1:10^7
cnt[1]=cnt[1]+a[i];
end;

ed=time();
println(ed-st);
println(cnt[1])

println(cnt)
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2017-4-15 16:40 | 显示全部楼层
访问递归函数,并行慢
function re(n::Int32)
if n>10 return 1;
else return re(n+1)+n; end
end

cnt = Array(Int,1);
cnt[1]=0;
st=time();

@parallel for i in 1:10^6
cnt[1]=cnt[1]+re(1);
end;

ed=time();
println(ed-st);
println(cnt[1])

println(cnt)

cnt = Array(Int,1);
cnt[1]=0;
st=time();

for i in 1:10^6
cnt[1]=cnt[1]+re(1);
end;

ed=time();
println(ed-st);
println(cnt[1])

println(cnt)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-6-24 21:40 , Processed in 0.158892 second(s), 35 queries .