san*_*age 1 cuda gpgpu nvidia cuda-streams
I always thought that Hyper-Q technology is nothing but the streams in GPU. Later I found I was wrong(Am I?). So I was doing some reading about Hyper-Q and got confused more. I was going through one article and it had these two statements:
A. Hyper-Q is a flexible solution that allows separate connections from multiple CUDA streams, from multiple Message Passing Interface (MPI) processes, or even from multiple threads within a process
B. Hyper-Q通过允许32个同时进行的硬件管理的连接(与Fermi可用的单个连接相比),增加了主机与GK110 GPU之间的连接(工作队列)总数。
在前面提到的观点中,观点B指出主机可以创建多个连接到单个GPU。这是否意味着我可以通过不同的应用程序在一个简单的GPU上创建多个上下文?这是否意味着我必须在不同的流上执行所有应用程序?如果我的所有连接都占用内存并且计算资源消耗,谁来管理资源(内存/核心)调度,该怎么办?
将HyperQ视为在设备端的硬件中实现的流。
在HyperQ到达之前,例如在Fermi上,主机上的驱动程序将所有流中的命令(内核启动,内存传输等)放置在单个工作队列中。这意味着命令不能互相超越,并且您必须小心在主机上以正确的顺序发出命令以实现最佳重叠。
在带有HyperQ的GK110 GPU和更高版本的设备上,该设备上(至少)有32个工作队列。这意味着来自不同队列的命令可以相对于彼此重新排序,直到它们开始执行。因此,上面链接的示例中的两种排序都可以在GK110设备上实现良好的重叠。
这对于多线程宿主代码尤其重要,在多宿主代码中,如果没有线程之间的额外同步,就无法控制顺序。
请注意,在32个硬件队列中,默认情况下仅使用8个队列来节省资源。在设置CUDA_?设备_?MAX_?Connections环境变量到一个较高的值,如果你需要更多。