array 클래스
데이터를 가속기로 이동하는 데 사용되는 데이터 컨테이너를 나타냅니다.
구문
template <typename value_type, int _Rank>
friend class array;
매개 변수
value_type
데이터의 요소 형식입니다.
_Rank
배열의 순위입니다.
멤버
공용 생성자
속성 | 설명 |
---|---|
array 생성자 | array 클래스의 새 인스턴스를 초기화합니다. |
~array 소멸자 | 개체를 array 삭제합니다. |
공용 메서드
이름 | 설명 |
---|---|
copy_to | 배열의 내용을 다른 배열에 복사합니다. |
data | 배열의 원시 데이터에 대한 포인터를 반환합니다. |
get_accelerator_view | 배열이 할당된 위치를 나타내는 accelerator_view 개체를 반환합니다. 이 속성은 CPU에서만 액세스할 수 있습니다. |
get_associated_accelerator_view | 개체를 인스턴스화하기 위해 스테이징 생성자를 호출할 때 매개 변수로 전달되는 두 번째 accelerator_view 개체를 array 가져옵니다. |
get_cpu_access_type | 배열의 access_type 반환합니다. 이 메서드는 CPU에서만 액세스할 수 있습니다. |
get_extent | 배열의 익스텐트 개체를 반환합니다. |
reinterpret_as | 개체의 모든 요소를 포함하는 1차원 배열을 array 반환합니다. |
section | 지정된 원점 및 필요에 따라 지정된 익스텐트를 가진 개체의 array 하위 섹션을 반환합니다. |
view_as | 개체에서 생성된 array_view 개체를 array 반환합니다. |
Public 연산자
속성 | 설명 |
---|---|
operator std::vector<value_type> |
배열을 std::vector 개체로 암시적으로 변환하는 데 사용됩니다copy(*this, vector) . |
operator() | 매개 변수로 지정된 요소 값을 반환합니다. |
operator[] | 지정된 인덱스에있는 요소를 반환합니다. |
operator= | 지정된 array 개체의 콘텐츠를 이 항목으로 복사합니다. |
공용 상수
속성 | 설명 |
---|---|
rank 상수 | 배열의 순위를 저장합니다. |
공용 데이터 멤버
속성 | 설명 |
---|---|
accelerator_view | 배열이 할당된 위치를 나타내는 accelerator_view 개체를 가져옵니다. 이 속성은 CPU에서만 액세스할 수 있습니다. |
associated_accelerator_view | 개체를 인스턴스화하기 위해 스테이징 생성자를 호출할 때 매개 변수로 전달되는 두 번째 accelerator_view 개체를 array 가져옵니다. |
cpu_access_type | CPU가 배열의 스토리지에 액세스하는 방법을 나타내는 access_type 가져옵니다. |
extent | 배열의 모양을 정의하는 익스텐션을 가져옵니다. |
설명
이 형식 array<T,N>
은 액셀러레이터 또는 CPU와 같은 특정 위치에 있는 조밀하고 일반적인(들쭉날쭉하지 않은) N차원 배열을 나타냅니다. 배열에 있는 요소의 데이터 형식은 T
대상 가속기와 호환되는 형식이어야 합니다. 배열의 rank( N
배열은 정적으로 결정되고 형식의 일부임)이지만 배열의 범위는 런타임에 의해 결정되며 클래스 extent<N>
를 사용하여 표현됩니다.
일부 기능은 순위 1, 2 및 3이 있는 개체용 array
으로 특수화되어 있지만 배열에는 차원이 있을 수 있습니다. 차원 인수를 생략하면 기본값은 1입니다.
배열 데이터는 메모리에 연속적으로 배치됩니다. 중요도가 가장 낮은 차원의 요소가 메모리에 인접합니다.
배열이 다른 배열에 복사될 때 전체 복사가 수행되므로 배열은 논리적으로 값 형식으로 간주됩니다. 두 배열은 동일한 데이터를 가리키지 않습니다.
이 array<T,N>
형식은 다음과 같은 여러 시나리오에서 사용됩니다.
가속기에서 계산에 사용할 수 있는 데이터 컨테이너입니다.
호스트 CPU에 메모리를 보관하는 데이터 컨테이너로서 다른 배열과 복사하는 데 사용할 수 있습니다.
호스트-디바이스 복사본에서 빠른 중간자 역할을 하는 스테이징 개체입니다.
상속 계층 구조
array
요구 사항
헤더: amp.h
네임스페이스: 동시성
~배열
개체를 array
삭제합니다.
~array() restrict(cpu);
accelerator_view
배열이 할당된 위치를 나타내는 accelerator_view 개체를 가져옵니다. 이 속성은 CPU에서만 액세스할 수 있습니다.
__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;
배열
배열 클래스의 새 인스턴스를 초기화합니다. 에 대한 array<T,N>
기본 생성자가 없습니다. 모든 생성자는 CPU에서만 실행됩니다. Direct3D 대상에서는 실행할 수 없습니다.
explicit array(
const Concurrency::extent<_Rank>& _Extent) restrict(cpu);
explicit array(
int _E0) restrict(cpu);
explicit array(
int _E0,
int _E1) restrict(cpu);
explicit array(
int _E0,
int _E1,
int _E2) restrict(cpu);
array(
const Concurrency::extent<_Rank>& _Extent,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
int _E0,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
int _E0,
int _E1,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
int _E0,
int _E1,
int _E2,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
const Concurrency::extent<_Rank>& _Extent,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
array(
int _E0,
accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
array(
int _E0,
int _E1,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
array(
int _E0,
int _E1,
int _E2,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av,
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0, _InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1, _InputIterator _Src_first, _InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1, _InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2, _InputIterator _Src_first, _InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2, _InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
explicit array(
const array_view<const value_type, _Rank>& _Src) restrict(cpu);
array(
const array_view<const value_type, _Rank>& _Src,
accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
const array_view<const value_type, _Rank>& _Src,
accelerator_view _Av,
accelerator_view _Associated_Av) restrict(cpu);
array(const array& _Other) restrict(cpu);
array(array&& _Other) restrict(cpu);
매개 변수
_Associated_Av
배열의 기본 대상 위치를 지정하는 accelerator_view.
_Av
배열의 위치를 지정하는 accelerator_view 개체입니다.
_Cpu_access_type
CPU의 배열에 대해 원하는 access_type . 이 매개 변수는 CPU access_type
결정을 런타임에 그대로 두는 기본값 access_type_auto
을 둡니다. 배열의 실제 CPU access_type
는 메서드를 사용하여 get_cpu_access_type
쿼리할 수 있습니다.
_범위
배열의 각 차원에 있는 익스텐트입니다.
_E0
이 섹션의 범위에서 가장 중요한 구성 요소입니다.
_E1
이 섹션의 범위에서 가장 중요한 다음 구성 요소입니다.
_E2
이 섹션의 익스텐트 중 가장 중요하지 않은 구성 요소입니다.
_InputIterator
입력 반복기의 형식입니다.
_Src
복사할 개체입니다.
_Src_first
원본 컨테이너에 대한 시작 반복기입니다.
_Src_last
원본 컨테이너로의 끝 반복기입니다.
_Other
기타 데이터 원본입니다.
_Rank
섹션의 순위입니다.
value_type
복사되는 요소의 데이터 형식입니다.
associated_accelerator_view
개체를 인스턴스화하기 위해 스테이징 생성자를 호출할 때 매개 변수로 전달되는 두 번째 accelerator_view 개체를 array
가져옵니다.
__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;
copy_to
내용을 다른 array
에 복사합니다array
.
void copy_to(
array<value_type, _Rank>& _Dest) const ;
void copy_to(
array_view<value_type, _Rank>& _Dest) const ;
매개 변수
_Dest
복사할 array_view 개체입니다.
cpu_access_type
이 배열에 허용되는 CPU access_type 가져옵니다.
__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;
데이터
의 원시 데이터에 대한 포인터를 반환합니다 array
.
value_type* data() restrict(amp, cpu);
const value_type* data() const restrict(amp, cpu);
Return Value
배열의 원시 데이터에 대한 포인터입니다.
extent
의 모양을 정의하는 익 스텐트 개체를 array
가져옵니다.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_accelerator_view
개체가 할당된 위치를 나타내는 accelerator_view 개체를 array
반환합니다. 이 속성은 CPU에서만 액세스할 수 있습니다.
Concurrency::accelerator_view get_accelerator_view() const;
Return Value
accelerator_view
개체가 할당된 array
위치를 나타내는 개체입니다.
get_associated_accelerator_view
개체를 인스턴스화하기 위해 스테이징 생성자를 호출할 때 매개 변수로 전달되는 두 번째 accelerator_view 개체를 array
가져옵니다.
Concurrency::accelerator_view get_associated_accelerator_view() const ;
Return Value
스테이징 생성자에 전달된 두 번째 accelerator_view 개체입니다.
get_cpu_access_type
이 배열에 허용되는 CPU access_type 반환합니다.
access_type get_cpu_access_type() const restrict(cpu);
Return Value
get_extent
의 익스텐 트 개체를 반환합니다 array
.
Concurrency::extent<_Rank> get_extent() const restrict(amp,cpu);
Return Value
extent
의 개체입니다array
.
operator std::vector<value_type>
배열을 std::vector 개체로 암시적으로 변환하는 데 사용됩니다 copy(*this, vector)
.
operator std::vector<value_type>() const restrict(cpu);
매개 변수
value_type
벡터 요소의 데이터 형식입니다.
Return Value
배열에 포함된 데이터의 복사본을 포함하는 형식 vector<T>
의 개체입니다.
operator()
매개 변수로 지정된 요소 값을 반환합니다.
value_type& operator() (const index<_Rank>& _Index) restrict(amp,cpu);
const value_type& operator() (const index<_Rank>& _Index) cons t restrict(amp,cpu);
value_type& operator() (int _I0, int _I1) restrict(amp,cpu);
const value_type& operator() (int _I0, int _I1) const restrict(amp,cpu) ;
value_type& operator() (int _I0, int _I1, int _I2) restrict(amp,cpu);
const value_type& operator() (int _I0, int _I1, int _I2) const restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator()(int _I) restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator()(int _I) const restrict(amp,cpu);
매개 변수
_Index
요소의 위치입니다.
_I0
이 섹션의 원점에서 가장 중요한 구성 요소입니다.
_I1
이 섹션의 원점에서 가장 중요한 다음 구성 요소입니다.
_I2
이 섹션의 원점 중 가장 중요하지 않은 구성 요소입니다.
_I
요소의 위치입니다.
Return Value
매개 변수로 지정된 요소 값입니다.
operator[]
지정된 인덱스에있는 요소를 반환합니다.
value_type& operator[](const index<_Rank>& _Index) restrict(amp,cpu);
const value_type& operator[]
(const index<_Rank>& _Index) const restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator[](int _i) restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[](int _i) const restrict(amp,cpu);
매개 변수
_Index
인덱스입니다.
_I
인덱스입니다.
Return Value
지정된 인덱스에있는 요소입니다.
operator=
지정된 array
개체의 내용을 복사합니다.
array& operator= (const array& _Other) restrict(cpu);
array& operator= (array&& _Other) restrict(cpu);
array& operator= (
const array_view<const value_type, _Rank>& _Src) restrict(cpu);
매개 변수
_Other
array
복사할 개체입니다.
_Src
array
복사할 개체입니다.
Return Value
이 array
개체에 대한 참조입니다.
rank
의 순위를 저장합니다 array
.
static const int rank = _Rank;
reinterpret_as
필요에 따라 원본 배열과 다른 값 형식을 가질 수 있는 1차원 array_view 통해 배열을 다시 해석합니다.
구문
template <typename _Value_type2>
array_view<_Value_type2,1> reinterpret_as() restrict(amp,cpu);
template <typename _Value_type2>
array_view<const _Value_type2, 1> reinterpret_as() const restrict(amp,cpu);
매개 변수
_Value_type2
반환된 데이터의 데이터 형식입니다.
Return Value
배열을 기반으로 하는 array_view 또는 const array_view 개체이며, 요소 형식이 T에서 ElementType으로 재해석되고 순위가 N에서 1로 줄어듭니다.
설명
경우에 따라 원본 배열과 다른 값 형식을 가진 선형 1차원 배열인 것처럼 다차원 배열을 보는 것이 편리합니다. 이 메서드를 사용하여 이 작업을 수행할 수 있습니다. 다른 값 형식을 사용하여 배열 개체를 재해석하는 것은 안전하지 않을 수 있습니다. 이 기능을 신중하게 사용하는 것이 좋습니다.
다음 코드에 예가 나와 있습니다.
struct RGB { float r; float g; float b; };
array<RGB,3> a = ...;
array_view<float,1> v = a.reinterpret_as<float>();
assert(v.extent == 3*a.extent);
section
지정된 원점 및 필요에 따라 지정된 익스텐트를 가진 개체의 array
하위 섹션을 반환합니다.
array_view<value_type,_Rank> section(
const Concurrency::index<_Rank>& _Section_origin,
const Concurrency::extent<_Rank>& _Section_extent) restrict(amp,cpu);
array_view<const value_type,_Rank> section(
const Concurrency::index<_Rank>& _Section_origin,
const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);
array_view<value_type,_Rank> section(
const Concurrency::extent<_Rank>& _Ext) restrict(amp,cpu);
array_view<const value_type,_Rank> section(
const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);
array_view<value_type,_Rank> section(
const index<_Rank>& _Idx) restrict(amp,cpu);
array_view<const value_type,_Rank> section(
const index<_Rank>& _Idx) const restrict(amp,cpu);
array_view<value_type,1> section(
int _I0,
int _E0) restrict(amp,cpu);
array_view<const value_type,1> section(
int _I0,
int _E0) const restrict(amp,cpu);
array_view<value_type,2> section(
int _I0,
int _I1,
int _E0,
int _E1) restrict(amp,cpu);
array_view<const value_type,2> section(
int _I0,
int _I1,
int _E0,
int _E1) const restrict(amp,cpu);
array_view<value_type,3> section(
int _I0,
int _I1,
int _I2,
int _E0,
int _E1,
int _E2) restrict(amp,cpu);
array_view<const value_type,3> section(
int _I0,
int _I1,
int _I2,
int _E0,
int _E1,
int _E2) const restrict(amp,cpu);
매개 변수
_E0
이 섹션의 범위에서 가장 중요한 구성 요소입니다.
_E1
이 섹션의 범위에서 가장 중요한 다음 구성 요소입니다.
_E2
이 섹션의 익스텐트 중 가장 중요하지 않은 구성 요소입니다.
_내선
구역의 익스텐트 범위를 지정하는 익스텐트 개체입니다. 원본은 0입니다.
_Idx
원본의 위치를 지정하는 인덱스 개체입니다. 하위 섹션은 나머지 범위입니다.
_I0
이 섹션의 원점에서 가장 중요한 구성 요소입니다.
_I1
이 섹션의 원점에서 가장 중요한 다음 구성 요소입니다.
_I2
이 섹션의 원점 중 가장 중요하지 않은 구성 요소입니다.
_Rank
섹션의 순위입니다.
_Section_extent
구역의 익스텐트 범위를 지정하는 익스텐트 개체입니다.
_Section_origin
원본의 위치를 지정하는 인덱스 개체입니다.
value_type
복사되는 요소의 데이터 형식입니다.
Return Value
지정된 원점 및 필요에 따라 지정된 익스텐트를 가진 개체의 array
하위 섹션을 반환합니다. 개체만 index
지정하면 하위 섹션에는 개체의 요소 인덱스보다 큰 인덱스가 있는 연결된 그리드의 모든 요소가 index
포함됩니다.
view_as
이 배열 을 다른 순위의 array_view 다시 해석합니다.
template <int _New_rank>
array_view<value_type,_New_rank> view_as(
const Concurrency::extent<_New_rank>& _View_extent) restrict(amp,cpu);
template <int _New_rank>
array_view<const value_type,_New_rank> view_as(
const Concurrency::extent<_New_rank>& _View_extent) const restrict(amp,cpu);
매개 변수
_New_rank
매개 변수로 전달된 개체의 extent
순위입니다.
_View_extent
새 array_view 개체를 생성하는 데 사용되는 익스텐트입니다.
value_type
원래 array
개체와 반환 array_view
된 개체 모두에 있는 요소의 데이터 형식입니다.
Return Value
생성되는 array_view 개체입니다.