* 위 블로그는 스터디를 정리한 것이므로 참고용으로만 사용하시길 바랍니다.
1. 안드로이드 병렬 프로그램의 종류
- ARM SIMD(NEON)
- 안드로이드 멀티스레드(MARE, OpenMP)
- 모바일 GPGPU(Open CL)
2. ARM SIMD(NEON)
- 일반적으로 어셈블리 명령어를 기본으로하며, C 언어 형식의 내장함수로 지원한다.
- CPU의 명령어를 사용하므로 모바일 기기의 하드웨어 특성을 적게받는다.
- 싱글코어 CPU에서도 빠르게 동작한다.
- 병렬처리가 간편하다.
- 벡터 변수의 데이터 크기는 64bit, 128bit 두개가 있다.
- int8X8_t ~~ int32X2_t (64bit)
- int8X16_t ~~ int64X2_t (128bit)
- SIMD 명령어 지원
- 독립 레지스터(Q레지스터)
- 독립 파이프라인
- 정수와 부동소수점 기능을 모두 지원
- 데이터 조작의 효율성이 높으며, 최소한의 메모리 접근이 가능
- 광범위한 멀티미디어 코덱 개발 가능
- CPU클록 수의 감소
- 저전력
- 애플리케이션 코드 효율의 증가
3. 안드로이드 멀티스레드(MARE, OpenMP)
- 공유 메모리 병렬 처리 기법을 말한다..
- 자바의스레드, 퀄컴의 MARE등이 속한다.
- 병행처리와 헷갈리면 안된다.
- 기존코드를 재활용 할 수 있다.
- CPU의 개수가 증가함에 따라 어플리케이션의 성능도 향상된다.
4. 모바일 GPGPU(Open CL)
- MIMD에 포함된다.
- CPU보다 메모리의 용량이 크다
- C 표준 컴파일러를 확장한 형태이다.
- 콘텍스트 스위칭이 빠르다.
5. NEON 애플리케이션의 동작구조
- 메모리(배열) 변수에 있는 값을 벡터 변수에 대입한다.
- NEON 명령어 또는 함수를 이용하여 벡터 변수 연산을 실행한다. 벡터변수 연산은 루프를 돌면서 반복해서 연산을 실행한다.
- 벡터 변수에 저장된 결과를 메모리(배열) 변수로 저장한다.
6. NEON 적용과정
- 일반애플리케이션의 디버깅과 테스트를 완료해야한다. 일반 애플리케이션의 버그는 NEON에서도 발견된다.
- 일반 애플리케이션의 병목 구간 또는 코어 부분을 확인한다.
- NEON구조에 적당한지 확인한다.
- 128bit, 64bit에 담을 수 있는 데이터의 개수를 설정한다.
- 얼마나 성능이 개선될지 예측한다.
- NEON 애플리케이션의 제작 및 디버깅 기간을 계산한다.
- 제작하고 나서 NEON과 일반 애플리케이션의 성능을 비교한다.
7. NEON 사용 방법
- C언어
- OpenMAX DL 라이브러리
- 자동벡터화
- 어셈블리어
- 인트린식
작성자가 댓글을 삭제했습니다.
답글삭제