面經筆記 cuda gpu概念

2021-08-03 19:18:17 字數 1447 閱讀 4640

與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的訪問位址很近的話,那麼效能更高。

面經筆記 管道

匿名管道只能實現本機機器上兩個程序的通訊,通常用來在父子程序間通訊,不能實現跨網路的通訊。下面只貼出核心 父程序 void cparentview onpipecreate startupinfo sui 建立新程序所需資訊結構體 process information pi 程序資訊結構體 zer...

面經筆記 STL

空間配置器 為什麼不說allocator是記憶體配置器 空間不一定是記憶體,空間也可以是磁碟或其他儲存介質,你可以寫乙個allocator直接向硬碟取空間。sgi stl的配置器名為alloc,是預設的空間配置器。雖然也定義了乙個符合部分標準的allocator配置器,但只是把c 中new和dele...

面經 葫蘆面經

1 給定乙個n位數,例如12345,從裡面去掉k個數字,得到乙個n k位的數,例如去掉2,4,得到135,去掉1,5,得到234。設計演算法,求出所有得到的 n k位數裡面最小的那乙個 2 找明星 n個人中,只有乙個明星 明星不認識其他所有的人,而其他人 都認識明星,這些人中也可能相互認識。你每次只...