Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cuda中运行零块_Cuda - Fatal编程技术网

在cuda中运行零块

在cuda中运行零块,cuda,Cuda,我有一个这样的循环: while ( ... ) { ... kernel<<<blocks, threads>>>( ... ); } while(…){ ... 仁(…); } 在某些迭代中,块或线程具有值0。当我使用它时,我的代码会运行。我的问题是,这是否被认为是一种不好的做法,以及是否存在任何其他不好的副作用。我通过简单地编写以下空内核来尝试零块内核调用 文件: #包括 __全局无效fg() { } int main() {

我有一个这样的循环:

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

在某些迭代中,
线程
具有值
0
。当我使用它时,我的代码会运行。我的问题是,这是否被认为是一种不好的做法,以及是否存在任何其他不好的副作用。

我通过简单地编写以下空内核来尝试零块内核调用

文件:

#包括
__全局无效fg()
{
} 
int main()
{   
fg();
}
我注意到的是,唯一的副作用是执行所需的时间

运行时间:

实际0.242s, 用户0m0.004s, 系统0.148s

当我使用内核调用运行同一个文件时,时间开销的副作用会减少

运行时间:

实际0.003s, 用户0.000s, 系统0m0.000s


这种副作用是由于内核对零块的过度调用而产生的。

这是一种不好的做法,因为它会干扰

如果您进行了正确的错误检查,那么块或网格维度的所有零值的内核启动将抛出一个错误

出于各种原因,最好编写无错误的程序


相反,在这些情况下包括一个测试,并在维度为零时跳过内核启动。通过不发出虚假的内核启动请求,C代码中的小开销将被减少的API开销所抵消。

我认为这不会对程序造成开销,因为如果指定0个线程,内核将不会启动。
#include<stdio.h>

__global__ void fg()
{

} 
int main()
{   
 fg<<<0,1>>>();
}