GK110的Hyper-Q优于GK104 / GF104 nvidia卡的并发内核有什么优势?

时间:2014-04-15 14:32:19

标签: cuda

如果我有多线程应用程序和我自己的线程来控制CUDA设备并将内核调度到不同的流,我可以在Kepler-2(GK110)之前的设备上实现非常高的GPU使用率,就像Fermi和Kepler-1(GK104)一样

所以我没有看到很好的理由渴望更贵的卡片。

在费米卡上流传我的测试示例和分析:

void ut_concurent_kernels()
{
  int i,j;
  cudaEvent_t kernelEvent;
  cudaStream_t    work_stream[14];


  for (i = 0; i < 14;i++)
  {
    cudaStreamCreate( &work_stream[i]);
  }
  cudaEventCreateWithFlags(&kernelEvent, cudaEventDisableTiming);

  for (j = 0; j < 2;j++)
  {
    for (i = 0; i < 14;i++)
    {
      if (i == 13)
      {
        checkCudaErrors(cudaEventRecord(kernelEvent, work_stream[i]));
      }
      Kernel_Work<<<1,256,0,work_stream[i]>>>(100000);
    }
    checkCudaErrors(cudaStreamWaitEvent(work_stream[i-1], kernelEvent,0));
  }
  cudaDeviceSynchronize();

  for (i = 0; i < 14;i++)
  {
    cudaStreamDestroy(work_stream[i]);
  }
  cudaEventDestroy(kernelEvent);
} 

Profiling

1 个答案:

答案 0 :(得分:2)

我相信Hyper-Q最程序员可见的表现形式是一个名为CUDA Multi-Process-Server(MPS)的Linux功能。此时,CUDA MPS(在Hyper-Q之上)的主要用例是使MPI群集计算作业能够在多个MPI等级之间共享GPU,用于在同一节点上执行的MPI等级,如上所述here 。在这种情况下,多个MPI等级通常在独立的CPU 进程(而不是线程)之外运行,而CUDA MPS / Hyper-Q提供了一种方便的共享机制。

如前所述,Hyper-Q是cc3.5设备中提供的硬件功能,但不适用于cc 1.x - 3.0设备。在单个应用程序进程的上下文中,无论是单线程还是多线程,我都知道CUDA MPS(在Hyper-Q之上)没有优势或引人注目的用例,而是自己管理多个并发执行。

关于自己管理多个并发执行,Hyper-Q将(透明地)为程序员提供好处,如@Greg Smith在下面的评论中所述。在cc3.5设备中没有特定的要求可以利用它,从概念上讲,用户将使用相同的整体方法管理并发执行,但在cc3中可能会体验到更高的并发性或实现更高并发性的能力。 5设备,由于Hyper-Q的硬件进步。正如Greg所建议的那样,OP已经证明,在cc3.5之前的设备中仍然可以实现并发性,但这样做的机会可能更为有限,或者可能需要的技术要少于明显的编程技术。要更详细地了解这些问题,请参阅幻灯片15-22 here