回覆列表
  • 1 # 使用者9438794470960

    能夠用parfor並行法計算的演算法每次迴圈都是獨立的,不依賴於其他迴圈的運算結果所以迴圈中使用到的變數不會被其他迴圈改變簡單來說,假如有個迴圈i=1:n能夠並行運算,那麼迴圈是不依賴與順序的,i=1:n,i可以取n個值,值n個值無論先計算哪個都可以這樣才能並行運算而你計算素數的演算法是明顯的篩子法第一個素數是2,篩掉2的倍數最小的3是素數,曬掉3的倍數最小的5是素數,篩掉5的倍數。。。。。因為每次以最小的未被篩掉的數為新的素數,所以必須按照從小到大的順序篩選,所以不能用parfor平行計算對於計算n以內素數來說,篩選法是比較快的,然而其每一步運算需要用到之前的運算,所以不能用parfor並行運算最簡單的尋找素數的演算法是試除法,只要一個整數x不能夠被2到sqrt(x)之間的整數整除,那他就是素數這樣的演算法是比較慢的但是判斷每個數是否是素數是獨立的,可以用parfor平行計算下面是用最簡單的試除法尋找n以內的素數的程式碼分別用了並行parfor和非並行for計算為了顯示差距,將n提高到1000000matlabpool2n=1e6;p=1:n;q=1:n;p(1)=0;q(1)=0;ticparforii=2:nifany(rem(ii,2:sqrt(ii))==0)p(ii)=0;endendp=p(p>0);tocticforii=2:nifany(rem(ii,2:sqrt(ii))==0)q(ii)=0;endendq=q(p>0);tocmatlabpoolcloseStartingmatlabpoolusingthe"local"configuration...connectedto2labs.Elapsedtimeis19.124382seconds.Elapsedtimeis28.132064seconds.Sendingastopsignaltoallthelabs...stopped.雙核執行parfor運行了19.12秒,一般for運行了28.13秒錶示parfor是能提高一點效率但是效率遠沒有篩選法來得高

  • 中秋節和大豐收的關聯?
  • 竇娥是哪個朝代的?