泰坦的孿生兄弟!NVIDIA GTX 780首測(cè)
原來的一個(gè)困難是,GPU始終要優(yōu)化調(diào)度來自多個(gè)數(shù)據(jù)流的工作負(fù)載。Fermi 結(jié)構(gòu)支持從單獨(dú)數(shù)據(jù)流的16路并發(fā)內(nèi)核啟動(dòng),但最終數(shù)據(jù)流都復(fù)用相同的硬件工作隊(duì)列。這允許虛假的數(shù)據(jù)流內(nèi)依賴,要求在單獨(dú)數(shù)據(jù)流內(nèi)的其他內(nèi)核可以執(zhí)行之前就完成一個(gè)數(shù)據(jù)流內(nèi)依靠的內(nèi)核。雖然在某種程度上這可以通過使用廣度優(yōu)先啟動(dòng)順序緩解,但是隨著程序的復(fù)雜性的增加,這可以成為越來越難以有效地管理。
Kepler GK110 使用新 Hyper‐Q 特征改進(jìn)了這一功能。Hyper‐Q 允許 32 個(gè)并發(fā),硬件管理的連接( 對(duì)比 Fermi 的單一連接),增加了主機(jī)和 GPU 中 CUDA Work Distributor (CWD)邏輯之間的連接總數(shù)(工作隊(duì)列)。Hyper‐Q 是一種靈活的解決方案,允許來自多個(gè) CUDA 流、多個(gè)消息傳遞接口(MPI)進(jìn)程,甚至是進(jìn)程內(nèi)多個(gè)線程的單獨(dú)連接。以前遇到跨任務(wù)虛假串行化任務(wù)的應(yīng)用程序,限制了 GPU 的利用率,而現(xiàn)在無需改變?nèi)魏维F(xiàn)有代碼,性能就能得到 32 倍的大幅度提升。
Hyper‐Q 允許CPU和GPU之間更多的并發(fā)連接
每個(gè) CUDA 流在其自己硬件工作隊(duì)列管理,優(yōu)化流間的依賴關(guān)系,一個(gè)流中的運(yùn)算將不再阻止其他流,使得流能夠同時(shí)執(zhí)行,無需特別定制的啟動(dòng)順序,消除了可能的虛假依賴。Hyper‐Q 在基于 MPI 的并行計(jì)算機(jī)系統(tǒng)中使用會(huì)有明顯的優(yōu)勢(shì)。通常在多核 CPU 系統(tǒng)上運(yùn)行時(shí)創(chuàng)建傳統(tǒng)基于 MPI‐的算法,分配給每個(gè) MPI 進(jìn)程的工作量會(huì)相應(yīng)地調(diào)整。這可能會(huì)導(dǎo)致單個(gè)MPI 進(jìn)程沒有足夠的工作完全占據(jù) GPU。雖然一直以來多個(gè) MPI 進(jìn)程都可以共享 GPU,但是這些進(jìn)程可能會(huì)成為虛假依賴的瓶頸。Hyper‐Q 避免了這些虛假的依賴,大大提高了 MPI 進(jìn)程間共享 GPU 的效率。
Hyper‐Q 與 CUDA 流一起工作:左側(cè)顯示 Fermi 模式,僅 (C,P) 和 (R,X) 可以同時(shí)運(yùn)行,因?yàn)閱蝹€(gè)硬件工作隊(duì)列導(dǎo)致的流內(nèi)依賴。Kepler Hyper‐Q 模式允許所有流使用單獨(dú)的工作隊(duì)列同時(shí)運(yùn)行。
關(guān)注我們
