2012-06-30 49 views
0

我想要做矩陣乘法與2個非方陣,(2000,100),(100,100),我嘗試用塊子矩陣作爲Nvidia的例子,但結果是錯誤的,我在這裏找到了解決方法。 Non Square Matrix Multiplication in CUDA 它使用的零填充,所以我改變塊的大小爲16,但它是一個錯誤的工作組大小, 我用pyopencl而不能使用布拉斯等。非方形矩陣乘法OpenCL中

+2

你還沒有問一個問題,只有在你想達到什麼非常非常廣泛的術語說。那麼,究竟是什麼,你是有問題還是不明白? 「結果是錯誤的」並不是任何人都能夠幫助你的足夠信息。 – talonmies

+0

在這裏,所有我使用的數據是INT32和> 0,我有兩種方式,一是使用numpy的點功能,一個使用小矩陣方法和pyopencl.For方陣實現,這兩個方式給出相同的答案,但對於非方陣,第一個給出正確的答案,第二個,只有第一排矩陣是正確的,而一些元素<0甚至整個矩陣的一半的一半有元素= 0。 – user1492775

+0

我在發佈的鏈接中看到了一些解決方案。 Nvidia示例中的子矩陣乘法只適用於平方,然後有一個零填充方法,我認爲這是一個好主意,但是如果我將塊大小設置爲16,則不能按結果矩陣的維數進行劃分,因此會給出錯誤消息:錯誤的工作組大小。那麼如何做零填充?或者有其他方法?謝謝! – user1492775

回答

0

一個我看到的題目迄今爲止最好的演講是在2011年AFDS

PDF presentation.

Video (stream)

Video (download)

他們的矩陣是巨大的--Linpack大小 - 和非方形。您可以從1024向下擴展其主要GPU內核的塊大小更小的東西(32,64,128?),以更好地解決你的問題,甚至可能適合你的硬件LDS。演示者使用CPU來處理GPU未觸及的不規則尺寸區域。