簡體   English   中英

在CUDA中運行零塊

[英]Running zero blocks in cuda

我有這樣一個循環:

while ( ... ) {
    ...
    kernel<<<blocks, threads>>>( ... );
}

在某些迭代中, blocksthreads值為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM