2017-02-17 57 views
0

我試圖確定是否有使用稀疏矩陣格式(特別是壓縮行格式)OpenMP的稀疏雅可比

我有一個工作稀疏矩陣雅可比並行雅可比方法的一種方式。我不知道我是否可以把

!$ OMP PARALLEL DO在中間

指令做循環,因爲X正在書寫和讀取。我猜內部do循環可以擁有它,但同樣的t被覆蓋,所以我不知道它是否可能。我在這裏忽略了什麼嗎?謝謝。

x(:) = 0 
do p = 1, numIterations 
    do i=1, n 
     t=b(i) 
     do j = IA(i), IA(i+1) - 1 
      if j=i 
       d=A(j) 
      else 
       t = t - A(j) * x(jA(j)) 
      end if 
     end do 
     x(i) = t/d 
    end do 
end do 
+0

雅可比可能不是最簡單的並行方法 - 你考慮過其他類型的求解器嗎? – Chaosit

+0

這看起來像一個bug「'如果j = i'」 –

回答

2

確實,您在內部循環中依賴於t,因爲它用作累加器。但是,這也意味着您可以在每個線程中擁有t的私人副本(因爲Ax未被寫入循環中,所以t的值僅取決於j的值,該值也是線程專用的)。

以下應該工作:

x(:) = 0 
do p = 1, numIterations 
    do i=1, n 
     t=0 
     !$OMP PARALLEL DO 
     !$OMP REDUCTION(+:t) 
     do j = IA(i), IA(i+1) - 1 
      if j=i 
       d=A(j) 
      else 
       t = A(j) * x(jA(j)) 
      end if 
     end do 
     x(i) = (b(i)-t)/d 
    end do 
end do 

注意d只能由一個線程寫入,這樣在變量可以betewen螺紋,上d沒有循環搬運依賴性共享。

+0

我對openMP不是很有信心,但是不應該加上'!$ OMP PRIVATE(t)'來確保t上沒有隱式序列化嗎? – Chaosit

+1

!$ OMP REDUCTION自動執行它(請參閱https://computing.llnl.gov/tutorials/openMP/#REDUCTION),它使列表中的所有變量都是私有的(否則它沒有任何意義) – simpel01

+0

感謝您的支持響應。任何機會,你可以解釋減少條款。文檔有點模糊。 「在還原結束時,還原變量將應用於共享變量的所有私有副本,並將最終結果寫入全局共享變量。」這是否意味着要減去的值被保留,然後在循環之後從全局變量中減去所有值? –