2013-05-07 43 views
0

如果我在矩陣M(例如M[i, j] *= (1 - M[i, j]))上執行逐個元素的操作,爲每個元素(i, j)啓動線程是否正常?我只關心啓動線程的開銷超過了實現的並行性。如果內核太短會否影響性能?

+0

我以爲GPU線程是不是真的線程 – 2013-05-07 21:07:02

+0

你基準它卻很有關? – 2013-05-07 22:00:46

+0

Cuda最佳實踐指南是一個很好的閱讀材料。通過回答alrikai是不錯的,這一切都取決於應用程序類型,使用的寄存器數量,內存延遲等。 – rank1 2013-05-08 12:04:48

回答

1

如果可能的話,嘗試每個線程做更多的工作通常是一個更好的主意,目標是具有指令級並行性。如果一個給定的線程執行多個獨立的操作,那麼這些指令可以被流水線化並執行而不會停頓,這將增加你的算術throuput。相反,如果每個線程都在做一件(微不足道的)工作,那麼就沒有機會進行任何類型的指令級並行,也沒有機會隱藏任何內存延遲時間。

此外,可用的寄存器數量有限,因此您啓動的線程越多,每個線程可用的寄存器數量就越少。我對開普勒卡片一無所知,但回到費米卡片生產階段,寄存器的共享內存帶寬約爲8倍,所以儘可能使用寄存器非常重要(同樣,我沒有開普勒卡,所以我不用不知道這是否已經改變了)。

雖然這是一個有點過時,建議詳細here仍然