2016-11-22 106 views
0

我正試圖在3x3矩陣和360x360矩陣之間進行矩陣乘法。較小的矩陣(3x3)將用大矩陣的第一個(3x3)塊等操作。因此,我想讓我的小矩陣保持不變,並將其滑過我的大矩陣。cuda:使用共享和全局的矩陣乘法

是否可以將我的較小矩陣存儲爲共享內存的一部分,並將我的較大矩陣劃分爲全局3x3?

我沒有找到方法來複制較小的矩陣,直接從主機共享。如果我的cuda可視化是錯誤的,請糾正我。

謝謝。

+2

你不能從主機複製到共享內存。這不被支持。 – talonmies

回答

1

無法從主機填充共享內存。

但是,處理所有線程(如您的示例中的3x3矩陣)的常量的最佳方法是將它們放在常量內存中(其大小爲64 kB)。有兩種使用常量內存的方法:

  • 最簡單的方法是使用內核參數。定義一個struct包含您的內核參數,包括3x3矩陣,並把它傳遞給你的內核
  • 使用__constant__類型修飾符和使用cudaMemcpyToSymbol從主機來填充它:

    //In global scope 
    __constant__ float mat_gpu[3][3]; 
    //In the function that you use to populate the data 
    cudaMemcpyToSymbol(mat_gpu, mat_cpu, 9 * sizeof(float)); 
    //In your kernel you just use the mat_gpu variable 
    
+0

非常感謝你的真棒回答。你能提供任何使用這個__constant__類型限定符和cudaMemcpyToSymbol的例子。這將會非常有幫助。提前致謝。 –

+1

我添加了cudaMemcpyToSymbol的示例用法,希望這有助於! – ptrendx