大家好,
我写了一个矩阵和向量相乘的kernel,矩阵有超过100k的行数,但是只有8到10个列数,所以向量的也只有8到10个的元素在里面。下面就是我写的kernel,我是先把整个向量拷贝到了shared内存里面,然后每个线程计算一行和向量的乘积。
global void testKernel(Matrix m_d, Vector v_d, Vector mvProd_d, const int width)
{
int tid = blockIdx.x * BLOCKSIZE + threadIdx.x;
Real sum =0;
shared Real vec_s[WIDTH];
if(threadIdx.x<WIDTH)
vec_s[threadIdx.x] = v_d.elements[threadIdx.x];
__syncthreads();
for(int i=0; i<width; i++)
{
sum += m_d.elements[tid*width+i] * vec_s[i];
}
mvProd_d.elements[tid] = sum;
}
我在Tesla C2070的卡上面运行过我的程序,但是最多只能达到20多倍的加速,始终找不到原因是怎么回事儿。 而且我在算加速的时候没有包括数据的传输时间,只是kernel的运行时间。所以就觉得这个加速也太小了点儿。
谢谢大家能有空帮我找找问题。