Multithreading C+中一维和二维数组上运算符[]的行为+;安培。
我在用C++Amp编写代码时遇到了一个非常奇怪的异常。我定义了两个concurrency::array对象,如下所示: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
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;