2012-04-07 129 views
3

我必須乘以一個非常小的矩陣(大小 - 10x10)與一個向量幾次50000到100000次(甚至可能會超過)。這發生在1000個不同的矩陣中(可能更多)。通過在CUDA上執行此操作會有什麼顯着的性能提升。我應該在這裏使用CUDA嗎?

+1

可以同時完成多少個gemv操作?這是瞭解GPU是否有益的關鍵。 – talonmies 2012-04-07 07:47:51

回答

4

是的,這是GPU的理想任務。

1

如果要將單個矩陣乘以一個向量50K次,並且每個乘法都是先前的先決條件,則不要使用CUDA。這是一個序列問題,是CPU的最佳套件。但是,如果每個乘法都是獨立的,您可以在CUDA上同時乘它們。

只有當你的程序能提供巨大的加速時,每個向量乘法迭代都獨立於其他迭代的數據。這樣你就可以通過啓動相同數量的線程同時啓動50K或更多的迭代。

+0

矩陣乘法是關聯的。 – 2012-04-08 06:59:19

+2

這不值得讚揚IMO。傑瓦德確實說過,「如果」。在我的回答中,我確實假設了這個問題是關於標準BLAS類型的向量 - 矩陣乘法。當然,在不太可能的情況下,你實際上需要乘以一個具有相同向量50k次的矩陣,你可以得到向量的指數並進行一次乘法運算。 – 2012-04-08 18:59:56

1

根據你在做什麼,是的,這可以在GPU上很快完成,但你可能需要運行你自己的內核來獲得一些好的性能。

不知道更多關於你的問題,我不能給你太多的建議。但我可以推測一個解決方案:

如果你正在一個向量乘以相同的矩陣幾千次,你會更好地發現矩陣的閉合形式爲任意功率。您可以使用Cayley-Hamilton定理或約旦規範形式來做到這一點。

我似乎無法從一個快速的谷歌搜索中找到這個實現,但考慮到我在一年級線性代數中做了這個,這並不算太壞。關於Jordan正常形式的一些信息可以在http://en.wikipedia.org/wiki/Jordan_normal_form#Powers找到,它的變換矩陣只是特徵向量的矩陣,以及矩陣的逆矩陣。

假設你有一個矩陣A,並且找到約旦正常形式J和所述變換矩陣P,P^-1,則找到

甲^ N = PJ^N P 1 -1

我似乎無法找到實現這一點的良好鏈接,但計算10x10矩陣的封閉形式將比50,000矩陣乘法耗時更少。而且這個實現可能會在CPU上運行得更快。

如果這是你的問題,你應該看看這個。