【问题标题】:Unenhanced performance of matlab GPU computingmatlab GPU计算的未增强性能
【发布时间】:2014-10-10 21:43:52
【问题描述】:

为了比较 GPU 与 CPU 计算的速度,我从 MATLAB Central 运行了可用的示例代码 here(GPU 上的 Mandelbrot 集)。以下是我得到的结果:

  • 案例 1(无 GPU):6.2 秒

  • 案例 2(使用 parallel.gpu.GPUArray):6.518 秒(示例中为 1.39 秒)

  • 案例 3(使用逐元素操作):1.259 秒(示例中为 0.14 秒)

可以看出,案例 2 没有任何改进,案例 3 仅略有改进 4 倍左右。由于示例没有说明他们使用的 GPU 的详细信息,请问这是否仅仅是由于我的显卡“无能”还是我错过了一些重要的东西?

显卡还负责驱动我的显示器(HP Z Display Z23i 23 英寸 IPS LED 背光显示器)。

CPU:Intel i7-4790,3.6 GHz(8 核)

GPU:

                  Name: 'NVS 510'
                 Index: 1
     ComputeCapability: '3.0'
        SupportsDouble: 1
         DriverVersion: 6
        ToolkitVersion: 5
    MaxThreadsPerBlock: 1024
      MaxShmemPerBlock: 49152
    MaxThreadBlockSize: [1024 1024 64]
           MaxGridSize: [2.1475e+09 65535 65535]
             SIMDWidth: 32
           TotalMemory: 2.1475e+09
            FreeMemory: 1.6934e+09
   MultiprocessorCount: 1
          ClockRateKHz: 797000
           ComputeMode: 'Default'
  GPUOverlapsTransfers: 1
KernelExecutionTimeout: 1
      CanMapHostMemory: 1
       DeviceSupported: 1
        DeviceSelected: 1

谢谢!

编辑

示例here 中使用的 GPU 是 Tesla C2050。 (感谢@Sam Roberts)

【问题讨论】:

  • 在 Ben Tordoff 撰写您链接到的文章时,我曾与他一起工作。如果我没记错的话,他使用的是特斯拉 C2050,当时(2011 年)相当高端。

标签: performance matlab cuda gpu


【解决方案1】:

该链接上的时间很可能与您的 GPU 不同。他们没有具体说明他们使用的是哪种显卡,但我猜他们使用的是更高端的显卡。

通过谷歌搜索NVS 510,规格与我机器上的卡相似。但是,您的卡面向业务,而我的卡面向游戏。我有一个 GTX 660,它是市场上可用的高端 GPU 之一。

这些是我显卡的属性:

CUDADevice with properties:

                  Name: 'GeForce GTX 660'
                 Index: 1
     ComputeCapability: '3.0'
        SupportsDouble: 1
         DriverVersion: 6.5000
        ToolkitVersion: 5.5000
    MaxThreadsPerBlock: 1024
      MaxShmemPerBlock: 49152
    MaxThreadBlockSize: [1024 1024 64]
           MaxGridSize: [2.1475e+09 65535 65535]
             SIMDWidth: 32
           TotalMemory: 2.1475e+09
            FreeMemory: 1.5357e+09
   MultiprocessorCount: 5
          ClockRateKHz: 1084500
           ComputeMode: 'Default'
  GPUOverlapsTransfers: 1
KernelExecutionTimeout: 1
      CanMapHostMemory: 1
       DeviceSupported: 1
        DeviceSelected: 1

我的卡和你的不同之处在于我有 5 个多处理器,我的时钟频率比你的快 300 MHz。如需并排比较,请查看我的卡片与您的卡片对比:

经过进一步检查,我的内存带宽比您的卡高得多。与您的 192 个相比,我还有 960 个 GPU 内核。

我决定运行这些测试来比较我的表现和你的时间安排。我的 CPU 是 i7-4770 3.6 GHz Intel,我的机器上有 16 GB RAM。

我通过运行这些示例得到的时间如下:

  • 案例 #1 - 没有 GPU:6.46 秒
  • 案例 #2 - 朴素 GPU:0.82 秒 - 速度提高 7.9 倍
  • 案例 #3 - 通过 CUDA:0.09 秒 - 速度提高 71.7 倍

因此,我的猜测是,与 MathWorks 执行的那些测试相比,您的显卡质量可能较低。也许尝试更新您的图形驱动程序,看看是否有帮助。但是,我的猜测是,由于多处理器数量、更快的时钟、更多的内核和更高的内存带宽,我的性能要好得多。

【讨论】:

  • 我明白了。我选择这款显卡是因为它的计算能力 (cc) 为“3.0”。从我们的结果来看,即使两张卡的 cc 分数相同,它们也相差很大。所以我猜“计算能力”不能真正作为 matlab GPU 计算目的的购买指南。感谢您提供的信息比较!
  • 补充:我修改了case2中的代码,排除了数据传输时间(把'gpuArray'和'gather'放在tic toc之外),发现结果和我的差不多上面的问题。所以我想我们可以过滤掉内存带宽,并将最可能的原因归结为“更多的多处理器数量、更快的时钟和更多的内核”。
  • @user3237120 - 我完全理解你的意思。我之前也犯过同样的错误,我认为计算能力就足够了,但是物理硬件规格不足以满足我的需要。不客气!很抱歉这不是你想听到的,但至少你知道为什么你的表现和你的卡不一样。祝你好运!
  • “计算能力”描述了 GPU 的一般特性:例如:指令集、双精度支持、动态内核调度等。正如您所发现的,每个计算能力(大致与代产品)在广泛的实际 GPU 中发布,其中不同的是:多处理器的数量、时钟频率以及内存的数量和速度。他们这样做是为了控制价格和权力。
  • 假设 GPU 代码写得很好,不。缓存设置和使用是已编译 GPU 代码的一部分。这条评论只是为了表明内存总线的宽度和速度与 GPU 的核心数量一样重要。大量的 CUDA 编程指南致力于构建内核以利用硬件中可用的复杂内存层次结构的最佳方法。很有可能,你使用的代码已经关注了这些东西,你得到的就是你得到的。
猜你喜欢
  • 2014-09-12
  • 2019-08-06
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
相关资源
最近更新 更多