我有以下问题:
我有一个执行非常基本操作的代码。我正在传递一个指向 concurrency::array_view 的指针,因为我想更早地存储这些值以避免在使用多线程的函数中出现瓶颈。问题是以下构造无法编译:
parallel_for_each((*pixels).extent, [=](concurrency::index<2> idx) restrict(amp)
{
int row=idx[0];
int col=idx[1];
(*pixels)(row, col) = (*pixels)(row, col) * (*taps)(row, col); //this is the problematic place
});
有人知道如何解决这个案子吗?我真的需要在运行该方法之前准备数据,所以这是这样做的唯一方法,因为我不能花时间在 RAM 和加速器的内存之间复制数据。
//编辑:
在解决了头文件的一些问题后,我遇到了以下问题:
parallel_for_each((*pixels).extent, [=](concurrency::index<2> idx) restrict(amp)
{
int row=idx[0];
int col=idx[1];
});
上面的代码不起作用(它给出了异常)。有什么方法可以更早地准备数据,例如类的构造函数可以处理一次复制它吗?我真的需要在我的头文件中有一个指向 array_view 的指针,并在构造函数中初始化它,如下所示:
在 cci_subset.h 中:
concurrency::array_view<float, 2> *pixels, *taps;
在subset.cpp中:
concurrency::array_view<float, 2> pixels(4, 4, pixel_array);
...
concurrency::array_view<float, 2> taps(4, 4, myTap4Kernel_array);
//编辑2:
我发现parallel_for_each的参数只能按值传递。这就是为什么在初始化类或将一些参数(即图像数据)传递给类时,我仍在寻找一种将值从 CPU 复制到 GPU 的方法。