[英]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.