如何使用 CUDA 获得 100% 的 GPU 使用率



我想知道如何逐步在 GPU 中生成高负载。我正在尝试做的是一个程序,它将最大负载放入 MP,然后在其他中,直到达到 MP 总数。

这类似于在 CPU 的每个内核中执行"虽然为真",但我不确定相同的范式是否适用于具有 CUDA 的 GPU。

你可以帮我吗?

如果要进行压力测试/功耗测试,则需要选择工作负载。仅计算代码的最高功耗,您最有可能通过一些综合基准测试获得,这些基准测试为 GPU 提供最佳组合和操作顺序。否则,BLAS 级别 3 可能非常接近最佳。

仅将负载放在一定数量的多处理器上需要调整工作负载以限制块级并行性。

简而言之,这就是我要做的:

  • 选择一个经过良好优化且已知可以在很大程度上利用 GPU 的代码(高 IPC、高功耗等)。在CUDA开发人员论坛上环顾四周,您应该能够找到手动调整的BLAS代码或类似的东西。
  • 更改代码以强制其在给定数量的多处理器上运行。这将要求您调整块和线程的数量,以便为要使用的处理器数量产生恰到好处的负载量。
  • 配置文件:探查器计数器可以向您显示每个多处理器的指令量,从而检查您是否确实仅在所需数量的处理器上运行,以及其他可以指示代码运行效率的计数器。以及
  • 量。如果你有一辆特斯拉或Quadro,你可以开箱即用。否则,请尝试 nvml 修复。如果没有功率测量,您将很难知道您离 TDP 有多远,尤其是 GPU 节流的天气。

我的一些基准测试通过 CUDA、OpenMP 和编程多线程执行相同的计算。执行的算术运算的形式为 x[i] = (x[i] + a) * b - (x[i] + c) * d + (x[i] + e) * f 在每个数据元素上加 2、8 或 32 个加法或减法和乘法。还使用了一系列数据大小。[免费]Linux的基准测试,源代码和结果通过我的页面:

http://www.roylongbottom.org.uk/linux%20benchmarks.htm

我也提供Windows品种。以下是一些 CUDA 结果,显示使用 GeForce GTX 650 的最大速度为 412 GFLOPS。在四核/8线程Core i7上,OpenMP使用SSE指令产生高达91 GFLOPS,多线程高达93 GFLOPS,使用AVX 1产生178 GFLOPS。另请参阅老化和可靠性应用程序部分,其中最苛刻的 CUDA 测试在 CPU 压力测试的同时运行一段时间以显示温度升高。

            Core i7 4820K 3.9 GHz Turbo Boost GeForce GTX 650
  Linux CUDA 3.2 x64 32 Bits SP MFLOPS Benchmark 1.4 Tue Dec 30 22:50:52 2014
  CUDA devices found 
  Device 0: GeForce GTX 650  with 2 Processors 16 cores 
  Global Memory 999 MB, Shared Memory/Block 49152 B, Max Threads/Block 1024
  Using 256 Threads
  Test            4 Byte  Ops  Repeat   Seconds   MFLOPS             First  All
                   Words  /Wd  Passes                              Results Same
 Data in & out    100000    2    2500  0.837552      597   0.9295383095741  Yes
 Data out only    100000    2    2500  0.389646     1283   0.9295383095741  Yes
 Calculate only   100000    2    2500  0.085709     5834   0.9295383095741  Yes
 Data in & out   1000000    2     250  0.441478     1133   0.9925497770309  Yes
 Data out only   1000000    2     250  0.229017     2183   0.9925497770309  Yes
 Calculate only  1000000    2     250  0.051727     9666   0.9925497770309  Yes
 Data in & out  10000000    2      25  0.369060     1355   0.9992496371269  Yes
 Data out only  10000000    2      25  0.201172     2485   0.9992496371269  Yes
 Calculate only 10000000    2      25  0.048027    10411   0.9992496371269  Yes
 Data in & out    100000    8    2500  0.708377     2823   0.9571172595024  Yes
 Data out only    100000    8    2500  0.388206     5152   0.9571172595024  Yes
 Calculate only   100000    8    2500  0.092254    21679   0.9571172595024  Yes
 Data in & out   1000000    8     250  0.478644     4178   0.9955183267593  Yes
 Data out only   1000000    8     250  0.231182     8651   0.9955183267593  Yes
 Calculate only  1000000    8     250  0.053854    37138   0.9955183267593  Yes
 Data in & out  10000000    8      25  0.370669     5396   0.9995489120483  Yes
 Data out only  10000000    8      25  0.202392     9882   0.9995489120483  Yes
 Calculate only 10000000    8      25  0.049263    40599   0.9995489120483  Yes
 Data in & out    100000   32    2500  0.725027    11034   0.8902152180672  Yes
 Data out only    100000   32    2500  0.407579    19628   0.8902152180672  Yes
 Calculate only   100000   32    2500  0.113188    70679   0.8902152180672  Yes
 Data in & out   1000000   32     250  0.497855    16069   0.9880878329277  Yes
 Data out only   1000000   32     250  0.261461    30597   0.9880878329277  Yes
 Calculate only  1000000   32     250  0.060132   133042   0.9880878329277  Yes
 Data in & out  10000000   32      25  0.375882    21283   0.9987964630127  Yes
 Data out only  10000000   32      25  0.207640    38528   0.9987964630127  Yes
 Calculate only 10000000   32      25  0.054718   146204   0.9987964630127  Yes
 Extra tests - loop in main CUDA Function
 Calculate      10000000    2      25  0.018107    27613   0.9992496371269  Yes
 Shared Memory  10000000    2      25  0.007775    64308   0.9992496371269  Yes
 Calculate      10000000    8      25  0.025103    79671   0.9995489120483  Yes
 Shared Memory  10000000    8      25  0.008724   229241   0.9995489120483  Yes
 Calculate      10000000   32      25  0.036397   219797   0.9987964630127  Yes
 Shared Memory  10000000   32      25  0.019414   412070   0.9987964630127  Yes

最新更新