我一直认为Hyper-Q技术不过是GPU中的流。后来我发现自己错了(我是吗?(。因此,我正在阅读有关Hyper-Q的一些阅读,并感到困惑。我正在浏览一篇文章,并有这两个陈述:
a。Hyper-Q是一种灵活的解决方案,允许与多个CUDA流,多个消息传递接口(MPI(进程,甚至从过程中的多个线程
中的多个线程进行单独连接。b。HYPER-Q通过允许32个同时进行硬件管理的连接(与Fermi可用的单个连接相比(
,增加了主机和GK110 GPU之间的连接总数(工作队列(在上述点中,点B 说可以从主机中创建多个连接到单个GPU的连接。这是否意味着我可以通过不同的应用程序在简单的GPU上创建多个上下文?这是否意味着我将不得不在不同的流上执行所有应用程序?如果我所有的连接都是内存和计算资源消耗,谁管理资源(内存/内核(计划?
将HyperQ视为设备侧硬件中实现的流。
在HyperQ到达之前,例如在Fermi上,驱动程序在主机上将命令(内核启动,内存传输等(放在单个工作队列中。这意味着命令无法互相超越,您必须小心地按照主机上的正确顺序发出它们以实现最佳重叠。
在GK110 GPU和后来的HyperQ设备上,设备上有32个工作队列。这意味着可以将来自不同队列的命令相对于彼此重新排序,直到它们开始执行。因此,在上面链接的示例中的两个订单都导致GK110设备上的良好重叠。
这对于多线程主机代码尤其重要,在没有线程之间的其他同步的情况下,您无法控制订单。
请注意,默认情况下仅使用8个硬件队列中的8个,以节省资源。如果需要的话,将cuda_ device _ max_连接环境变量设置为更高的值。