Re: [問題] CUDA 觀念及 矩陣相乘程式問題

看板C_and_CPP (C/C++)作者 (tk)時間13年前 (2012/07/27 12:25), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串6/6 (看更多)
: 1. 一個block最多只能512個thread : 所以如果要更多thread 需要用多block : 可是 grid呢? 為何還需要分grid? 設計就是如此, 可以想像成3維陣列 [][][] 不過平常用1個grid就夠了,有需要才需要增加grid : 2. CUDA 是 SIMT 單指令多執行緒 : 是一個thread 對應 一個指令如 + or * ? : 可是如果我要同時有乘和加 我要如何寫? : 直接寫+和* compiler 會幫我分配給thread? SIMT 就是你寫了一段code,所有thread都會照著做 而threadIdx.x ..... 你可以理解成增加一些限制,或是讓特定thread做其它的事 EX: { int abc = 1; if(threadIdx.x != 0) abc = 0; } 如果你有500個thread 只有一個thread的abc是1 其它thread的abc都會是0 : 4. 關於硬體上的SP和SM : 硬體和軟體定義上 : 一個SP同時處理一個thread SP、SM、warp 等需要考慮優化時在學也不遲,以免搞混 : 6. 看到書上有時候用CUDA_SAFT_CALL(cudaMemcpy) 或改成 c....(cudaMalloc(..)) : 這種CUDA_SAFT_CALL有加和沒加差哪呢 感覺好像都一樣 印像中CUDA_SAFT_CALL是用define寫的 所以你應該可以看到它是在做什麼 依照經驗,這種類型的coding style 通常是做一些nullptr的檢查 : 7. share memory時 : extern __shared__ float shared[]; : 和 __shared__ float shared[]; : 差別? : 書上是說有加extern 表將變數宣稱為外部陣列 這是啥意思? : 另share memory 可以動態宣告嗎?? 我看都是靜態的 extern並非是CUDA獨有的東西 它是一種可以增加"該變數"所能影響的範圍 google一下應該就會有詳細說明 : 8. 假設我要openCV和CUDA結合使用 : 是寫在.cu 還是 .cpp呢? : 假設我想要讀影像後傳到cuda運算 : 直接用cudaMencpy() 將 Image->data傳過去就好!? 只要compiler能認識,寫哪都不是問題 : 9. 如何分析我到底要幾個grid block thread? : 這邊不是很懂 : 目前是超過512就切block...... 這要問你自己到底需要什麼 以我來說 通常都是會先寫一個可以正常跑的版本 之後才去考慮怎樣切才是最佳解 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.30.1 ※ 編輯: a5480277 來自: 203.67.30.1 (07/27 12:26)

07/27 13:24, , 1F
所以如果我寫for 每個thread都會執行那個for?
07/27 13:24, 1F

07/27 13:25, , 2F
還是for 會拆成每個執行緒去做?
07/27 13:25, 2F

07/27 17:47, , 3F
每個THREAD都會執行那個FOR
07/27 17:47, 3F

07/29 00:18, , 4F
3Q~~
07/29 00:18, 4F
文章代碼(AID): #1G4XWkiH (C_and_CPP)
文章代碼(AID): #1G4XWkiH (C_and_CPP)