기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하십니까?
ARM NEON을 이용하여 코드 최적화를 진행하는 도중에 난관에 부딪쳐서 문의드립니다.
우선 ARM NEON intrinsic function set을 이용하여 카메라로부터 YUV4:2:0 데이터를 받아
RGB24 데이터로 변환하여 프리뷰를 띄우는 과정은 테스트 완료 하였습니다.
테스트 결과 최적화를 더 수행해야 겠습니다만,
순수 NDK(c code)만 사용한 경우보다 디스플래이 실행속도가 약 1.7배정도 빨라지는 것을 확인하였습니다.
그런데 영상처리 분야에서는 LUT(LookUp table) 연산을 종종 사용하게 됩니다.
ARM NEON의 white paper를 보니 간접 주소 지정(LUT 연산), 즉 스캐터(scatter)와 수집(gather)을 할 수 없다고 나와 있습니다.
아래 코드를 보시면 스캐터와 수집에 대한 이해가 빠르실 것 같습니다.
float a[99], b[99];
int ia[99], ib[99], i, n, j;
......
for (i = 0; i < n; i++) a[ia[i]] = b[j + ib[i]];
현재 문제점은ARM NEON에서 직접적으로 간접 주소 지정을 할 수 없다면 우회적인 방법으로 간접 주소 지정(LUT 연산)을 할 수 있는 지가 궁금합니다.
혹시 위의 LUT 연산을 NEON에서 수행해 보신 경험이 있는 분이 계시다면 좋은 조언 좀 부탁드리겠습니다.
감사합니다.
좋은 주말 보내십시오.