这里有一个简单的程序: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