Re: [問題] CUDA 觀念及 矩陣相乘程式問題
: 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
07/27 13:24, 1F
→
07/27 13:25, , 2F
07/27 13:25, 2F
→
07/27 17:47, , 3F
07/27 17:47, 3F
推
07/29 00:18, , 4F
07/29 00:18, 4F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章