cuda,GPU的一些概念(面試筆記)

2021-08-21 16:29:09 字數 1434 閱讀 3342

與cuda相關的幾個概念:thread,block,grid,warp,sp,sm。

sp: 小核(流處理器)最基本的處理單元,streaming processor 最後具體的指令和任務都是在sp上處理的。gpu進行平行計算,也就是很多個sp同時做處理

sm: 大核(流多處理器)多個sp加上其他的一些資源組成乙個sm, streaming multiprocessor. 其他資源也就是儲存資源,共享記憶體,寄儲器等。

warp:(執行緒束)gpu執行程式時的排程單位,一起執行。目前cuda的warp的大小為32,同在乙個warp的執行緒,以不同資料資源執行相同的指令。

grid、block、thread:在利用cuda進行程式設計時,乙個grid分為多個block,而乙個block分為多個thread.其中任務劃分到是否影響最後的執行效果。劃分的依據是任務特性和。

利用圖形api 和cuda進行gpu通用計算的效能區別?

利用圖形api需要把問題轉化為圖形學的變化;而cuda是c語言的擴充套件,比較適合做通用計算

gpu的指令和cpu指令的最大區別?

cpu需要執行os,不但要處理中斷,還要負責儲存器空間分配與**,cpu指令有很多都是操作特權暫存器;gpu目前還做不到這一點

你怎麼樣知道是否達到了gpu的理論加速倍數?怎麼計算?

通過成千上萬執行緒來隱藏訪問延遲

gpu架構的缺點?如果讓你設計,你會怎麼改進?

a.精度問題,b.程式設計模式不太靈活

gpu有通過成千上萬執行緒來隱藏訪問延遲,cpu也有隱藏訪問延遲的優化,最大的區別是什麼?

cpu的執行緒切換開銷是昂貴的,一般都是需要1000cycle而gpu的執行緒切換只有1個cycle

請你列舉出一些常用的優化方法

(執行緒束->執行緒塊)對於block和thread的分配問題,有這麼乙個技巧,每個block裡面的thread個數最好是32的倍數,因為,這樣可以讓執行緒束一起執行,計算效率更高,促進memory coalescing

( 執行緒塊 )乙個sm只會執行乙個block裡的warp,當該block裡warp執行完才會執行其他block裡的warp。進行劃分時,最好保證每個block裡的warp比較合理,那樣可以乙個sm可以交替執行裡面的warp,從而提高效率,此外,在分配block時,要根據gpu的sm個數,分配出合理的block數,讓gpu的sm都利用起來,提利用率。分配時,也要考慮到同乙個執行緒block的資源問題,不要出現對應的資源不夠。

(記憶體)共享記憶體的使用量也是影響occupancy的乙個重要因子,一塊大核擁有一塊共享記憶體。shared新增到變數宣告中,這將使這個變數駐留在共享記憶體中。在宣告共享記憶體變數後,執行緒塊中的每個執行緒都共享這塊記憶體,使得乙個執行緒塊中的多個執行緒能夠在計算上進行通訊和協作。

(記憶體)紋理快取是唯讀的記憶體,專門為記憶體訪問存在大量空間區域性性的設計,核函式需要特殊的函式告訴gpu讀取紋理記憶體而不是全域性記憶體。使用紋理記憶體,如果同乙個執行緒束內的thread的訪問位址很近的話,那麼效能更高。

一些常見的面試筆試題

問題1 構造和析構函式中的虛函式呼叫 答案 虛函式可以在建構函式和析構函式中呼叫,但虛函式此時是靜態繫結 而非動態繫結。問題2 c 中的異常可不可以是引用 答案 異常可以是引用,並且效率高。問題3 tcp狀態中的close wait是什麼狀態 答案 close wait狀態是被動關閉方的乙個狀態,此...

面試筆試遇到的一些題

sizeof 指標變數 大小為4個位元組 以32位計算機為例 也是,計算機位址32位,指標存的是記憶體位址,自然也要32位。堆和棧的區別 1 棧由程式自動分配,堆是程式設計師申請的,必須指明大小 2 程式結束,棧自動釋放,而堆還需要free或者delete,手動釋放 2 分配棧很快,只要剩餘空間足夠...

面試筆試中的一些知識點

1 new delete malloc free 記憶體洩漏是指堆記憶體 heap memory 的洩漏 memory leak 堆記憶體指程式從堆中分配的,大小任意的 記憶體塊的大小可以在程式執行期決定 使用完後必須顯式釋放的記憶體。應用程式一般使用malloc,realloc,new等函式從堆中...