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

时间:2015-01-26 14:31:49

标签: cuda

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

类似于执行"而真实"在CPU的每个核心中,但我不确定相同的范例是否可以在带有CUDA的GPU上运行。

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

  • 选择经过充分优化且已知可在很大程度上利用GPU的代码(高IPC,高功耗等)。浏览CUDA开发人员论坛,您应该能够找到手动调整的BLAS代码或类似内容。
  • 更改代码以强制它在给定数量的多处理器上运行。这将要求您调整块和线程的数量,以便为要使用的处理器数量产生恰当的负载量。
  • 配置文件:探查器计数器可以显示每个多处理器的指令量,它可以检查您确实只在所需数量的处理器上运行,以及其他可以指示代码运行效率的计数器。 以及
  • 措施。如果您有特斯拉或Quadro,您可以获得开箱即用的功耗。否则,请尝试nvml fix。如果没有功率测量,你很难知道你离TDP有多远,尤其是GPU受到限制的天气。

答案 1 :(得分:-1)

我的一些基准测试通过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