矩阵和向量相乘得不到加速

大家好,
我写了一个矩阵和向量相乘的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的运行时间。所以就觉得这个加速也太小了点儿。
谢谢大家能有空帮我找找问题。

路过,顶起

矩阵拷到shared memory了么? Tile?

我只把向量考进了shared memory,因为向量需要重复使用

我自己update一下吧,早上把矩阵改成用texture memory,而且还是2D的,一下子把速度提到了40倍,反复验证了,应该是没错的。

应该不是texture memory的问题,按道理texture会比直接cache稍慢。建议这个还是用库吧。要比你自己写得要快。

很好,很强大!顶起!