我知道这是一个简单的问题,但我一直未能找到答案。使用类型为'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