好的,後續的this和this的問題。我想修改的代碼是當然的:我可以利用並行化來使這段代碼更快嗎?
function fdtd1d_local(steps, ie = 200)
ez = zeros(ie + 1);
hy = zeros(ie);
for n in 1:steps
for i in 2:ie
ez[i]+= (hy[i] - hy[i-1])
end
ez[1]= sin(n/10)
for i in 1:ie
hy[i]+= (ez[i+1]- ez[i])
end
end
(ez, hy)
end
fdtd1d_local(1);
@time sol1=fdtd1d_local(10);
elapsed time: 3.4292e-5 seconds (4148 bytes allocated)
而且我天真地試着:
function fdtd1d_local_parallel(steps, ie = 200)
ez = dzeros(ie + 1);
hy = dzeros(ie);
for n in 1:steps
for i in 2:ie
localpart(ez)[i]+= (hy[i] - hy[i-1])
end
localpart(ez)[1]= sin(n/10)
for i in 1:ie
localpart(hy)[i]+= (ez[i+1]- ez[i])
end
end
(ez, hy)
end
fdtd1d_local_parallel(1);
@time sol2=fdtd1d_local_parallel(10);
elapsed time: 0.0418593 seconds (3457828 bytes allocated)
sol2==sol1
true
結果是正確的,但性能更差。所以爲什麼?因爲並行化不適用於雙核舊筆記本電腦,或者我又錯了?
那麼,我承認我所瞭解的並行化唯一的事情是它可以加速代碼,但並不是每一段代碼都可以並行,在嘗試並行編程之前是否應該知道任何基本知識?
任何幫助,將不勝感激。
那麼,正如問題中提到的,我的第二個樣本只是一個天真的試驗。 (我不明白這個教程的某些簡短的相應部分囧),可惜''SharedArray'不適用於Windows。問題中的樣本實際上是一個簡化的一維麥克斯韋方程求解器,當列表('ez','hy',並且會有更多的3D案例)變大時,[可能需要幾天的時間](http ://physics.stackexchange.com/q/106136/18778)。 – xzczd