我必須乘以一個非常小的矩陣(大小 - 10x10)與一個向量幾次50000到100000次(甚至可能會超過)。這發生在1000個不同的矩陣中(可能更多)。通過在CUDA上執行此操作會有什麼顯着的性能提升。我應該在這裏使用CUDA嗎?
回答
是的,這是GPU的理想任務。
如果要將單個矩陣乘以一個向量50K次,並且每個乘法都是先前的先決條件,則不要使用CUDA。這是一個序列問題,是CPU的最佳套件。但是,如果每個乘法都是獨立的,您可以在CUDA上同時乘它們。
只有當你的程序能提供巨大的加速時,每個向量乘法迭代都獨立於其他迭代的數據。這樣你就可以通過啓動相同數量的線程同時啓動50K或更多的迭代。
矩陣乘法是關聯的。 – 2012-04-08 06:59:19
這不值得讚揚IMO。傑瓦德確實說過,「如果」。在我的回答中,我確實假設了這個問題是關於標準BLAS類型的向量 - 矩陣乘法。當然,在不太可能的情況下,你實際上需要乘以一個具有相同向量50k次的矩陣,你可以得到向量的指數並進行一次乘法運算。 – 2012-04-08 18:59:56
根據你在做什麼,是的,這可以在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上運行得更快。
如果這是你的問題,你應該看看這個。
- 1. 我應該在這裏使用eval()嗎?
- 2. 我應該在這裏使用HttpResponseRedirect嗎?
- 3. 應該在這裏使用重要嗎?
- 4. 我應該在這裏實施IDisposable嗎?
- 5. 我應該在這裏合併嗎?
- 6. 我應該在這裏使用工廠
- 7. 我應該在這裏使用朋友課嗎?
- 8. 我應該在這裏使用參考光標嗎?
- 9. 我應該在這裏使用唯一索引嗎?爲什麼?
- 10. 我應該在這裏使用ref或out關鍵字嗎?
- 11. 我應該在這裏使用接口嗎?
- 12. 我應該在這裏使用擦除 - 刪除成語嗎?
- 13. 我應該在這裏使用主鍵嗎?
- 14. 混合php和javascript - 我們應該在這裏使用json嗎?
- 15. 我應該在這裏使用元類嗎?
- 16. 我應該在這裏使用例外嗎?
- 17. UML依賴關係 - 我應該在這裏使用它嗎?
- 18. 我應該在這裏使用枚舉嗎?
- 19. 我應該在這裏使用全局變量嗎?
- 20. 告訴,不要問原則 - 我應該在這裏應用嗎?
- 21. 我應該使用這種方法嗎?
- 22. 應該在這裏使用右值引用嗎?
- 23. 使用Lucene.Net,我應該在這裏使用什麼索引stategy?
- 24. 我應該在這裏做什麼 - JavaScript
- 25. 我應該在這裏做什麼?
- 26. 我應該在哪裏放這個JavaScript?
- 27. 我可以在這裏使用「is_expected」嗎?
- 28. C#我應該在這裏舉個例外嗎?
- 29. 我應該穿這個嗎?
- 30. 我應該使用Nautilus GIR嗎?如果是這樣,文檔在哪裏?
可以同時完成多少個gemv操作?這是瞭解GPU是否有益的關鍵。 – talonmies 2012-04-07 07:47:51