2013-05-01 73 views
0

我有一個矩陣必須從矩陣內先前的值並行計算。如果你們中的任何人都能給我一個關於如何完成的提示,那將會很好。假設我有像根據以前的值運行矩陣的並行代碼

| 4 5 6 7 8| 
| 5 5 5 5 5| 
| 6 6 6 6 6| 
| 9 9 9 9 9| 

這裏的值的矩陣將被計算作爲位置(1,1)將來自(0,0),(0,1)和(1,0)的三個相鄰計算元素。這將是其值的最小值等等。每個元素都依賴於它的前三個鄰居來計算它的值。任何人都可以給我一個提示,說明它如何在並行中完成。謝謝。

+0

我發佈的代碼[here](http://stackoverflow.com/questions/14920931/3d-cuda-kernel-indexing-for-image-filtering/14926201#14926201)會在每個位置找到最小值3D矩陣,使用3D(立方體)體積。將其簡化爲2D情況應該不會太困難。 – 2013-05-01 03:07:19

+1

這是並行計算的骯髒祕密。很多真實世界算法都有內部的依賴關係,阻止或阻礙並行性。 – 2013-05-01 05:37:20

回答

0

對於這種依賴關係,您可以並行計算反對角線的元素。你必須初始化最頂行和最左一列,然後進行,對於每種抗對角線步步:

 
0 0 0 0 .. 
0 1 2 3 .. 
0 2 3 .. 
0 3 ... 
.. 

我在示意圖中表示的過程編號 0 = INIT,1 =第一步驟中,2 =第二步..

例如,您可以在步驟2中並行計算每個單元格,然後在步驟3中並行計算每個單元格,等等,就像波陣面掃過矩陣(這是一種已知技術)

不幸的是,由於單元格之間存在數據依賴關係,因此您需要等待該步驟才能繼續下一步。另外由於元素的數量是可變的,所以一些處理器將會被這種方法利用不足。

相關問題