我知道這是一個簡單的問題,但我一直未能找到答案。使用類型爲'array'的類成員
我想要一個C++類來管理大塊內存,當調用某個類方法時,內存在GPU中經常處理。類構造函數被傳遞給數組的大小,並且在構造之後,數組大小永遠不會改變。執行parallel_for_each的方法在不需要時不應浪費處理器週期或內存。
我該怎麼做?
我不能創建一個concurrency ::數組作爲類成員,因爲我需要知道數組在創建之前有多大。我不能有一個指向concurrency :: array的成員(然後在例如構造函數中用'new'來分配它),因爲我無法弄清楚如何將它指定給parallel_for_each。
在旁註中,我通常不需要在GPU和主機之間複製陣列,但是如果由於某種原因,我必須這樣做,只要它沒有定期完成即可。否則,會根據陣列的大小浪費處理器週期和內存。
下面是一個像我想要的東西的例子。當然,parallel_for_each捕獲的引用/指針是錯誤的。 (這是不檢查語法):
class MyClass
{
int* myHostArrayPtr;
concurrency::array<int,1>* myGpuArrayPtr;
MyClass(int size)
{
myHostArrayPtr = new int(size);
memset(myHostArrayPtr,0,size * sizeof(int));
myGpuArrayPtr = new concurrency::array<int,1>(size,myHostArrayPtr);
}
void ProcessInGpu()
{
parallel_for_each(
myGpuArrayPtr->extent,
[&myGpuArrayPtr](index<1> i) restrict(amp)
{
myGpuArray[i]+=14;
}
);
}
};
那麼,這仍然是一個硬編碼數組大小,因爲模板參數必須是常量。 – Digiproc