●GigaThread线程调度优化
Fermi架构的另一个重要特性,就是它的双层分布式调度机制。在片上的层面(SPA Streaming Processor Array,流式处理器矩阵级别),全局的分布式线程调度引擎(global work distribution engine)分发block到每一个SM上,在SM层面,每一个warp分布式调度引擎按照32个线程为一个warp执行。
Fermi实现了SM级别的双发射,意味着SPMD(单线程多任务)的实现。从并行kernel下探到最底层,实际上就是靠的SM级别的双发射。SM级别的SPMD上升到GPU核心级别,Fermi就是MPMD(多线程多任务)。这种设计已经越来越像CPU,而且随着GPU的发展,每走一步,就多像一份。
Fermi实现了SM单元级别的双发射
第一代GigaThread线程调度引擎,在G80架构中实现了12288个线程的实时的调度管理。Fermi架构不只是增强了原有的机制,而且引进了更快的context上下文交换机制,并行kernel执行机制,增强了线程block的调度能力。Fermi的这项能力相对于上一代GPU提高了10倍。
同时像CPU一样,GPU也可以利用context上下文交换机制来管理多任务的切换,每一个任务都可以用分时的方式利用处理器的计算资源。Fermi的运算流水线经过优化设计,把context上下文的切换时间减少到了10~20毫秒,极大的优化了上一代的GPU架构。不只是性能的提高,这个设计可以让开发者创建更快的kernel-to-kernel应用程序,例如让程序在图形和PhysX上的应用,图形与物理效果处理之间的运算也将受益于更快的context上下文交换机制。
●并行执行内核Concurrent Kernel Execution
Fermi支持kernel并发运行,同一应用程序的不同kernel可以同时运行在GPU上。Kernel并发机制可以让应用还曾向执行更多的kernel来发挥GPU的能力。例如,PhysX应用程序需要计算流体和固体,如果是串行执行,只能利用一半的线程处理器。Fermi的架构可以让同一个CUDA context的kernel都同时运行在同一个GPU上,这样可以更有效的利用GPU的资源。不同应用程序context的kernel函数也可以通过更快速的context切换,更快地运行在GPU上。