본문 바로가기

Programming/NEON

[NEON] 함수 정리 (로드 함수, 저장 함수)

단일 로드 함수

일반 로드 함수

uint16x8_t = r = vld1q_u16(__transfersize(8) uint16_t const *ptr)

메모리 배열에서 벡터로 데이터를 가져온다. (메모리 배열 요소와 벡터의 레인 크기가 같아야 한다)


레인 로드 함수

uint16x8_t r = 

    vld1q_lane_u16(__transfersize(1) uint16_t const *ptr, uint16x8_t a, __constrange(0, 7) int nlane)

메모리의 값을 벡터의 특정 레인으로 가져온다.(ptr 메모리 변수에서 nlane번쨰 값을 a로 변환)


브로드캐스트 로드 함수

uint16x8_t q = vld1q_dup_u16(__transfersize(1) uint16_t const *ptr)

벡터의 모든 레인을 하나의 메모리 값으로 설정한다.(q레인에 ptr값을 대입)

브로드캐스트 로드 함수는 벡터의 레인을 0으로 초기화 하거나, 특정 값으로 초기화 할때 많이 사용하는 유용한 함수이다.


복수 로드 함수

일반 로드 함수

uint16x8x2_t r = vld2q_u16(__transfersize(16) uint16_t const *ptr)

복수 벡터의 일반 로드 함수는 단일 벡터의 일반 로드 함수와는 조금 다르게 동작한다.

배열을 기준으로 0, 2, 4, 6, 8, 10, 12, 14 요소의 값은 val[0] 레인에 저장되고, 1, 3, 5, 7, 9, 11, 13, 15 요소의 값은 val[1] 레인에 저장된다.

이처럼 저장되는 것을 인터리브(Interleave)라고하며, 인터리브는 이미지 데이터를 로드할 때 매우 유용하다.


레인 로드 함수

uint 16x8x2_t r = 

    vld2q_lane_u16(__transfersize(2) uint16_t const *ptr, uint16x8x2_t src, __constrange(0, 7) int lane)

복수 벡터의 특정 레인에 메모리 변수의 값을 대입한다.


브로드캐스트 로드 함수

uint16x4x2_t r = int16x4x2_t vld2_dup_u16(__transfersize(2) uint16_t const *ptr)

복수 벡터의 모든 레인에 하나의 메모리 변수값을 대입한다.


단일 저장 함수

일반 저장 함수

void vst1q_u16(__transfersize(8) uint16_t const *ptr, uint16x8_t r)

벡터 변수를 메모리 배열에 저장(메모리 배열과 벡터 변수의 크기는 같아야 한다)


레인 저장 함수

void vstl1q_lane_u16(__transfersize(1) uint8_t *ptr, uint8x16_t r, __constrange(0, 15) int nlane)

특정 레인의 값을 메모리 변수에 저장(r 벡터의 nlane 번째 레인 값을 ptr에 저장)


복수 저장 함수

일반 저장 함수

void vst2q_u16(__transfersize(16) uint16_t const *ptr, uint16x8x2_t q)

복수 벡터를 로드 했던 것을 거꾸 로 배열에 저장하므로 복수 벡터 변수를 저장한 배열의 순서가 엉키지 않고 출력된다.


레인 저장 함수

void vstl1q_lane_u16(__transfersize(1) uint8_t *ptr, uint8x16_t r, __constrange(0, 15) int nlane);

복수 벡터의 특정 레인 값을 메모리 변수에 저장

(r벡터의 nlane 번째 레인값을 ptr에 저장 - 복수 레인이므로 r[0],[1]의 레인값을 각각 ptr[0], ptr[1]에 저장)

'Programming > NEON' 카테고리의 다른 글

[NEON] 비트와 시프트 연산  (0) 2016.09.23
[NEON] 레인 설정과 조회  (0) 2016.09.23
[NEON 산술 연산과 확장  (0) 2016.09.23
[NEON] 벡터 자료형  (0) 2016.09.23
[NEON] 기본 개념  (0) 2016.09.23