Я пытаюсь сложить строки матрицы 4800x9600 вместе, в результате получается матрица 1x9600.
Я разбил 4800x9600 на 9600 матриц длиной 4800 каждая.Затем я выполняю сокращение на 4800 элементов.
Проблема в том, что это действительно медленно ...
Кто-нибудь получил какие-либо предложения?
В принципе, я пытаюсьдля реализации функции sum (...) 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;
ReduceTotal () просто вызывает стандартное сокращение NVIDIA, суммирует все элементы в Dchunk и помещает ответ в DcolSum.
Я собираюсь сделать все это на CPU, если яне могу найти ответ ...; (
Заранее большое спасибо,