gpt4 book ai didi

multithreading - C++ AMP中1D和2D数组上operator []的行为。

转载 作者:行者123 更新时间:2023-12-03 13:00:22 25 4
gpt4 key购买 nike

在C++ Amp中编写代码时,我遇到了一个非常奇怪的异常。我定义了两个concurrency::array对象,如下所示:

concurrency::array<float, 2> img_amp_data(11, 11, image_data.begin()); 
concurrency::array<float> a_amp_result(121, empty_vec.begin());

当我想访问第一个元素时
std::cout << img_amp_data[0][0] << std::endl; 

一切运行正常,但是当我想访问第二个
std::cout << a_amp_result[0] << std::endl; 

我收到以下异常:

Exception: (The array is not accessible on CPU)



这是很奇怪的情况,因为我可以访问2维以上的数组,并且只能访问1维数组吗?
有任何想法吗?

最佳答案

您正在遇到语法怪癖。

对于等级大于1的array,带有整数参数的operator[]返回引用原始array_view的切片的array。后续的operator[]array_view对象上运行,该对象在主机上允许使用-在您的情况下,在返回对该元素的引用之前会导致隐式数据副本。

对于具有整数参数的秩1的arrayoperator[]或对于任何operator[]的具有index参数的array,返回对该元素的引用。两者都只能在array所在的位置使用-默认情况下是默认的accelerator_view,但是您也可以请求在CPU内存中创建array

除非您希望对主机和accelerator_view之间的数据移动进行细粒度的控制,否则建议您普遍使用array_view类型。

关于multithreading - C++ AMP中1D和2D数组上operator []的行为。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147991/

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