假设我有一个Concurrency::array
,其大小我只知道在运行时,这个大小可以是零:如果我需要零大小的阵列,我该怎么办?
using namespace Conurrency;
array<int> myArray (datasource); // can't do this if datasource is zero-sized!
parallel_for_each(someExtent,[&](index<1> idx) restrict(amp)
{
// if the size of myArray is 0, I won't use it!
}
在主机上这个问题是微不足道的;你只需声明一个零大小的向量,任何基于范围的循环都会简单地忽略它。在C++ AMP中,你必须为每个数组设计一个单独的内核函数,这个函数可能是空值......当然,还有更好的方法,为什么我们不能只有零大小的数组呢?
程序员如何避免这类问题?
我目前避免它通过执行以下,其中我不要骄傲,
using namespace Conurrency;
if (datasource.size() == 0) datasource.push_back(0); // assuming datasource is a vector
array<int> myArray (datasource); // can't do this if datasource is zero-sized!
parallel_for_each(someExtent,[&](index<1> idx) restrict(amp)
{
// if the size of myArray is 0, I won't use it!
}
是的,这就是我正在做的事情,并不为此感到自豪,但如果这是需要做的事情,我会做;我真的不喜欢讨论人为的语言限制... – arman