Почему мой Titan V выполняет код CUDA медленнее, чем мой RTX 2080ti? - PullRequest
0 голосов
/ 06 июля 2019

При использовании одного и того же кода и машины (кроме графического процессора) время работы:

Титан V: 490 мс

2080ti: 380 мс

Я думаю, что совместимость Titan V с двойной точностью может быть лучше, чем RTX 2080ti, но результаты - нет. Может быть, я должен скомпилировать код для удвоения точности, используя какой-либо аргумент, или мой драйвер не так?

Я использую Ubuntu 18.04.

Код ядра:

__global__ void CSpMV_CSR(unsigned int N,
    unsigned int *xadj,unsigned int *adjncy,
    double *dataxx,double *datayy,double *datazz,
    double *Cspin,
    double *CHDemag,double *CH)
{ 
    int i = blockDim.x*blockIdx.x + threadIdx.x;
    if(i < N)
    {
        double dot[3]={0,0,0};
        for(int n = xadj[i] ; n < xadj[i+1]; n++)
        {
            unsigned int neigh=adjncy[n];
            double val[3] = {dataxx[n],datayy[n],datazz[n]};
            for(unsigned int co = 0 ; co < 3 ; co++)
            {
                dot[co]+=(val[co]*Cspin[3*neigh+co]);
            }
        }
        CH[3*i]=CHDemag[3*i]+dot[0];
        CH[3*i+1]=CHDemag[3*i+1]+dot[1];
        CH[3*i+2]=CHDemag[3*i+2]+dot[2];
    }
}

Это мой код измерения времени:

clock_t start, end;
    start = clock();
    int threadsperblock,blockspergrid;
    threadsperblock=256;
    blockspergrid=(SIZE+threadsperblock-1)/threadsperblock;
    for(int i=0;i<200;i++){
        CSpMV_CSR<<<blockspergrid,threadsperblock>>>(SIZE,Cxadj,Cadjncy,Cdxx,Cdyy,Cdzz,Cspin,CHDemag,CH);   
    }
    std::cout<<cudaDeviceSynchronize()<<std::endl;
    cout<<cudaMemcpy(H,CH,3*SIZE*sizeof(double),cudaMemcpyDeviceToHost)<<endl;
    end = clock();
    double endtime = (double)(end - start) / CLOCKS_PER_SEC;
    cout << "cost time:" << endtime * 1000 << "ms" << endl;
...