2012-03-28 51 views
2

CUDA編程指南 4.1第B.10解釋說:CUDA線程是分時。這是什麼意思?

[...]由裝置採取完全 執行線程的時鐘週期的數目,[不同於]數時鐘週期的 設備實際花費執行的線程的指令。前者號碼 大於後者[0121]

我知道第一個是完成線程執行的掛鐘時間。第二次是第一次減去線程閒置的時間。當其指令需要等待從前面的指令(指令依賴性),或從存儲器等待操作數的值或在同步點等待結果的線程將處於閒置狀態。

該指南然後繼續說:

前者數大於後者,因爲線程切片時間 。

什麼是時間在這方面切片意思?說線程是時間片是什麼意思?

請注意,此術語不其他地方出現在指南中。 (請原諒我,如果我錯過了上下文中顯而易見的東西,我不是以英語爲母語的人。)

+0

時間切片可能指的是在這種情況下的流水線操作。 – talonmies 2012-03-28 09:35:05

+0

我檢查了2007年發佈的CUDA編程指南的1.0版本,並且出現了相同的措辭。但他們必須混合條款。我確定他們實際上的意思是上下文切換隱藏延遲,就像你在問題中所說的那樣。 – 2012-03-29 02:13:14

回答

0

時間在這種情況下切片也意味着preemption

你可以把一個時間片爲總的可用的執行時間一定百分比。

有效地將線按計劃將在一段時間內運行,但調度可能只給你一個更小的時間片,如果其他線程需要執行。

+0

您真的建議* CUDA *(所以NVIDIA GPU SM)調度程序包含搶佔?你能提供一個鏈接或來源證實這一點? – talonmies 2012-03-28 09:36:36

+0

我對CUDA的細節並不熟悉,我正在從更一般的目的出發回答。但是,閱讀[OpenCL編程指南(PDF)](http://developer.download.nvidia.com/compute/DevZone/docs/html/OpenCL/doc/OpenCL_Programming_Guide.pdf)第3.2.3節,第27頁似乎表明所以。 – 2012-03-28 10:32:24

+0

對於CUDA的warp調度程序,在技術上可能並不是正確的字眼,但它是某種任務切換。 – 2012-03-28 10:34:43

0

當多個線程正在運行並且他們必須共享一個處理單元時,通常處理的方式是每個線程都有一個固定的最大時間段來運行(您的時間片),然後它被搶佔,另一個線程運行一段時間。所以,如果你的線程不能在一個時間片完成工作,那麼它可能不得不等待,直到它再次輪到。多久即依賴於並行線程,他們在做什麼,調度是如何實現和處理資源是可用的數量。在此上下文中

1

時間分片是指多個經紗上的多處理器(SM),並且所述經絲SM作爲繼續執行開關之間以隱藏延遲運行的事實。這與傳統CPU線程中的搶佔不一樣;也不像流水線一樣。

如果你有這樣的代碼:

if (threadIdx.x == 0 && blockIdx.x == 0) x = clock(); 

// other work done by all threads 

if (threadIdx.x == 0 && blockIdx.x == 0) y = clock(); 

如果有一個以上經對SM運行,那麼y-x值將在線程0(花在執行比實際時間大== warp 0)。這是線程0不必等待結果從指令或內存訪問的,只是因爲沒有,也由於花費的時間執行其它的經線。

編程指南中這句話的要點是使用clock()來做絕對時序或延遲測量是很棘手的。