Multithreading C+中一维和二维数组上运算符[]的行为+;安培。

Multithreading C+中一维和二维数组上运算符[]的行为+;安培。,multithreading,multidimensional-array,concurrency,parallel-processing,c++-amp,Multithreading,Multidimensional Array,Concurrency,Parallel Processing,C++ Amp,我在用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()); concurrency::数组img_amp_数据(11,11,image_da

我在用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()); 
concurrency::数组img_amp_数据(11,11,image_data.begin());
并发::数组a_amp_结果(121,空的_vec.begin());
当我想访问其中第一个的元素时

std::cout << img_amp_data[0][0] << std::endl; 

std::cout您遇到了语法怪癖

对于秩大于1的
数组
,带有整数参数的
运算符[]
返回一个
数组视图
,该视图引用原始
数组
的切片。随后的
操作符[]
对主机上允许的
array\u视图
对象进行操作,在您的情况下,在返回对元素的引用之前会导致隐式数据复制

对于具有整数参数的秩1
运算符[]
数组
,或对于任何
数组
具有
索引
参数的
运算符[]
,返回对元素的引用。仅在
阵列
驻留的位置上才允许使用这两种方法-默认情况下,这是默认的
加速器视图
,但是您也可以请求在CPU内存中创建
阵列

除非您希望对主机和
加速器视图
之间的数据移动进行细粒度控制,否则建议普遍使用
数组视图
类型

std::cout << a_amp_result[0] << std::endl;