[英]Running zero blocks in cuda
我有這樣一個循環:
while ( ... ) {
...
kernel<<<blocks, threads>>>( ... );
}
在某些迭代中, blocks
或threads
值為0
。 當我使用此代碼時,我的代碼將運行。 我的問題是這是否被視為不良做法,以及是否還有其他不良副作用。
這是不好的做法,因為它會干擾正確的CUDA錯誤檢查 。
如果進行正確的錯誤檢查,則對於塊或網格尺寸具有全零值的內核啟動將引發錯誤。
出於各種原因,最好編寫無錯誤的程序。
相反,請針對這些情況進行測試,並在尺寸為零時跳過內核啟動。 通過不發出虛假的內核啟動請求,用C代碼完成的少量開銷將被減少的API開銷所抵消。
我已經嘗試通過簡單地編寫以下空內核來嘗試零塊內核調用。
文件:
#include<stdio.h>
__global__ void fg()
{
}
int main()
{
fg<<<0,1>>>();
}
我注意到的唯一副作用是執行所需的時間。
運行 :
實數0m0.242s,用戶0m0.004s,sys 0m0.148s。
當我使用內核調用運行同一文件時,注釋了時間開銷的副作用減少了。
運行:
真實0m0.003s,用戶0m0.000s,sys 0m0.000s。
產生這種副作用的原因是內核調用了零個塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.