Titan RTX 上双精度和单精度的矩阵乘法基准测试

我试图了解我们的 GPU 工作站的单精度和双精度之间的性能差异。

我们的工作站配备了两个 TITAN RTX GPU,但我在单个 Titan RTX 上运行基准测试。我正在使用 cublas 矩阵乘法测试性能。我将由随机浮点数或双精度数组成的 8192x8192 矩阵相乘。为了确保我这边没有错误,我还在Python中使用cupy库重复了这个过程,结果非常相似。

浮点型的测试结果约为每 1 次乘法 75 毫秒,双精度型的测试结果约为 2,000 毫秒。

如果我有一个较旧的 GPU,这将很有意义,因为 75*32 = 2,400~2000,因此我的双精度性能将比 https://docs.nvidia 表中预期的差约 32 倍。

然而,我的 GPU 的计算能力为 7.5,因此我预计性能只会翻倍 2 倍。

其他信息:Ubuntu 18 LTS、nvcc 10.2、驱动程序 440.82。

这是 CUDA 代码:

#include <iostream>

#include <chrono>

#include <string>

#include <cuda_runtime.h>

#include "cublas_v2.h"

#include <math.h>

#include <stdio.h>

#include <cuda.h>

#include <device_functions.h>

#include <sstream>

#include <time.h>


unsigned long mix(unsigned long a, unsigned long b, unsigned long c)

{

    a=a-b;  a=a-c;  a=a^(c >> 13);

    b=b-c;  b=b-a;  b=b^(a << 8);

    c=c-a;  c=c-b;  c=c^(b >> 13);

    a=a-b;  a=a-c;  a=a^(c >> 12);

    b=b-c;  b=b-a;  b=b^(a << 16);

    c=c-a;  c=c-b;  c=c^(b >> 5);

    a=a-b;  a=a-c;  a=a^(c >> 3);

    b=b-c;  b=b-a;  b=b^(a << 10);

    c=c-a;  c=c-b;  c=c^(b >> 15);

    return c;

}



using namespace std;


int main()

{

        int deviceCount;

        cudaGetDeviceCount(&deviceCount);

        cudaDeviceProp deviceProp;

        cublasStatus_t err;

        cudaGetDeviceProperties(&deviceProp, 0);

        printf("Detected %d devices \n", deviceCount);

        printf("Device %d has compute capability %d.%d:\n\t maxshmem %d. \n\t maxthreads per block %d. \n\t max threads dim %d. %d. %d.\n ", 0,

                deviceProp.major, deviceProp.minor, deviceProp.sharedMemPerBlock, deviceProp.maxThreadsPerBlock, deviceProp.maxThreadsDim[0],

                deviceProp.maxThreadsDim[1], deviceProp.maxThreadsDim[2]);


        cudaEvent_t start_d, stop_d;

        cudaEventCreate(&start_d);

        cudaEventCreate(&stop_d);


        //RND insicialization

        unsigned long seed = mix(clock(), time(NULL), 0);

       srand(seed);



        int N=8192;

        int Nloops=2;



                }

}


www说
浏览 304回答 1
1回答

富国沪深

好的,有一个脚注表示,对于计算能力 7.5(此处的情况),性能为 2,但不是 32,对于浮点数,性能为 64,这意味着乘法加加双精度数的运算比浮点数慢 32 倍。如果 float 和 double 问题都完全受算术限制,我预计速度减慢约为 32。实际上,减速幅度略小(2000/75 ~ 27),这可能是浮动带宽受限问题的结果,也可能与其他因素有关。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python