我试图把4800x9600矩阵加起来,结果形成1x9600矩阵。
我所做的事是,将4800x9600 split成9 600tric,每.4800.。 然后,我削减了4800项内容。
问题是,这确实是缓慢的。
没有人提出任何建议?
基本上,Im试图执行MATLAB的总和(......)职能。
在这里,我核实的法典是细致的,它的确进展缓慢:
void reduceRows(Matrix Dresult,Matrix DA)
{
//split DA into chunks
Matrix Dchunk;
Dchunk.h=1;Dchunk.w=DA.h;
cudaMalloc((void**)&Dchunk.data,Dchunk.h*Dchunk.w*sizeof(float));
Matrix DcolSum;
DcolSum.h=1;DcolSum.w=1;
//cudaMalloc((void**)&DcolSum.data,DcolSum.h*DcolSum.w*sizeof(float));
int i;
for(i=0;i<DA.w;i++) //loop over each column
{
//printf("%d ",i);
cudaMemcpy(Dchunk.data,&DA.data[i*DA.h],DA.h*sizeof(float),cudaMemcpyDeviceToDevice);
DcolSum.data=&Dresult.data[i];
reduceTotal(DcolSum,Dchunk);
}
cudaFree(Dchunk.data);
}
矩阵定义为:
typedef struct{
long w;
long h;
float* data;
}Matrix;
仅削减标准NVIDIA,将Dchunk的所有要素汇总起来,并将答案放在DcolSum。
如果我找不到答案,我就要在万国邮联上这样做。
许多代表团预先感谢,