假设我有一个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 中,您必须为每个可能为 null 大小的数组设计一个单独的内核函数……当然有更好的方法,为什么我们一开始就不能只使用零大小的数组?
程序员如何避免此类问题?
我目前正在通过执行以下操作来避免它,对此我并不感到自豪:
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!
}