Re: [問題] CUDA新手上路 平行度及硬體相關問題

作者: Lepton (輕子)   2016-11-29 00:37:23
※ 引述《tmbyksdG (雨神妹妹的男朋友)》之銘言:
: 開發平台(Platform): (Ex: Win10, Linux, ...)
: Linux上安裝CUDA環境 (CUDA版本為8.0 運算能力為3.7)(Tesla K80)
: 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
: NVCC
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 問題(Question):
: 硬體方面:
: 1.我執行deviceQuery偵測到2個device(device0:Tesla K80, device1:K80),估狗發現K80
: 是由兩個GK210核心所組成,那我偵測到的device是指有兩個K80(4個GK210)的意思嗎?
: 還是偵測到的兩個device其實就是GK210?
: 2.13個SMX,總共有2496個cores,所以我一次可以同時做運算的數量是否為2496個threads?
: 軟體方面:
: 我寫了一個64 * 64的矩陣乘法,我想測試不同的block & thread數量去做運算,哪個執
: 行時間會比較短,我試了兩種block的配置(thread數量剛好為4096,一個thread執行一
: 個輸出矩陣的一個element)。
: (1)dim3 dimBlock(32, 32);
: dim3 dimGrid(2, 2);
: 這個配置是以下附的程式碼配置,執行結果是正常的。
: (2)dim3 dimBlock(4, 128);
: dim3 dimGrid(1, 8);
: 換成這樣配置編譯之後,結果卻只有大約三分之一是正常的值,其餘卻都是0
: ,我的threadIdx.x & threadIdx.y都是由0-1023,請問這是發生了什麼錯誤嗎?
因為壓!即使你有兩張卡,你還是要設定你的程式是運行在哪張卡上!
預設是只在device0上運行,要做multi-GPU又是另一個世界
所以說壓不是兩張卡的資源可以合併使用壓,就先假裝只有一張卡就好了
然後押,建議還是先參考一下cuda的文件,一個block最多只有1024個thread可以活著
這跟卡上面有幾個核心沒太大關溪跟可以有幾個block同時執行比較有關西
剩下的block的排程跟配置問題沒有很明確的答案是怎樣,通常是多重效果混合
基本上壓都會用profiler去分析這樣設計會比較好
還有押4096對K80根本是塞牙縫等級的大小,少說也要10W個元素八
最後壓如板友說的建議先熟悉一下工具cuda-memckeck nvida-smi nvprof nvvp之類的

Links booklink

Contact Us: admin [ a t ] ucptt.com