假設我有一個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