gpu interview

opengpu
http://www.opengpu.org/forum.php?mod=viewthread&tid=968
1. 利用圖形API 和CUDA進行GPU通用計算的性能區別?

  1. GPU的指令和CPU指令的最大區別?

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

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

  4. GPU有通過成千上萬線程來隱藏訪問延遲,CPU也有隱藏訪問延遲的優化,最大的區別是什麼?

1.利用圖形API需要把問題轉化爲圖形學的變化,需要懂得圖形學的定義,比較麻煩,需要理解Cg,HLSL這樣的圖新編程語言,比較麻煩;而CUDA是C語言的擴展,比較適合做通用計算,不需要把問題轉化爲圖形學的問題。

  1. CPU需要運行OS,不但要處理中斷,還要負責存儲器空間分配與回收。爲了OS的安全起見,都要專用的Kernel Mode以及Privilege Register的支持,所以CPU指令有很多都是操作特權寄存器。GPU目前還做不到這一點。未來的LRB也許可以。

3.通過計算算法複雜度,可以得到理論的複雜度,然後根據warp的active情況,可以計算出來,一次啓動的warp有多少個,然後可以得到這個並行算法在實際的GPU上的運算時間多少。就是計算並行算法複雜度,然後“計算器”的個數~這裏需要轉化爲gpu的core,但是這裏不能簡單的轉化,如果再考慮一下每一條指令的執行的cycle的情況,和內存延遲的情況,那就更麻煩了……,其實計算也挺麻煩的……我懷疑問問題的這個兄弟,能計算出來不:)你可以問他一下,內存加載的時候的計算週期是都少,這裏其實還有硬件加速的情況~如果只有一個線程,也會有合併訪問~

4.GPU的缺點,a.精度問題,b.編程模式不太靈活,優化需要對硬件深入瞭解,c.內存訪問模型不太靈活;改進,1.增加內存訪問的靈活性,2.弱化編程模型,使得優化不再那麼麻煩;

5.CPU的線程切換開銷是昂貴的,一般都是需要1000cycle而gpu的線程切換隻有1個cycle,而在CPU上能同時active的線程數量是有限的core的個數,和GPU不是一個量級的;

兩者隱藏延遲技術的區別。從架構角度來看,CPU依靠Cache和Speculative Ex/Ld來隱藏延遲,而GPU是依靠TLP和Prefetch來隱藏延遲。(線程級並行、預讀取)

發佈了33 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章