我正試圖在3x3矩陣和360x360矩陣之間進行矩陣乘法。較小的矩陣(3x3)將用大矩陣的第一個(3x3)塊等操作。因此,我想讓我的小矩陣保持不變,並將其滑過我的大矩陣。cuda:使用共享和全局的矩陣乘法
是否可以將我的較小矩陣存儲爲共享內存的一部分,並將我的較大矩陣劃分爲全局3x3?
我沒有找到方法來複制較小的矩陣,直接從主機共享。如果我的cuda可視化是錯誤的,請糾正我。
謝謝。
我正試圖在3x3矩陣和360x360矩陣之間進行矩陣乘法。較小的矩陣(3x3)將用大矩陣的第一個(3x3)塊等操作。因此,我想讓我的小矩陣保持不變,並將其滑過我的大矩陣。cuda:使用共享和全局的矩陣乘法
是否可以將我的較小矩陣存儲爲共享內存的一部分,並將我的較大矩陣劃分爲全局3x3?
我沒有找到方法來複制較小的矩陣,直接從主機共享。如果我的cuda可視化是錯誤的,請糾正我。
謝謝。
無法從主機填充共享內存。
但是,處理所有線程(如您的示例中的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
非常感謝你的真棒回答。你能提供任何使用這個__constant__類型限定符和cudaMemcpyToSymbol的例子。這將會非常有幫助。提前致謝。 –
我添加了cudaMemcpyToSymbol的示例用法,希望這有助於! – ptrendx
你不能從主機複製到共享內存。這不被支持。 – talonmies