CUDA device compute modes
Enumerator:
cudaComputeModeDefault
cudaComputeModeExclusive
cudaComputeModeProhibited
官方解釋
3.5. Compute Modes
在運行Windows Server 2008和更高版本或Linux的Tesla解決方案上膝昆,可以使用NVIDIA的系統(tǒng)管理界面(nvidia-smi)將其設(shè)置為以下三種模式之一,從而將系統(tǒng)中的任何設(shè)備設(shè)置為驅(qū)動程序的一部分:
默認計算模式(Default ):多個主機線程可以同時使用該設(shè)備(通過使用運行時API時,可以在此設(shè)備上調(diào)用cudaSetDevice()勤哗,或者在使用驅(qū)動程序API時李根,通過使當(dāng)前上下文成為與設(shè)備關(guān)聯(lián)的上下文)锌杀。
獨占進程計算模式(Exclusive):跨系統(tǒng)中所有進程的設(shè)備上只能創(chuàng)建一個CUDA上下文覆享。 在創(chuàng)建該上下文的過程中爆惧,該上下文可能是當(dāng)前所需要的盡可能多的線程臊旭。
禁止的計算模式(Prohibited):無法在設(shè)備上創(chuàng)建CUDA上下文落恼。
特別是,這意味著如果設(shè)備0處于禁止模式或獨占進程模式并被另一個process使用离熏,則使用運行時API且未顯式調(diào)用cudaSetDevice()的主機線程可能與設(shè)備0以外的設(shè)備相關(guān)聯(lián)佳谦。 處理。 cudaSetValidDevices()可用于從設(shè)備的優(yōu)先列表中設(shè)置設(shè)備滋戳。
還要注意钻蔑,對于具有Pascal架構(gòu)及更高版本(具有6和更高主版本號的計算能力)的設(shè)備,存在對Compute Preemption的支持奸鸯。 這樣一來咪笑,就可以以指令級的粒度來搶占計算任務(wù),而不是像以前的Maxwell和Kepler GPU架構(gòu)那樣以線程塊的粒度來搶占先機娄涩,其好處是可以防止內(nèi)核運行時間長的應(yīng)用壟斷系統(tǒng)或?qū)е孪到y(tǒng)超時窗怒。 但是,將存在與計算搶占相關(guān)的上下文切換開銷蓄拣,該開銷在存在支持的那些設(shè)備上自動啟用扬虚。 具有屬性cudaDevAttrComputePreemptionSupported的單個屬性查詢函數(shù)cudaDeviceGetAttribute()可用于確定使用中的設(shè)備是否支持Compute Preemption。 希望避免與不同進程相關(guān)聯(lián)的上下文切換開銷的用戶可以通過選擇獨占進程模式來確保GPU上只有一個進程處于活動狀態(tài)球恤。
應(yīng)用程序可以通過檢查computeMode設(shè)備屬性來查詢設(shè)備的計算模式(請參閱設(shè)備枚舉)辜昵。