這裏有一個簡單的程序:CUDA優化問題
void multiply(const int* v_in, const int* w_in, int n_v, int n_w, int* w_out)
{
for(int i=0; i<n_w; i++)
{
int sum=0;
for(int j=0; j<n_v; j++)
sum += (w_in[i]*v_in[j])>>1;
w_out[i]=sum;
}
}
設定n_v,n_w〜10^6。很顯然,在CUDA中至少有十幾種等同的方法可以實現,用不同的方式將(n_v * n_w)操作細分爲線程,有或沒有共享內存......從理論上講,哪種方法最快?
你確定這個代碼是正確的?這不等於計算s = SUM(v_in);對於(i = 0到n_w){w_out [i] = s * w_in [i]; }'? – 2010-11-07 00:07:05
這不是等同的,因爲有一個轉變......無論如何,問題是關於通過n_v x n_w元素對迭代的最佳方式,而不會因內核啓動開銷或全局內存訪問延遲而被咬傷。 – user434507 2010-11-07 00:23:42