Multithreading 并行计算多个值
对于扩展的欧几里德算法,我有一个函数,Multithreading 并行计算多个值,multithreading,parallel-processing,julia,distributed-computing,Multithreading,Parallel Processing,Julia,Distributed Computing,对于扩展的欧几里德算法,我有一个函数,xEuclid,我想用这个函数计算3个值,分别是a=xEuclid(a1,b1),b=xEuclid(a2,b2)和c=xEuclid(a3,b3),每次调用都使用不同的参数,因此,优化过程的想法是同时并行计算a、b和c 我想不出解决这个问题的方法,不幸的是我没有时间学习JuliaAcademy并行编程教程,所以我需要你的帮助来解决这个问题。谢谢大家! 试试下面的方法 using Base.Threads: @spawn a = @spawn xEuclid
xEuclid
,我想用这个函数计算3个值,分别是a=xEuclid(a1,b1)
,b=xEuclid(a2,b2)
和c=xEuclid(a3,b3)
,每次调用都使用不同的参数,因此,优化过程的想法是同时并行计算a
、b
和c
我想不出解决这个问题的方法,不幸的是我没有时间学习JuliaAcademy并行编程教程,所以我需要你的帮助来解决这个问题。谢谢大家! 试试下面的方法
using Base.Threads: @spawn
a = @spawn xEuclid(a1,b1)
b = @spawn xEuclid(a2,b2)
c = @spawn xEuclid(a3,b3)
a = fetch(a); b = fetch(b); c = fetch(c)
这至少需要julia v1.3谢谢!代码可以工作,但顺序求和仍然比使用spawn快得多。顺序时间以纳秒为单位,并行时间以微秒为单位。这是因为生成线程的开销。仅在更密集的任务中使用线程是有意义的,否则额外的开销会降低性能。为了获得更快的性能时间,还有另一种并行化方法可以使用吗?将信息发送到另一个进程至少需要1ms。你不能并行化花费太多时间的单个操作。如果算法能够很好地利用SIMD指令,你最好的选择是找到一个利用SIMD指令的实现。请记住:common Julia样式使用所有小写函数名,并尽可能少地使用下划线<例如,代码>扩展欧几里得。