【发布时间】:2016-12-29 18:19:18
【问题描述】:
我知道这是一个简单的问题,但我一直无法找到答案。
我想要一个管理大块内存的 C++ 类,当调用某个类方法时,GPU 会定期处理内存。类构造函数传递数组的大小,构造后数组大小永远不会改变。执行 parallel_for_each 的方法不应在不需要时浪费处理器周期或内存。
我该怎么做?
我无法将 concurrency::array 创建为类成员,因为我需要在创建数组之前知道数组的大小。我不能有一个指向 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;
}
);
}
};
【问题讨论】: