gpt4 book ai didi

c++ - 使用类型为 'array' 的类成员

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:53 25 4
gpt4 key购买 nike

我知道这是一个简单的问题,但我一直找不到答案。

我想要一个管理大块内存的 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;
}
);
}
};

最佳答案

我想,你需要这里的模板:

template <std::size_t N> class MyClass {
concurrency::array<int,N> myGpuArray;
...
}

int main () {
MyClass<10> someName;
...
}

关于c++ - 使用类型为 'array' 的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com